org.gudy.azureus2.pluginsimpl.local.peers
Class PeerForeignDelegate

java.lang.Object
  extended by org.gudy.azureus2.pluginsimpl.local.peers.PeerForeignDelegate
All Implemented Interfaces:
PEPeerTransport, PEPeer, Taggable

public class PeerForeignDelegate
extends java.lang.Object
implements PEPeerTransport


Field Summary
protected  int _lastPiece
           
protected  AEMonitor this_mon
           
 
Fields inherited from interface org.gudy.azureus2.core3.peer.impl.PEPeerTransport
CONNECTION_CONNECTING, CONNECTION_FULLY_ESTABLISHED, CONNECTION_PENDING, CONNECTION_WAITING_FOR_HANDSHAKE
 
Fields inherited from interface org.gudy.azureus2.core3.peer.PEPeer
CLOSING, CONNECTING, DISCONNECTED, HANDSHAKING, MESSAGING_AZMP, MESSAGING_BT_ONLY, MESSAGING_EXTERN, MESSAGING_LTEP, StateNames, TRANSFERING
 
Fields inherited from interface com.aelitis.azureus.core.tag.Taggable
TT_DOWNLOAD, TT_PEER
 
Constructor Summary
protected PeerForeignDelegate(PeerManagerImpl _manager, Peer _foreign)
           
 
Method Summary
 void addListener(PEPeerListener l)
          Add peer listener.
 void addRateLimiter(LimitedRateGroup limiter, boolean upload)
           
 void addReservedPieceNumber(int piece_number)
          adds the reserved piece for piece picking by this peer
 void checkInterested()
          Nothing to do if called
 void clearAvailabilityAdded()
          Nothing to do if called
 void clearRequestHint()
           
 void closeConnection(java.lang.String reason)
          Close the peer connection
protected  void dataReceived()
           
 void doKeepAliveCheck()
          Check if we need to send a keep-alive message.
 void doPerformanceTuningCheck()
          Perform checks related to performance optimizations, i.e.
 boolean doTimeoutChecks()
          Check for possible connection timeouts.
 boolean equals(java.lang.Object other)
           
 void generateEvidence(IndentWriter writer)
           
 java.net.InetAddress getAlternativeIPv6()
           
 BitFlags getAvailable()
           
 long getBytesRemaining()
           
 java.lang.String getClient()
           
 java.lang.String getClientNameFromExtensionHandshake()
           
 java.lang.String getClientNameFromPeerID()
           
 int getConnectionState()
          Get the specific peer connection state.
 int getConsecutiveNoRequestCount()
           
 PEPeerControl getControl()
           
 java.lang.Object getData(java.lang.String key)
          To retreive arbitrary objects against a peer.
 int getDownloadRateLimitBytesPerSecond()
           
 java.lang.String getEncryption()
          Returns name of encryption used by the peer
 java.util.List getExpiredRequests()
           
 byte[] getHandshakeReservedBytes()
           
 byte[] getId()
           
 int getIncomingRequestCount()
           
 int[] getIncomingRequestedPieceNumbers()
          get a list of piece numbers the peer has requested
 java.lang.String getIp()
           
 java.lang.String getIPHostName()
          Gets the host name for the IP, if possible, IP as string otherwise
 long getLastMessageSentTime()
           
 int getLastPiece()
           
 long getLatency()
           
 PEPeerManager getManager()
           
 int getMaxNbRequests()
          peer-specific request max.
 int getMessagingMode()
           
 int getNbRequests()
           
 java.lang.String getNetwork()
           
 int getOutboundDataQueueSize()
          amount of data queued for delivery to peer
 int getOutgoingRequestCount()
           
 int[] getOutgoingRequestedPieceNumbers()
          get a list of piece numbers the we have requested from peer
 PeerItem getPeerItemIdentity()
          Get the peer's address + port identification item.
 java.lang.String getPeerSource()
           
 int getPeerState()
           
 int getPercentDoneInThousandNotation()
          Get the peer's torrent completion percentage in thousand-notation, i.e.
 int getPercentDoneOfCurrentIncomingRequest()
           
 int getPercentDoneOfCurrentOutgoingRequest()
           
 Connection getPluginConnection()
          Get the connection that backs this peer.
 int getPort()
          Get the peer's local TCP connection port.
 int[] getPriorityOffsets()
          Any priority offsets this peer has, or null if none
 java.lang.String getProtocol()
           
 java.lang.String getProtocolQualifier()
           
 LimitedRateGroup[] getRateLimiters(boolean upload)
           
 int[] getRequestHint()
          Get current request hint for a given piece for this peer.
 int getRequestIndex(DiskManagerReadRequest request)
          Returns the index of this request in the peer's queue or -1 if not found
 int[] getReservedPieceNumbers()
          Get the reserved pieces for piece picking by this peer
 long getSnubbedTime()
           
 PEPeerStats getStats()
           
 Message[] getSupportedMessages()
          Get the list of messages that this peer and us both understand.
 java.lang.String getTaggableID()
           
 TaggableResolver getTaggableResolver()
           
 java.lang.Object getTaggableTransientProperty(java.lang.String key)
           
 int getTaggableType()
           
 int getTCPListenPort()
          Get the TCP port this peer is listening for incoming connections on.
 long getTimeSinceConnectionEstablished()
          Get the time since this connection was first established.
 long getTimeSinceGoodDataReceived()
          Get the time since the most-recent data that was actually written to disk was received.
 long getTimeSinceLastDataMessageReceived()
          Get the time since the last (most-recent) data (payload) message was received.
 long getTimeSinceLastDataMessageSent()
          Get the time since the last (most-recent) data (payload) message was sent.
 int getUDPListenPort()
          Get the UDP port this peer is listening for incoming connections on.
 int getUDPNonDataListenPort()
          Get the UDP port this peer is listening on for non-data connections
 long getUnchokedForMillis()
           
 int getUniqueAnnounce()
           
 int getUploadHint()
           
 int getUploadRateLimitBytesPerSecond()
           
 java.lang.Object getUserData(java.lang.Object key)
          To retreive arbitrary objects against a peer.
 int hashCode()
           
 boolean hasReceivedBitField()
           
 boolean isAvailabilityAdded()
          Apaprently nothing significant to do if called
 boolean isChokedByMe()
          Am I choking the peer.
 boolean isChokingMe()
          Is the peer choking me.
 boolean isClosed()
           
 boolean isDownloadDisabled()
           
 boolean isDownloadPossible()
          checks several factors within the object so the caller wouldn't need to for convienience and speed.
 boolean isIncoming()
           
 boolean isInterested()
          Is the peer Interested in me.
 boolean isInteresting()
          Am I Interested in the peer.
 boolean isLANLocal()
          Is the connection within the local LAN network.
 boolean isOptimisticUnchoke()
           
 boolean isPieceAvailable(int pieceNumber)
           
 boolean isPriorityConnection()
           
 boolean isRelativeSeed()
           
 boolean isSafeForReconnect()
          This method is called to check if it is safe to reconnect to a peer, i.e.
 boolean isSeed()
           
 boolean isSnubbed()
           
 boolean isStalledPendingLoad()
          is peer waiting for a disk read with no network writes queued
 boolean isTCP()
           
 boolean isUnchokeOverride()
           
 boolean isUploadDisabled()
           
 PEPeerTransport reconnect(boolean tryUDP, boolean tryIPv6)
          Attempts to reconnect to the same peer
 void removeListener(PEPeerListener l)
          Remove peer listener.
 void removeRateLimiter(LimitedRateGroup limiter, boolean upload)
           
 void removeReservedPieceNumber(int piece_number)
           
 DiskManagerReadRequest request(int pieceNumber, int pieceOffset, int pieceLength, boolean return_duplicates)
           
 void requestAllocationComplete()
           
 boolean requestAllocationStarts(int[] base_priorities)
          Two methods that allow a peer to aggregate the individual requests generated during an allocation cycle if so desired
 void sendBadPiece(int piece_number)
           
 void sendCancel(DiskManagerReadRequest request)
           
 void sendChoke()
          Should never be called
 void sendHave(int piece)
          Nothing to do if called
 void sendRejectRequest(DiskManagerReadRequest request)
           
 boolean sendRequestHint(int piece_number, int offset, int length, int life)
          Send a request hint to the peer.
 void sendStatsReply(java.util.Map reply)
           
 void sendStatsRequest(java.util.Map request)
           
 void sendUnChoke()
          Should never be called
 void setConsecutiveNoRequestCount(int num)
           
 void setData(java.lang.String key, java.lang.Object value)
          To store arbitrary objects against a peer.
 void setDownloadDisabled(java.lang.Object key, boolean disabled)
           
 void setDownloadRateLimitBytesPerSecond(int bytes)
           
 void setHaveAggregationEnabled(boolean enabled)
           
 void setLastPiece(int pieceNumber)
           
 void setOptimisticUnchoke(boolean is_optimistic)
           
 void setPriorityConnection(boolean is_priority)
           
 void setSnubbed(boolean b)
           
 void setSuspendedLazyBitFieldEnabled(boolean enable)
          Enable suspended lazy bitfield for this peer - we will appear incomplete until this is disabled, at which point (well, fairly soon after) the bitfield will be completed
 void setTaggableTransientProperty(java.lang.String key, java.lang.Object value)
           
 void setUniqueAnnounce(int uniquePieceNumber)
           
 void setUploadDisabled(java.lang.Object key, boolean disabled)
           
 void setUploadHint(int timeToSpread)
           
 void setUploadRateLimitBytesPerSecond(int bytes)
           
 void setUserData(java.lang.Object key, java.lang.Object value)
          To store arbitrary objects against a peer.
 void start()
          Start message processing for the peer
protected  void stop()
           
 boolean supportsMessaging()
          Whether or not this peer supports the advanced messaging API.
 boolean transferAvailable()
           
 void updateAutoUploadPriority(java.lang.Object key, boolean inc)
           
 void updatePeerExchange()
          Do any peer exchange processing/updating.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_lastPiece

protected volatile int _lastPiece

this_mon

protected AEMonitor this_mon
Constructor Detail

PeerForeignDelegate

protected PeerForeignDelegate(PeerManagerImpl _manager,
                              Peer _foreign)
Method Detail

start

public void start()
Description copied from interface: PEPeerTransport
Start message processing for the peer

Specified by:
start in interface PEPeerTransport

stop

protected void stop()

sendChoke

public void sendChoke()
Should never be called

Specified by:
sendChoke in interface PEPeerTransport
Specified by:
sendChoke in interface PEPeer

sendHave

public void sendHave(int piece)
Nothing to do if called

Specified by:
sendHave in interface PEPeerTransport

sendUnChoke

public void sendUnChoke()
Should never be called

Specified by:
sendUnChoke in interface PEPeerTransport
Specified by:
sendUnChoke in interface PEPeer

getAlternativeIPv6

public java.net.InetAddress getAlternativeIPv6()
Specified by:
getAlternativeIPv6 in interface PEPeer
Returns:
an ipv6 address under which the peer should be connectable if it announced one, null otherwise

transferAvailable

public boolean transferAvailable()
Specified by:
transferAvailable in interface PEPeerTransport
Specified by:
transferAvailable in interface PEPeer

isDownloadPossible

public boolean isDownloadPossible()
Description copied from interface: PEPeer
checks several factors within the object so the caller wouldn't need to for convienience and speed.

Specified by:
isDownloadPossible in interface PEPeer
Returns:
true if none of several criteria indicate a request can't be made of the peer

sendCancel

public void sendCancel(DiskManagerReadRequest request)
Specified by:
sendCancel in interface PEPeerTransport

request

public DiskManagerReadRequest request(int pieceNumber,
                                      int pieceOffset,
                                      int pieceLength,
                                      boolean return_duplicates)
Specified by:
request in interface PEPeerTransport
Parameters:
pieceNumber -
pieceOffset -
pieceLength -
return_duplicates - - if true and request already exists it will be returned, if false -> null
Returns:
true is the piece is really requested

getRequestIndex

public int getRequestIndex(DiskManagerReadRequest request)
Description copied from interface: PEPeerTransport
Returns the index of this request in the peer's queue or -1 if not found

Specified by:
getRequestIndex in interface PEPeerTransport
Returns:

dataReceived

protected void dataReceived()

closeConnection

public void closeConnection(java.lang.String reason)
Description copied from interface: PEPeerTransport
Close the peer connection

Specified by:
closeConnection in interface PEPeerTransport
Parameters:
reason - for closure

isClosed

public boolean isClosed()
Specified by:
isClosed in interface PEPeer

getExpiredRequests

public java.util.List getExpiredRequests()
Specified by:
getExpiredRequests in interface PEPeerTransport

getLastMessageSentTime

public long getLastMessageSentTime()
Specified by:
getLastMessageSentTime in interface PEPeerTransport

getMaxNbRequests

public int getMaxNbRequests()
Description copied from interface: PEPeerTransport
peer-specific request max. return -1 to use the default piece-picker allocation method

Specified by:
getMaxNbRequests in interface PEPeerTransport
Returns:

getNbRequests

public int getNbRequests()
Specified by:
getNbRequests in interface PEPeerTransport

getPriorityOffsets

public int[] getPriorityOffsets()
Description copied from interface: PEPeerTransport
Any priority offsets this peer has, or null if none

Specified by:
getPriorityOffsets in interface PEPeerTransport
Returns:

requestAllocationStarts

public boolean requestAllocationStarts(int[] base_priorities)
Description copied from interface: PEPeerTransport
Two methods that allow a peer to aggregate the individual requests generated during an allocation cycle if so desired

Specified by:
requestAllocationStarts in interface PEPeerTransport
Returns:
true if the peer is managing request priorities and doesn't want end-game random allocation behaviour

requestAllocationComplete

public void requestAllocationComplete()
Specified by:
requestAllocationComplete in interface PEPeerTransport

getControl

public PEPeerControl getControl()
Specified by:
getControl in interface PEPeerTransport

updatePeerExchange

public void updatePeerExchange()
Description copied from interface: PEPeerTransport
Do any peer exchange processing/updating.

Specified by:
updatePeerExchange in interface PEPeerTransport

getPeerItemIdentity

public PeerItem getPeerItemIdentity()
Description copied from interface: PEPeerTransport
Get the peer's address + port identification item.

Specified by:
getPeerItemIdentity in interface PEPeerTransport
Returns:
id

getConnectionState

public int getConnectionState()
Description copied from interface: PEPeerTransport
Get the specific peer connection state.

Specified by:
getConnectionState in interface PEPeerTransport
Returns:
connection state

doKeepAliveCheck

public void doKeepAliveCheck()
Description copied from interface: PEPeerTransport
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.

Specified by:
doKeepAliveCheck in interface PEPeerTransport

doTimeoutChecks

public boolean doTimeoutChecks()
Description copied from interface: PEPeerTransport
Check for possible connection timeouts.

Specified by:
doTimeoutChecks in interface PEPeerTransport
Returns:
true if the connection has been timed-out, false if not

doPerformanceTuningCheck

public void doPerformanceTuningCheck()
Description copied from interface: PEPeerTransport
Perform checks related to performance optimizations, i.e. tune buffering related to send/receive speed.

Specified by:
doPerformanceTuningCheck in interface PEPeerTransport

setSuspendedLazyBitFieldEnabled

public void setSuspendedLazyBitFieldEnabled(boolean enable)
Description copied from interface: PEPeer
Enable suspended lazy bitfield for this peer - we will appear incomplete until this is disabled, at which point (well, fairly soon after) the bitfield will be completed

Specified by:
setSuspendedLazyBitFieldEnabled in interface PEPeer

getTimeSinceConnectionEstablished

public long getTimeSinceConnectionEstablished()
Description copied from interface: PEPeer
Get the time since this connection was first established. NOTE: This method will always return 0 at any time before the underlying transport is fully connected, i.e. before handshaking begins.

Specified by:
getTimeSinceConnectionEstablished in interface PEPeer
Returns:
time count in ms

getTimeSinceLastDataMessageReceived

public long getTimeSinceLastDataMessageReceived()
Description copied from interface: PEPeerTransport
Get the time since the last (most-recent) data (payload) message was received.

Specified by:
getTimeSinceLastDataMessageReceived in interface PEPeerTransport
Returns:
time count in ms, or -1 if we've never received a data message from them

getTimeSinceGoodDataReceived

public long getTimeSinceGoodDataReceived()
Description copied from interface: PEPeerTransport
Get the time since the most-recent data that was actually written to disk was received.

Specified by:
getTimeSinceGoodDataReceived in interface PEPeerTransport
Returns:
time count in ms, or -1 if we've never received usefull data from them

getTimeSinceLastDataMessageSent

public long getTimeSinceLastDataMessageSent()
Description copied from interface: PEPeerTransport
Get the time since the last (most-recent) data (payload) message was sent.

Specified by:
getTimeSinceLastDataMessageSent in interface PEPeerTransport
Returns:
time count in ms, or -1 if we've never sent them a data message

getUnchokedForMillis

public long getUnchokedForMillis()
Specified by:
getUnchokedForMillis in interface PEPeerTransport

getLatency

public long getLatency()
Specified by:
getLatency in interface PEPeerTransport

getConsecutiveNoRequestCount

public int getConsecutiveNoRequestCount()
Specified by:
getConsecutiveNoRequestCount in interface PEPeer

setConsecutiveNoRequestCount

public void setConsecutiveNoRequestCount(int num)
Specified by:
setConsecutiveNoRequestCount in interface PEPeer

getManager

public PEPeerManager getManager()
Specified by:
getManager in interface PEPeer

getPeerSource

public java.lang.String getPeerSource()
Specified by:
getPeerSource in interface PEPeer

getPeerState

public int getPeerState()
Specified by:
getPeerState in interface PEPeer

getId

public byte[] getId()
Specified by:
getId in interface PEPeer

getIp

public java.lang.String getIp()
Specified by:
getIp in interface PEPeer

getIPHostName

public java.lang.String getIPHostName()
Description copied from interface: PEPeer
Gets the host name for the IP, if possible, IP as string otherwise

Specified by:
getIPHostName in interface PEPeer
Returns:
hostname or IP

getPort

public int getPort()
Description copied from interface: PEPeer
Get the peer's local TCP connection port.

Specified by:
getPort in interface PEPeer
Returns:
local port

getTCPListenPort

public int getTCPListenPort()
Description copied from interface: PEPeer
Get the TCP port this peer is listening for incoming connections on.

Specified by:
getTCPListenPort in interface PEPeer
Returns:
TCP port, or 0 if port is unknown

getUDPListenPort

public int getUDPListenPort()
Description copied from interface: PEPeer
Get the UDP port this peer is listening for incoming connections on.

Specified by:
getUDPListenPort in interface PEPeer
Returns:
UDP port, or 0 if port is unknown

getUDPNonDataListenPort

public int getUDPNonDataListenPort()
Description copied from interface: PEPeer
Get the UDP port this peer is listening on for non-data connections

Specified by:
getUDPNonDataListenPort in interface PEPeer
Returns:

getAvailable

public BitFlags getAvailable()
Specified by:
getAvailable in interface PEPeer

hasReceivedBitField

public boolean hasReceivedBitField()
Specified by:
hasReceivedBitField in interface PEPeer

isPieceAvailable

public boolean isPieceAvailable(int pieceNumber)
Specified by:
isPieceAvailable in interface PEPeer
Parameters:
pieceNumber - int
Returns:
true if this peers makes this piece available

setSnubbed

public void setSnubbed(boolean b)
Specified by:
setSnubbed in interface PEPeer

isChokingMe

public boolean isChokingMe()
Description copied from interface: PEPeer
Is the peer choking me.

Specified by:
isChokingMe in interface PEPeer
Returns:
true if I am choked by the peer, false if not

isChokedByMe

public boolean isChokedByMe()
Description copied from interface: PEPeer
Am I choking the peer.

Specified by:
isChokedByMe in interface PEPeer
Returns:
true if the peer is choked, false if not

isUnchokeOverride

public boolean isUnchokeOverride()
Specified by:
isUnchokeOverride in interface PEPeer

isInteresting

public boolean isInteresting()
Description copied from interface: PEPeer
Am I Interested in the peer.

Specified by:
isInteresting in interface PEPeer
Returns:
true if peer is interesting, false if not

isInterested

public boolean isInterested()
Description copied from interface: PEPeer
Is the peer Interested in me.

Specified by:
isInterested in interface PEPeer
Returns:
true if the peer is interested in me, false if not

isSeed

public boolean isSeed()
Specified by:
isSeed in interface PEPeer

isRelativeSeed

public boolean isRelativeSeed()
Specified by:
isRelativeSeed in interface PEPeer
Returns:
true if the peer is only uploading and can't use the data we have to offer (we're seeding) or we can't use the data he has to offer (we're downloading)

isSnubbed

public boolean isSnubbed()
Specified by:
isSnubbed in interface PEPeer

getSnubbedTime

public long getSnubbedTime()
Specified by:
getSnubbedTime in interface PEPeer

isLANLocal

public boolean isLANLocal()
Description copied from interface: PEPeerTransport
Is the connection within the local LAN network.

Specified by:
isLANLocal in interface PEPeerTransport
Specified by:
isLANLocal in interface PEPeer
Returns:
true if within LAN, false of outside the LAN segment

sendRequestHint

public boolean sendRequestHint(int piece_number,
                               int offset,
                               int length,
                               int life)
Description copied from interface: PEPeer
Send a request hint to the peer.

Specified by:
sendRequestHint in interface PEPeer
Returns:
true if sent, false otherwise

getRequestHint

public int[] getRequestHint()
Description copied from interface: PEPeer
Get current request hint for a given piece for this peer.

Specified by:
getRequestHint in interface PEPeer
Returns:
null if no hint int[]{ piece_number, offset, length } if hint found

clearRequestHint

public void clearRequestHint()
Specified by:
clearRequestHint in interface PEPeer

sendRejectRequest

public void sendRejectRequest(DiskManagerReadRequest request)
Specified by:
sendRejectRequest in interface PEPeer

sendBadPiece

public void sendBadPiece(int piece_number)
Specified by:
sendBadPiece in interface PEPeerTransport

sendStatsRequest

public void sendStatsRequest(java.util.Map request)
Specified by:
sendStatsRequest in interface PEPeerTransport
Specified by:
sendStatsRequest in interface PEPeer

sendStatsReply

public void sendStatsReply(java.util.Map reply)
Specified by:
sendStatsReply in interface PEPeerTransport

isTCP

public boolean isTCP()
Specified by:
isTCP in interface PEPeerTransport

getNetwork

public java.lang.String getNetwork()
Specified by:
getNetwork in interface PEPeerTransport

getStats

public PEPeerStats getStats()
Specified by:
getStats in interface PEPeer

isIncoming

public boolean isIncoming()
Specified by:
isIncoming in interface PEPeer

getPercentDoneInThousandNotation

public int getPercentDoneInThousandNotation()
Description copied from interface: PEPeer
Get the peer's torrent completion percentage in thousand-notation, i.e. 53.7% is returned as the value 0537.

Specified by:
getPercentDoneInThousandNotation in interface PEPeer
Returns:
the percentage the peer has complete

getBytesRemaining

public long getBytesRemaining()
Specified by:
getBytesRemaining in interface PEPeer

getClient

public java.lang.String getClient()
Specified by:
getClient in interface PEPeer

getHandshakeReservedBytes

public byte[] getHandshakeReservedBytes()
Specified by:
getHandshakeReservedBytes in interface PEPeer

isOptimisticUnchoke

public boolean isOptimisticUnchoke()
Specified by:
isOptimisticUnchoke in interface PEPeer

setOptimisticUnchoke

public void setOptimisticUnchoke(boolean is_optimistic)
Specified by:
setOptimisticUnchoke in interface PEPeer

getUniqueAnnounce

public int getUniqueAnnounce()
Specified by:
getUniqueAnnounce in interface PEPeer

getUploadHint

public int getUploadHint()
Specified by:
getUploadHint in interface PEPeer

setUniqueAnnounce

public void setUniqueAnnounce(int uniquePieceNumber)
Specified by:
setUniqueAnnounce in interface PEPeer

setUploadHint

public void setUploadHint(int timeToSpread)
Specified by:
setUploadHint in interface PEPeer

isStalledPendingLoad

public boolean isStalledPendingLoad()
Description copied from interface: PEPeerTransport
is peer waiting for a disk read with no network writes queued

Specified by:
isStalledPendingLoad in interface PEPeerTransport
Returns:

addListener

public void addListener(PEPeerListener l)
Description copied from interface: PEPeer
Add peer listener.

Specified by:
addListener in interface PEPeer

removeListener

public void removeListener(PEPeerListener l)
Description copied from interface: PEPeer
Remove peer listener.

Specified by:
removeListener in interface PEPeer

getPluginConnection

public Connection getPluginConnection()
Description copied from interface: PEPeer
Get the connection that backs this peer.

Specified by:
getPluginConnection in interface PEPeer
Returns:
connection

getPercentDoneOfCurrentIncomingRequest

public int getPercentDoneOfCurrentIncomingRequest()
Specified by:
getPercentDoneOfCurrentIncomingRequest in interface PEPeer

getPercentDoneOfCurrentOutgoingRequest

public int getPercentDoneOfCurrentOutgoingRequest()
Specified by:
getPercentDoneOfCurrentOutgoingRequest in interface PEPeer

supportsMessaging

public boolean supportsMessaging()
Description copied from interface: PEPeer
Whether or not this peer supports the advanced messaging API.

Specified by:
supportsMessaging in interface PEPeer
Returns:
true if extended messaging is supported, false if not

getMessagingMode

public int getMessagingMode()
Specified by:
getMessagingMode in interface PEPeer

getEncryption

public java.lang.String getEncryption()
Description copied from interface: PEPeer
Returns name of encryption used by the peer

Specified by:
getEncryption in interface PEPeer
Returns:

getProtocol

public java.lang.String getProtocol()
Specified by:
getProtocol in interface PEPeer

getProtocolQualifier

public java.lang.String getProtocolQualifier()
Specified by:
getProtocolQualifier in interface PEPeer

getSupportedMessages

public Message[] getSupportedMessages()
Description copied from interface: PEPeer
Get the list of messages that this peer and us both understand.

Specified by:
getSupportedMessages in interface PEPeer
Returns:
messages available for use, or null of supported is yet unknown or unavailable

getData

public java.lang.Object getData(java.lang.String key)
Description copied from interface: PEPeer
To retreive arbitrary objects against a peer.

Specified by:
getData in interface PEPeer

setData

public void setData(java.lang.String key,
                    java.lang.Object value)
Description copied from interface: PEPeer
To store arbitrary objects against a peer.

Specified by:
setData in interface PEPeer

getUserData

public java.lang.Object getUserData(java.lang.Object key)
To retreive arbitrary objects against a peer.

Specified by:
getUserData in interface PEPeer

setUserData

public void setUserData(java.lang.Object key,
                        java.lang.Object value)
To store arbitrary objects against a peer.

Specified by:
setUserData in interface PEPeer

equals

public boolean equals(java.lang.Object other)
Overrides:
equals in class java.lang.Object

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object

getReservedPieceNumbers

public int[] getReservedPieceNumbers()
Description copied from interface: PEPeer
Get the reserved pieces for piece picking by this peer

Specified by:
getReservedPieceNumbers in interface PEPeer

addReservedPieceNumber

public void addReservedPieceNumber(int piece_number)
Description copied from interface: PEPeer
adds the reserved piece for piece picking by this peer

Specified by:
addReservedPieceNumber in interface PEPeer

removeReservedPieceNumber

public void removeReservedPieceNumber(int piece_number)
Specified by:
removeReservedPieceNumber in interface PEPeer

getIncomingRequestedPieceNumbers

public int[] getIncomingRequestedPieceNumbers()
Description copied from interface: PEPeer
get a list of piece numbers the peer has requested

Specified by:
getIncomingRequestedPieceNumbers in interface PEPeer
Returns:
list of Long() representing the piece number requested, in order

getIncomingRequestCount

public int getIncomingRequestCount()
Specified by:
getIncomingRequestCount in interface PEPeer

getOutgoingRequestCount

public int getOutgoingRequestCount()
Specified by:
getOutgoingRequestCount in interface PEPeer

getOutgoingRequestedPieceNumbers

public int[] getOutgoingRequestedPieceNumbers()
Description copied from interface: PEPeer
get a list of piece numbers the we have requested from peer

Specified by:
getOutgoingRequestedPieceNumbers in interface PEPeer
Returns:
list of Long() representing the piece number requested, oldest to newest

getOutboundDataQueueSize

public int getOutboundDataQueueSize()
Description copied from interface: PEPeer
amount of data queued for delivery to peer

Specified by:
getOutboundDataQueueSize in interface PEPeer
Returns:

getLastPiece

public int getLastPiece()
Specified by:
getLastPiece in interface PEPeer

setLastPiece

public void setLastPiece(int pieceNumber)
Specified by:
setLastPiece in interface PEPeer

checkInterested

public void checkInterested()
Nothing to do if called

Specified by:
checkInterested in interface PEPeerTransport

isAvailabilityAdded

public boolean isAvailabilityAdded()
Apaprently nothing significant to do if called


clearAvailabilityAdded

public void clearAvailabilityAdded()
Nothing to do if called


reconnect

public PEPeerTransport reconnect(boolean tryUDP,
                                 boolean tryIPv6)
Description copied from interface: PEPeerTransport
Attempts to reconnect to the same peer

Specified by:
reconnect in interface PEPeerTransport
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

isSafeForReconnect

public boolean isSafeForReconnect()
Description copied from interface: PEPeerTransport
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

Specified by:
isSafeForReconnect in interface PEPeerTransport
Returns:
true if we exchanged payload data with the peer during the current connection

setUploadRateLimitBytesPerSecond

public void setUploadRateLimitBytesPerSecond(int bytes)
Specified by:
setUploadRateLimitBytesPerSecond in interface PEPeer

setDownloadRateLimitBytesPerSecond

public void setDownloadRateLimitBytesPerSecond(int bytes)
Specified by:
setDownloadRateLimitBytesPerSecond in interface PEPeer

getUploadRateLimitBytesPerSecond

public int getUploadRateLimitBytesPerSecond()
Specified by:
getUploadRateLimitBytesPerSecond in interface PEPeer

getDownloadRateLimitBytesPerSecond

public int getDownloadRateLimitBytesPerSecond()
Specified by:
getDownloadRateLimitBytesPerSecond in interface PEPeer

updateAutoUploadPriority

public void updateAutoUploadPriority(java.lang.Object key,
                                     boolean inc)
Specified by:
updateAutoUploadPriority in interface PEPeer

addRateLimiter

public void addRateLimiter(LimitedRateGroup limiter,
                           boolean upload)
Specified by:
addRateLimiter in interface PEPeer

getRateLimiters

public LimitedRateGroup[] getRateLimiters(boolean upload)
Specified by:
getRateLimiters in interface PEPeer

removeRateLimiter

public void removeRateLimiter(LimitedRateGroup limiter,
                              boolean upload)
Specified by:
removeRateLimiter in interface PEPeer

setUploadDisabled

public void setUploadDisabled(java.lang.Object key,
                              boolean disabled)
Specified by:
setUploadDisabled in interface PEPeer

setDownloadDisabled

public void setDownloadDisabled(java.lang.Object key,
                                boolean disabled)
Specified by:
setDownloadDisabled in interface PEPeer

isUploadDisabled

public boolean isUploadDisabled()
Specified by:
isUploadDisabled in interface PEPeer

isDownloadDisabled

public boolean isDownloadDisabled()
Specified by:
isDownloadDisabled in interface PEPeer

setHaveAggregationEnabled

public void setHaveAggregationEnabled(boolean enabled)
Specified by:
setHaveAggregationEnabled in interface PEPeer

setPriorityConnection

public void setPriorityConnection(boolean is_priority)
Specified by:
setPriorityConnection in interface PEPeer

isPriorityConnection

public boolean isPriorityConnection()
Specified by:
isPriorityConnection in interface PEPeer

generateEvidence

public void generateEvidence(IndentWriter writer)
Specified by:
generateEvidence in interface PEPeerTransport

getClientNameFromExtensionHandshake

public java.lang.String getClientNameFromExtensionHandshake()
Specified by:
getClientNameFromExtensionHandshake in interface PEPeer

getClientNameFromPeerID

public java.lang.String getClientNameFromPeerID()
Specified by:
getClientNameFromPeerID in interface PEPeer

getTaggableType

public int getTaggableType()

getTaggableID

public java.lang.String getTaggableID()

getTaggableResolver

public TaggableResolver getTaggableResolver()

getTaggableTransientProperty

public java.lang.Object getTaggableTransientProperty(java.lang.String key)

setTaggableTransientProperty

public void setTaggableTransientProperty(java.lang.String key,
                                         java.lang.Object value)