Interface PEPeerTransport

All Superinterfaces:
PEPeer, Taggable, Taggable
All Known Implementing Classes:
PeerForeignDelegate, PEPeerTransportProtocol

public interface PEPeerTransport extends PEPeer
  • Field Details

  • Method Details

    • getOutboundConnectionProgress

      int getOutboundConnectionProgress()
    • start

      void start()
      Start message processing for the peer
    • sendChoke

      void sendChoke()
      Specified by:
      sendChoke in interface PEPeer
    • sendUnChoke

      void sendUnChoke()
      Specified by:
      sendUnChoke in interface PEPeer
    • sendHave

      void sendHave(int piece)
    • sendCancel

      void sendCancel(DiskManagerReadRequest request)
    • sendBadPiece

      void sendBadPiece(int piece_number)
    • sendStatsRequest

      void sendStatsRequest(Map request)
      Specified by:
      sendStatsRequest in interface PEPeer
    • sendStatsReply

      void sendStatsReply(Map reply)
    • requestAllocationStarts

      boolean requestAllocationStarts(int[] base_priorities)
      Two methods that allow a peer to aggregate the individual requests generated during an allocation cycle if so desired
      Returns:
      true if the peer is managing request priorities and doesn't want end-game random allocation behaviour
    • requestAllocationComplete

      void requestAllocationComplete()
    • request

      DiskManagerReadRequest request(int pieceNumber, int pieceOffset, int pieceLength, boolean return_duplicates)
      Parameters:
      pieceNumber -
      pieceOffset -
      pieceLength -
      return_duplicates - - if true and request already exists it will be returned, if false -> null
      Returns:
      request if actually requested, null otherwise
    • getRequestIndex

      int getRequestIndex(DiskManagerReadRequest request)
      Returns the index of this request in the peer's queue or -1 if not found
      Returns:
    • closeConnection

      void closeConnection(String reason, int reason_code)
      Close the peer connection
      Parameters:
      reason - for closure
    • transferAvailable

      boolean transferAvailable()
      Specified by:
      transferAvailable in interface PEPeer
    • getLastMessageSentTimeMono

      long getLastMessageSentTimeMono()
    • getExpiredRequests

      List getExpiredRequests()
    • getMaxNbRequests

      int getMaxNbRequests()
      peer-specific request max. return -1 to use the default piece-picker allocation method
      Returns:
    • getNbRequests

      int getNbRequests()
    • getControl

      PEPeerControl getControl()
    • getPriorityOffsets

      int[] getPriorityOffsets()
      Any priority offsets this peer has, or null if none
      Returns:
    • doKeepAliveCheck

      void doKeepAliveCheck()
      Check if we need to send a keep-alive message. A keep-alive is sent if no other message has been sent within the last 2min.
    • doTimeoutChecks

      boolean doTimeoutChecks()
      Check for possible connection timeouts.
      Returns:
      true if the connection has been timed-out, false if not
    • doPerformanceTuningCheck

      void doPerformanceTuningCheck()
      Perform checks related to performance optimizations, i.e. tune buffering related to send/receive speed.
    • getConnectionState

      int getConnectionState()
      Get the specific peer connection state.
      Returns:
      connection state
    • getTimeSinceLastDataMessageReceived

      long getTimeSinceLastDataMessageReceived()
      Get the time since the last (most-recent) data (payload) message was received.
      Returns:
      time count in ms, or -1 if we've never received a data message from them
    • getTimeSinceGoodDataReceived

      long getTimeSinceGoodDataReceived()
      Get the time since the most-recent data that was actually written to disk was received.
      Returns:
      time count in ms, or -1 if we've never received useful data from them
    • getTimeSinceLastDataMessageSent

      long getTimeSinceLastDataMessageSent()
      Get the time since the last (most-recent) data (payload) message was sent.
      Returns:
      time count in ms, or -1 if we've never sent them a data message
    • getUnchokedForMillis

      long getUnchokedForMillis()
    • getLatency

      long getLatency()
    • updatePeerExchange

      void updatePeerExchange()
      Do any peer exchange processing/updating.
    • getPeerItemIdentity

      PeerItem getPeerItemIdentity()
      Get the peer's address + port identification item.
      Returns:
      id
    • isStalledPendingLoad

      boolean isStalledPendingLoad()
      is peer waiting for a disk read with no network writes queued
      Returns:
    • isLANLocal

      boolean isLANLocal()
      Is the connection within the local LAN network.
      Specified by:
      isLANLocal in interface PEPeer
      Returns:
      true if within LAN, false of outside the LAN segment
    • isTCP

      boolean isTCP()
    • checkInterested

      void checkInterested()
      if it doesn't go as expected when trying to find a piece to ask a peer for, need to double check if we're still interested in them, and get the BT protocol sycnhed
    • reconnect

      PEPeerTransport reconnect(boolean tryUDP, boolean tryIPv6, Map user_data)
      Attempts to reconnect to the same peer
      Parameters:
      tryUDP - try to initiate a UDP connection if true, just reestablish the previous state otherwise
      tryIPv6 - TODO
      Returns:
      null if reconnect not possible, reconnected peer otherwise
    • isReconnect

      boolean isReconnect()
    • getIncomingRequestedPieceNumberCount

      int getIncomingRequestedPieceNumberCount()
    • isSafeForReconnect

      boolean isSafeForReconnect()
      This method is called to check if it is safe to reconnect to a peer, i.e. avoid hammering exchanging data with a peer should work as it takes time to setup the connection and negotiate things before that happens
      Returns:
      true if we exchanged payload data with the peer during the current connection
    • getNetwork

      String getNetwork()
    • sendHashRequest

      void sendHashRequest(TOTorrentFileHashTree.HashRequest req)
    • canSendHolePunch

      boolean canSendHolePunch()
    • sendHolePunch

      void sendHolePunch(InetAddress address, int port)
    • generateEvidence

      void generateEvidence(IndentWriter writer)