Interface PEPeerTransport

    • Method Detail

      • getOutboundConnectionProgress

        int getOutboundConnectionProgress()
      • start

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

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

        void sendHave​(int piece)
      • sendBadPiece

        void sendBadPiece​(int piece_number)
      • sendStatsRequest

        void sendStatsRequest​(java.util.Map request)
        Specified by:
        sendStatsRequest in interface PEPeer
      • sendStatsReply

        void sendStatsReply​(java.util.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​(java.lang.String reason)
        Close the peer connection
        Parameters:
        reason - for closure
      • getLastMessageSentTime

        long getLastMessageSentTime()
      • getExpiredRequests

        java.util.List getExpiredRequests()
      • getMaxNbRequests

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

        int getNbRequests()
      • 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 usefull 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)
        Attempts to reconnect to the same peer
        Parameters:
        tryUDP - try to initate a UDP connection if true, just reestablish the previous state otherwise
        tryIPv6 - TODO
        Returns:
        null if reconnect not possible, reconnected peer otherwise
      • 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

        java.lang.String getNetwork()
      • generateEvidence

        void generateEvidence​(IndentWriter writer)