Class Peer

java.lang.Object
org.klomp.snark.Peer
All Implemented Interfaces:
Comparable<Peer>
Direct Known Subclasses:
WebPeer

public class Peer extends Object implements Comparable<Peer>
  • Field Details

    • _log

      protected final Log _log
    • metainfo

      protected MetaInfo metainfo
      will start out null in magnet mode
    • state

      volatile PeerState state
      ` Keeps state for in/out connections. Non-null when the handshake was successful, the connection setup and runs. Do not access directly. All actions should be through Peer methods.
    • magnetState

      MagnetState magnetState
      shared across all peers on this torrent
    • CHECK_PERIOD

      static final long CHECK_PERIOD
      See Also:
    • RATE_DEPTH

      static final int RATE_DEPTH
      See Also:
  • Constructor Details

    • Peer

      public Peer(PeerID peerID, byte[] my_id, byte[] infohash, MetaInfo metainfo)
      Outgoing connection. Creates a disconnected peer given a PeerID, your own id and the relevant MetaInfo.
      Parameters:
      metainfo - null if in magnet mode
    • Peer

      public Peer(I2PSocket sock, InputStream in, OutputStream out, byte[] my_id, byte[] infohash, MetaInfo metainfo) throws IOException
      Incoming connection. Creates a unconnected peer from the input and output stream got from the socket. Note that the complete handshake (which can take some time or block indefinitely) is done in the calling Thread to get the remote peer id. To completely start the connection call the connect() method.
      Parameters:
      metainfo - null if in magnet mode
      Throws:
      IOException - when an error occurred during the handshake.
  • Method Details

    • isIncoming

      public boolean isIncoming()
      Is this an incoming connection? For RPC
      Since:
      0.9.30
    • getPeerID

      public PeerID getPeerID()
      Returns the id of the peer.
    • toString

      public String toString()
      Returns the String representation of the peerID.
      Overrides:
      toString in class Object
    • getSocket

      public String getSocket()
      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 Object
    • 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 Object
    • compareTo

      @Deprecated public int compareTo(Peer p)
      Deprecated.
      unused?
      Compares the PeerIDs.
      Specified by:
      compareTo in interface Comparable<Peer>
    • runConnection

      public void runConnection(I2PSnarkUtil util, PeerListener listener, BitField bitfield, MagnetState mState, boolean uploadOnly)
      Runs the connection to the other peer. This method does not return until the connection is terminated. When the connection is correctly started the connected() method of the given PeerListener is called. If the connection ends or the connection could not be setup correctly the disconnected() method is called. If the given BitField is non-null it is send to the peer as first message.
      Parameters:
      uploadOnly - if we are complete with skipped files, i.e. a partial seed
    • supportsFast

      public boolean supportsFast()
      Since:
      0.9.21
    • getDestination

      public Destination getDestination()
      Since:
      0.8.4
    • getMagnetState

      public MagnetState getMagnetState()
      Shared state across all peers, callers must sync on returned object
      Returns:
      non-null
      Since:
      0.8.4
    • getHandshakeMap

      public Map<String,BEValue> getHandshakeMap()
      Returns:
      could be null @since 0.8.4
    • setHandshakeMap

      public void setHandshakeMap(Map<String,BEValue> map)
      Parameters:
      map - non-null
      Since:
      0.8.4
    • getMaxPipeline

      public int getMaxPipeline()
      Returns:
      min of PeerState.MIN_PIPELINE, max of PeerState.MAX_PIPELINE
      Since:
      0.9.47
    • sendExtension

      public void sendExtension(int type, byte[] payload)
      Since:
      0.8.4
    • setMetaInfo

      public void setMetaInfo(MetaInfo meta)
      Switch from magnet mode to normal mode
      Since:
      0.8.4
    • isConnected

      public boolean isConnected()
    • disconnect

      public void disconnect(boolean deregister)
      Disconnects this peer if it was connected. If deregister is true, PeerListener.disconnected() will be called when the connection is completely terminated. Otherwise the connection is silently terminated.
    • disconnect

      void disconnect()
    • have

      public void have(int piece)
      Tell the peer we have another piece.
    • cancel

      void cancel(int piece)
      Tell the other side that we are no longer interested in any of the outstanding requests (if any) for this piece.
      Since:
      0.8.1
    • isRequesting

      @Deprecated boolean isRequesting(int p)
      Deprecated.
      deadlocks
      Are we currently requesting the piece?
      Since:
      0.8.1
    • request

      void request()
      Update the request queue. Call after adding wanted pieces.
      Since:
      0.8.1
    • isInterested

      public boolean isInterested()
      Whether or not the peer is interested in pieces we have. Returns false if not connected.
    • setInteresting

      @Deprecated public void setInteresting(boolean interest)
      Deprecated.
      unused
      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.
    • isInteresting

      public boolean isInteresting()
      Whether or not the peer has pieces we want from it. Returns false if not connected.
    • setChoking

      public void setChoking(boolean choke)
      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.
    • isChoking

      public boolean isChoking()
      Whether or not we are choking the peer. Returns true when not connected.
    • isChoked

      public boolean isChoked()
      Whether or not the peer choked us. Returns true when not connected.
    • downloaded

      public void downloaded(int size)
      Increment the counter.
      Since:
      0.8.4
    • uploaded

      public void uploaded(int size)
      Increment the counter.
      Since:
      0.8.4
    • getDownloaded

      public long getDownloaded()
      Returns the number of bytes that have been downloaded. Can be reset to zero with resetCounters() which is called every CHECK_PERIOD by PeerCheckerTask.
    • getUploaded

      public long getUploaded()
      Returns the number of bytes that have been uploaded. Can be reset to zero with resetCounters() which is called every CHECK_PERIOD by PeerCheckerTask.
    • resetCounters

      public void resetCounters()
      Resets the downloaded and uploaded counters to zero.
    • getInactiveTime

      public long getInactiveTime()
    • getMaxInactiveTime

      public long getMaxInactiveTime()
      Since:
      0.9.36
    • keepAlive

      public void keepAlive()
      Send keepalive
    • retransmitRequests

      public void retransmitRequests()
      Retransmit outstanding requests if necessary
    • completed

      public int completed()
      Return how much the peer has
      Returns:
      number of completed pieces (not bytes)
    • isCompleted

      public boolean isCompleted()
      Return if a peer is a seeder
    • setRateHistory

      public void setRateHistory(long up, long down)
      Push the total uploaded/downloaded onto a RATE_DEPTH deep stack
    • getUploadRate

      public long getUploadRate()
      Returns the 4-minute-average rate in Bps
    • getDownloadRate

      public long getDownloadRate()
    • getTotalCommentsSent

      int getTotalCommentsSent()
      Since:
      0.9.31
    • setTotalCommentsSent

      void setTotalCommentsSent(int count)
      Since:
      0.9.31
    • isWebPeer

      public boolean isWebPeer()
      Returns:
      false
      Since:
      0.9.49