Class WebPeer

java.lang.Object
org.klomp.snark.Peer
org.klomp.snark.WebPeer
All Implemented Interfaces:
Comparable<Peer>, EepGet.StatusListener

class WebPeer
extends Peer
implements EepGet.StatusListener
BEP 19. Does not have an associated PeerState. All request tracking is done here.
Since:
0.9.49
  • Field Details

    • IDBytes

      public static final byte[] IDBytes
  • Constructor Details

    • WebPeer

      public WebPeer​(PeerCoordinator coord, URI uri, PeerID peerID, MetaInfo metainfo)
      Outgoing connection. Creates a disconnected peer given a PeerID, your own id and the relevant MetaInfo.
      Parameters:
      uri - must be http with .i2p host
      metainfo - non-null
  • Method Details

    • toString

      public String toString()
      Description copied from class: Peer
      Returns the String representation of the peerID.
      Overrides:
      toString in class Peer
    • getSocket

      public String getSocket()
      Overrides:
      getSocket in class Peer
      Returns:
      socket debug string (for debug printing)
    • hashCode

      public int hashCode()
      The hash code of a Peer is the hash code of the peerID.
      Overrides:
      hashCode in class Peer
    • equals

      public boolean equals​(Object o)
      Two Peers are equal when they have the same PeerID. All other properties are ignored.
      Overrides:
      equals in class Peer
    • runConnection

      public void runConnection​(I2PSnarkUtil util, PeerListener listener, BitField ignore, MagnetState mState, boolean uploadOnly)
      Runs the connection to the other peer. This method does not return until the connection is terminated.
      Overrides:
      runConnection in class Peer
      Parameters:
      ignore - our bitfield, ignore
      uploadOnly - if we are complete with skipped files, i.e. a partial seed
    • getMaxPipeline

      public int getMaxPipeline()
      Overrides:
      getMaxPipeline in class Peer
      Returns:
      min of PeerState.MIN_PIPELINE, max of PeerState.MAX_PIPELINE
    • isConnected

      public boolean isConnected()
      Overrides:
      isConnected in class Peer
    • disconnect

      void disconnect()
      Overrides:
      disconnect in class Peer
    • have

      public void have​(int piece)
      Description copied from class: Peer
      Tell the peer we have another piece.
      Overrides:
      have in class Peer
    • cancel

      void cancel​(int piece)
      Description copied from class: Peer
      Tell the other side that we are no longer interested in any of the outstanding requests (if any) for this piece.
      Overrides:
      cancel in class Peer
    • request

      void request()
      Description copied from class: Peer
      Update the request queue. Call after adding wanted pieces.
      Overrides:
      request in class Peer
    • isInterested

      public boolean isInterested()
      Description copied from class: Peer
      Whether or not the peer is interested in pieces we have. Returns false if not connected.
      Overrides:
      isInterested in class Peer
    • setInteresting

      @Deprecated public void setInteresting​(boolean interest)
      Deprecated.
      Description copied from class: Peer
      Sets whether or not we are interested in pieces from this peer. Defaults to false. When interest is true and this peer unchokes us then we start downloading from it. Has no effect when not connected.
      Overrides:
      setInteresting in class Peer
    • isInteresting

      public boolean isInteresting()
      Description copied from class: Peer
      Whether or not the peer has pieces we want from it. Returns false if not connected.
      Overrides:
      isInteresting in class Peer
    • setChoking

      public void setChoking​(boolean choke)
      Description copied from class: Peer
      Sets whether or not we are choking the peer. Defaults to true. When choke is false and the peer requests some pieces we upload them, otherwise requests of this peer are ignored.
      Overrides:
      setChoking in class Peer
    • isChoking

      public boolean isChoking()
      Description copied from class: Peer
      Whether or not we are choking the peer. Returns true when not connected.
      Overrides:
      isChoking in class Peer
    • isChoked

      public boolean isChoked()
      Description copied from class: Peer
      Whether or not the peer choked us. Returns true when not connected.
      Overrides:
      isChoked in class Peer
    • getInactiveTime

      public long getInactiveTime()
      Overrides:
      getInactiveTime in class Peer
    • getMaxInactiveTime

      public long getMaxInactiveTime()
      Overrides:
      getMaxInactiveTime in class Peer
    • keepAlive

      public void keepAlive()
      Description copied from class: Peer
      Send keepalive
      Overrides:
      keepAlive in class Peer
    • retransmitRequests

      public void retransmitRequests()
      Description copied from class: Peer
      Retransmit outstanding requests if necessary
      Overrides:
      retransmitRequests in class Peer
    • completed

      public int completed()
      Description copied from class: Peer
      Return how much the peer has
      Overrides:
      completed in class Peer
      Returns:
      number of completed pieces (not bytes)
    • isCompleted

      public boolean isCompleted()
      Description copied from class: Peer
      Return if a peer is a seeder
      Overrides:
      isCompleted in class Peer
    • isWebPeer

      public boolean isWebPeer()
      Overrides:
      isWebPeer in class Peer
      Returns:
      true
      Since:
      0.9.49
    • bytesTransferred

      public void bytesTransferred​(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url)
      Description copied from interface: EepGet.StatusListener
      Total length should be == alreadyTransferred + currentWrite + bytesRemaining for all calls
      Specified by:
      bytesTransferred in interface EepGet.StatusListener
      Parameters:
      alreadyTransferred - total of all attempts, not including currentWrite If nonzero on the first call, a partial file of that length was found, _and_ the server supports resume. If zero on a subsequent call after some bytes are transferred (and presumably after an attemptFailed), the server does _not_ support resume and we had to start over. To track _actual_ transfer if the output file could already exist, the listener should keep its own counter, or subtract the initial alreadyTransferred value. And watch out for alreadyTransferred resetting if a resume failed...
      currentWrite - since last call to the listener
      bytesTransferred - includes headers, retries, redirects, discarded partial downloads, ...
      bytesRemaining - on this attempt only, currentWrite already subtracted - or -1 if chunked encoding or server does not return a length
    • attemptFailed

      public void attemptFailed​(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause)
      Specified by:
      attemptFailed in interface EepGet.StatusListener
      See Also:
      EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)
    • transferComplete

      public void transferComplete​(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified)
      Specified by:
      transferComplete in interface EepGet.StatusListener
      outputFile - null if unknown (output stream constructor)
      See Also:
      EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)
    • transferFailed

      public void transferFailed​(String url, long bytesTransferred, long bytesRemaining, int currentAttempt)
      Specified by:
      transferFailed in interface EepGet.StatusListener
      See Also:
      EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)
    • headerReceived

      public void headerReceived​(String url, int attemptNum, String key, String val)
      Description copied from interface: EepGet.StatusListener
      Note: Headers are not processed, and this is not called, for most error response codes, unless setWriteErrorToOutput() is called before fetch(). To be changed?
      Specified by:
      headerReceived in interface EepGet.StatusListener
    • attempting

      public void attempting​(String url)
      Specified by:
      attempting in interface EepGet.StatusListener