org.gudy.azureus2.core3.peer.impl.control
Class PEPeerControlImpl

java.lang.Object
  extended by org.gudy.azureus2.core3.logging.LogRelation
      extended by org.gudy.azureus2.core3.peer.impl.control.PEPeerControlImpl
All Implemented Interfaces:
PeerControlInstance, PeerNATInitiator, DiskManagerCheckRequestListener, DiskManagerWriteRequestListener, IPFilterListener, PEPeerControl, PEPeerManager

public class PEPeerControlImpl
extends LogRelation
implements PEPeerControl, DiskManagerWriteRequestListener, PeerControlInstance, PeerNATInitiator, DiskManagerCheckRequestListener, IPFilterListener

manages all peer transports for a torrent

Author:
MjrTom 2005/Oct/08: Numerous changes for new piece-picking. Also a few optimizations and multi-thread cleanups 2006/Jan/02: refactoring piece picking related code

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.gudy.azureus2.core3.peer.PEPeerManager
PEPeerManager.StatsReceiver
 
Field Summary
protected  PEPeerManagerAdapter adapter
           
 
Constructor Summary
PEPeerControlImpl(byte[] _peer_id, PEPeerManagerAdapter _adapter, DiskManager _diskManager, int _partition_id)
           
 
Method Summary
 void addListener(PEPeerManagerListener l)
           
 void addPeer(PEPeer _transport)
           
 void addPeer(String ip_address, int tcp_port, int udp_port, boolean use_crypto, Map user_data)
          Add a new peer, using the default internal PEPeer implementation (like for peers given in announce reply), using the given address and port.
 void addPeerTransport(PEPeerTransport transport)
           
protected  void addPiece(PEPiece piece, int pieceNumber, boolean force_add, PEPeer for_peer)
           
 void addPiece(PEPiece piece, int pieceNumber, PEPeer for_peer)
          Don't pass a null to this method.
 void addRateLimiter(LimitedRateGroup group, boolean upload)
           
 void badPieceReported(PEPeerTransport originator, int piece_number)
           
 boolean canIPBeBanned(String ip)
           
 boolean canIPBeBlocked(String ip, byte[] torrent_hash)
           
 boolean canToggleSuperSeedMode()
           
 void checkCancelled(DiskManagerCheckRequest request)
           
 void checkCompleted(DiskManagerCheckRequest request, boolean passed)
           
protected  void checkCompletionState()
           
 void checkFailed(DiskManagerCheckRequest request, Throwable cause)
           
 DiskManagerReadRequest createDiskManagerRequest(int pieceNumber, int offset, int length)
           
 PeerExchangerItem createPeerExchangeConnection(PEPeerTransport base_peer)
          Register a peer connection for peer exchange handling.
 PEPeerStats createPeerStats(PEPeer owner)
           
 void dataBytesReceived(PEPeer peer, int length)
          Data bytes received.
 void dataBytesSent(PEPeer peer, int length)
          Data bytes sent.
 void decNbPeersSnubbed()
           
 void discarded(PEPeer peer, int length)
           
 boolean doOptimisticDisconnect(boolean pending_lan_local_peer, boolean force, String network)
           
 void generateEvidence(IndentWriter writer)
           
 PEPeerManagerAdapter getAdapter()
           
 int[] getAvailability()
           
 int getAvailability(int pieceNumber)
           
 long getAvailWentBadTime()
           
 int getAverageCompletionInThousandNotation()
          Get the average completion percentage of connected peers.
 float getAvgAvail()
           
 int getBytesQueuedForUpload()
           
 long getBytesUnavailable()
           
 int getConnectTimeout(int ct_def)
           
 PEPeerControl getControl()
           
 Object getData(String key)
          To retreive arbitrary objects against this object.
 DiskManager getDiskManager()
           
 String getDisplayName()
           
 LimitedRateGroup getDownloadLimitedRateGroup()
          Get the limited rate group used for download limiting.
 int getDownloadRateLimitBytesPerSecond()
           
 String getElapsedTime()
           
 long getETA(boolean smoothed)
          Returns the ETA time in seconds.
 int getExtendedMessagingMode()
           
 byte[] getHash()
           
 long getHiddenBytes()
           
 int getHiddenPiece()
           
 long getLastRemoteConnectionTime()
           
 int[] getMaxConnections()
           
 int getMaxNewConnectionsAllowed(String network)
          returns the allowed connections for the given network -1 -> unlimited
 int[] getMaxSeedConnections()
           
 float getMinAvailability()
           
 float getMinAvailability(int file_index)
           
 String getName()
           
 int getNbActivePieces()
           
 int getNbPeers()
           
 int getNbPeersSnubbed()
           
 int getNbPeersStalledPendingLoad()
           
 int getNbPeersUnchoked()
           
 int getNbPeersWithUploadBlocked()
           
 int getNbPeersWithUploadQueued()
           
 int getNbRemoteTCPConnections()
           
 int getNbRemoteUDPConnections()
           
 int getNbRemoteUTPConnections()
           
 int getNbSeeds()
           
 int getPartitionID()
           
 byte[] getPeerId()
           
 PeerIdentityDataID getPeerIdentityDataID()
           
 List<PEPeer> getPeers()
           
 List<PEPeer> getPeers(String address)
           
 int getPendingPeerCount()
           
 PeerDescriptor[] getPendingPeers()
           
 PeerDescriptor[] getPendingPeers(String address)
           
 PEPiece getPiece(int pieceNumber)
           
 int getPieceLength(int pieceNumber)
           
 PiecePicker getPiecePicker()
           
 PEPiece[] getPieces()
          Often better to use getPiece(pieceNumber)
 boolean getPreferUDP()
           
 Object[] getQueryableInterfaces()
          Query this class for a reference to another class that it may hold
 String getRelationText()
          A short description of what your class holds that can be printed by the logger
 long getRemaining()
           
 int getSchedulePriority()
           
 byte[][] getSecrets(int crypto_level)
           
 PEPeerManagerStats getStats()
           
 long getTimeStarted(boolean mono)
           
 long getTimeStartedSeeding(boolean mono)
           
protected  byte[] getTorrentHash()
           
 int getTorrentInfoDictSize()
           
 TrackerPeerSource getTrackerPeerSource()
           
 PEPeerTransport getTransportFromAddress(String peer)
          Locate an existing transport via [IP] Address.
 PEPeerTransport getTransportFromIdentity(byte[] peer_id)
          Locate an existing transport via peer id byte identity.
 LimitedRateGroup getUploadLimitedRateGroup()
          Get the limited rate group used for upload limiting.
 int getUploadPriority()
           
 int getUploadRateLimitBytesPerSecond()
           
 boolean hasDownloadablePiece()
           
 boolean hasPotentialConnections()
           
 void havePiece(int pieceNumber, int pieceLength, PEPeer pcOrigin)
           
 void incNbPeersSnubbed()
           
 void IPBanned(BannedIp ip)
           
 void IPBlockedListChanged(IpFilter filter)
           
 void IPFilterEnabledChanged(boolean is_enabled)
           
 boolean isDestroyed()
           
 boolean isFastExtensionPermitted(PEPeerTransport originator)
           
 boolean isInEndGameMode()
          Are we in end-game mode?
 boolean isMetadataDownload()
           
 boolean isNetworkEnabled(String net)
           
 boolean isPeerExchangeEnabled()
           
 boolean isPeerSourceEnabled(String peer_source)
           
 boolean isPrivateTorrent()
           
 boolean isRTA()
           
 boolean isSeeding()
           
 boolean isSuperSeedMode()
           
 boolean isWritten(int piece_number, int offset)
           
 boolean needsMD5CheckOnCompletion(int pieceNumber)
           
 void peerAdded(PEPeer pc)
           
 void peerConnectionClosed(PEPeerTransport peer, boolean connect_failed, boolean network_failed)
          Notify the manager that the given peer connection has been closed.
 void peerDiscovered(PEPeerTransport finder, PeerItem pi)
           
 void peerDiscovered(String peer_source, String ip_address, int tcp_port, int udp_port, boolean use_crypto)
           
 void peerRemoved(PEPeer pc)
           
 void peerVerifiedAsSelf(PEPeerTransport self)
          Notify that the given peer connection represents our own client.
 void processTrackerResponse(TRTrackerAnnouncerResponse response)
           
 void protocolBytesReceived(PEPeer peer, int length)
          Protocol bytes received.
 void protocolBytesSent(PEPeer peer, int length)
          Protocol bytes sent.
 void removeListener(PEPeerManagerListener l)
           
 void removePeer(PEPeer _transport)
           
 void removePeer(PEPeer _transport, String reason)
           
 void removePiece(PEPiece pePiece, int pieceNumber)
          Sends messages to listeners that the piece is no longer active.
 void removeRateLimiter(LimitedRateGroup group, boolean upload)
           
 void reportBadFastExtensionUse(PEPeerTransport originator)
           
 void requestCanceled(DiskManagerReadRequest request)
          The way to unmark a request as being downloaded, or also called by Peer connections objects when connection is closed or choked
 boolean requestExists(String peer_ip, int piece_number, int offset, int length)
           
 void schedule()
           
 boolean seedPieceRecheck()
           
 void setData(String key, Object value)
          To store arbitrary objects against a control.
 void setNbPeersSnubbed(int n)
           
 void setPreferUDP(boolean prefer)
           
 void setStatsReceiver(PEPeerManager.StatsReceiver receiver)
           
 void setSuperSeedMode(boolean _superSeedMode)
           
 void setTorrentInfoDictSize(int size)
           
 void start()
           
 void statsReply(PEPeerTransport originator, Map reply)
           
 void statsRequest(PEPeerTransport originator, Map request)
           
 void stopAll()
           
 void updateSuperSeedPiece(PEPeer peer, int pieceNumber)
           
 boolean validateHintRequest(PEPeerTransport originator, int pieceNumber, int offset, int length)
           
 boolean validatePieceReply(PEPeerTransport originator, int pieceNumber, int offset, DirectByteBuffer data)
           
 boolean validateReadRequest(PEPeerTransport originator, int pieceNumber, int offset, int length)
           
 void writeBlock(int pieceNumber, int offset, DirectByteBuffer data, Object sender, boolean cancel)
          This method will queue up a dism manager write request for the block if the block is not already written.
 void writeCompleted(DiskManagerWriteRequest request)
          DiskManagerWriteRequestListener message
 void writeFailed(DiskManagerWriteRequest request, Throwable cause)
           
 
Methods inherited from class org.gudy.azureus2.core3.logging.LogRelation
propogatedRelationText, queryForClass, queryForClass
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

adapter

protected final PEPeerManagerAdapter adapter
Constructor Detail

PEPeerControlImpl

public PEPeerControlImpl(byte[] _peer_id,
                         PEPeerManagerAdapter _adapter,
                         DiskManager _diskManager,
                         int _partition_id)
Method Detail

start

public void start()
Specified by:
start in interface PEPeerManager

stopAll

public void stopAll()
Specified by:
stopAll in interface PEPeerManager

getPartitionID

public int getPartitionID()
Specified by:
getPartitionID in interface PEPeerManager

isDestroyed

public boolean isDestroyed()
Specified by:
isDestroyed in interface PEPeerManager

getDiskManager

public DiskManager getDiskManager()
Specified by:
getDiskManager in interface PEPeerManager

getPiecePicker

public PiecePicker getPiecePicker()
Specified by:
getPiecePicker in interface PEPeerManager

getAdapter

public PEPeerManagerAdapter getAdapter()
Specified by:
getAdapter in interface PEPeerManager

getDisplayName

public String getDisplayName()
Specified by:
getDisplayName in interface PeerNATInitiator
Specified by:
getDisplayName in interface PEPeerManager

getName

public String getName()
Specified by:
getName in interface PeerControlInstance

schedule

public void schedule()
Specified by:
schedule in interface PeerControlInstance

processTrackerResponse

public void processTrackerResponse(TRTrackerAnnouncerResponse response)
Specified by:
processTrackerResponse in interface PEPeerManager

getPeers

public List<PEPeer> getPeers()
Specified by:
getPeers in interface PEPeerManager

getPeers

public List<PEPeer> getPeers(String address)
Specified by:
getPeers in interface PEPeerManager

getPendingPeerCount

public int getPendingPeerCount()
Specified by:
getPendingPeerCount in interface PEPeerManager

getPendingPeers

public PeerDescriptor[] getPendingPeers()
Specified by:
getPendingPeers in interface PEPeerManager

getPendingPeers

public PeerDescriptor[] getPendingPeers(String address)
Specified by:
getPendingPeers in interface PEPeerManager

addPeer

public void addPeer(PEPeer _transport)
Specified by:
addPeer in interface PEPeerManager

getTorrentHash

protected byte[] getTorrentHash()

removePeer

public void removePeer(PEPeer _transport)
Specified by:
removePeer in interface PEPeerManager

removePeer

public void removePeer(PEPeer _transport,
                       String reason)
Specified by:
removePeer in interface PEPeerManager

addPeer

public void addPeer(String ip_address,
                    int tcp_port,
                    int udp_port,
                    boolean use_crypto,
                    Map user_data)
Description copied from interface: PEPeerManager
Add a new peer, using the default internal PEPeer implementation (like for peers given in announce reply), using the given address and port.

Specified by:
addPeer in interface PEPeerManager
Parameters:
ip_address - of peer to inject
tcp_port - of peer to inject
udp_port - of peer to inject (0 if unknown)
use_crypto - use encrypted transport

peerDiscovered

public void peerDiscovered(String peer_source,
                           String ip_address,
                           int tcp_port,
                           int udp_port,
                           boolean use_crypto)
Specified by:
peerDiscovered in interface PEPeerManager

badPieceReported

public void badPieceReported(PEPeerTransport originator,
                             int piece_number)
Specified by:
badPieceReported in interface PEPeerControl

isFastExtensionPermitted

public boolean isFastExtensionPermitted(PEPeerTransport originator)
Specified by:
isFastExtensionPermitted in interface PEPeerControl

reportBadFastExtensionUse

public void reportBadFastExtensionUse(PEPeerTransport originator)
Specified by:
reportBadFastExtensionUse in interface PEPeerControl

setStatsReceiver

public void setStatsReceiver(PEPeerManager.StatsReceiver receiver)
Specified by:
setStatsReceiver in interface PEPeerManager

statsRequest

public void statsRequest(PEPeerTransport originator,
                         Map request)
Specified by:
statsRequest in interface PEPeerControl

statsReply

public void statsReply(PEPeerTransport originator,
                       Map reply)
Specified by:
statsReply in interface PEPeerControl

checkCompletionState

protected void checkCompletionState()

hasDownloadablePiece

public boolean hasDownloadablePiece()
Specified by:
hasDownloadablePiece in interface PEPeerManager

getBytesQueuedForUpload

public int getBytesQueuedForUpload()
Specified by:
getBytesQueuedForUpload in interface PEPeerManager

getNbPeersWithUploadQueued

public int getNbPeersWithUploadQueued()
Specified by:
getNbPeersWithUploadQueued in interface PEPeerManager

getNbPeersWithUploadBlocked

public int getNbPeersWithUploadBlocked()
Specified by:
getNbPeersWithUploadBlocked in interface PEPeerManager

getNbPeersUnchoked

public int getNbPeersUnchoked()
Specified by:
getNbPeersUnchoked in interface PEPeerManager

getAvailability

public int[] getAvailability()
Specified by:
getAvailability in interface PEPeerManager

getMinAvailability

public float getMinAvailability()
Specified by:
getMinAvailability in interface PEPeerManager

getMinAvailability

public float getMinAvailability(int file_index)
Specified by:
getMinAvailability in interface PEPeerManager

getBytesUnavailable

public long getBytesUnavailable()
Specified by:
getBytesUnavailable in interface PEPeerManager

getAvgAvail

public float getAvgAvail()
Specified by:
getAvgAvail in interface PEPeerManager

getAvailWentBadTime

public long getAvailWentBadTime()
Specified by:
getAvailWentBadTime in interface PEPeerManager

addPeerTransport

public void addPeerTransport(PEPeerTransport transport)
Specified by:
addPeerTransport in interface PEPeerControl

requestCanceled

public void requestCanceled(DiskManagerReadRequest request)
The way to unmark a request as being downloaded, or also called by Peer connections objects when connection is closed or choked

Specified by:
requestCanceled in interface PEPeerManager
Parameters:
request - a DiskManagerReadRequest holding details of what was canceled

getControl

public PEPeerControl getControl()

getSecrets

public byte[][] getSecrets(int crypto_level)
Specified by:
getSecrets in interface PEPeerControl

getHash

public byte[] getHash()
Specified by:
getHash in interface PEPeerManager

getPeerIdentityDataID

public PeerIdentityDataID getPeerIdentityDataID()
Specified by:
getPeerIdentityDataID in interface PEPeerManager

getPeerId

public byte[] getPeerId()
Specified by:
getPeerId in interface PEPeerManager

getRemaining

public long getRemaining()
Specified by:
getRemaining in interface PEPeerManager

discarded

public void discarded(PEPeer peer,
                      int length)
Specified by:
discarded in interface PEPeerManager

dataBytesReceived

public void dataBytesReceived(PEPeer peer,
                              int length)
Description copied from interface: PEPeerManager
Data bytes received.

Specified by:
dataBytesReceived in interface PEPeerManager

protocolBytesReceived

public void protocolBytesReceived(PEPeer peer,
                                  int length)
Description copied from interface: PEPeerManager
Protocol bytes received.

Specified by:
protocolBytesReceived in interface PEPeerManager

dataBytesSent

public void dataBytesSent(PEPeer peer,
                          int length)
Description copied from interface: PEPeerManager
Data bytes sent.

Specified by:
dataBytesSent in interface PEPeerManager

protocolBytesSent

public void protocolBytesSent(PEPeer peer,
                              int length)
Description copied from interface: PEPeerManager
Protocol bytes sent.

Specified by:
protocolBytesSent in interface PEPeerManager

writeCompleted

public void writeCompleted(DiskManagerWriteRequest request)
DiskManagerWriteRequestListener message

Specified by:
writeCompleted in interface DiskManagerWriteRequestListener
See Also:
DiskManagerWriteRequestListener

writeFailed

public void writeFailed(DiskManagerWriteRequest request,
                        Throwable cause)
Specified by:
writeFailed in interface DiskManagerWriteRequestListener

writeBlock

public void writeBlock(int pieceNumber,
                       int offset,
                       DirectByteBuffer data,
                       Object sender,
                       boolean cancel)
This method will queue up a dism manager write request for the block if the block is not already written. It will send out cancels for the block to all peer either if in end-game mode, or per cancel param

Specified by:
writeBlock in interface PEPeerManager
Parameters:
pieceNumber - to potentialy write to
offset - within piece to queue write for
data - to be writen
sender - peer that sent this data
cancel - if cancels definatly need to be sent to all peers for this request

isWritten

public boolean isWritten(int piece_number,
                         int offset)
Specified by:
isWritten in interface PEPeerManager

validateReadRequest

public boolean validateReadRequest(PEPeerTransport originator,
                                   int pieceNumber,
                                   int offset,
                                   int length)
Specified by:
validateReadRequest in interface PEPeerControl

validateHintRequest

public boolean validateHintRequest(PEPeerTransport originator,
                                   int pieceNumber,
                                   int offset,
                                   int length)
Specified by:
validateHintRequest in interface PEPeerControl

validatePieceReply

public boolean validatePieceReply(PEPeerTransport originator,
                                  int pieceNumber,
                                  int offset,
                                  DirectByteBuffer data)
Specified by:
validatePieceReply in interface PEPeerManager

getAvailability

public int getAvailability(int pieceNumber)
Specified by:
getAvailability in interface PEPeerManager

havePiece

public void havePiece(int pieceNumber,
                      int pieceLength,
                      PEPeer pcOrigin)
Specified by:
havePiece in interface PEPeerControl

getPieceLength

public int getPieceLength(int pieceNumber)
Specified by:
getPieceLength in interface PEPeerManager

getNbPeers

public int getNbPeers()
Specified by:
getNbPeers in interface PEPeerManager

getNbSeeds

public int getNbSeeds()
Specified by:
getNbSeeds in interface PEPeerManager

getNbRemoteTCPConnections

public int getNbRemoteTCPConnections()
Specified by:
getNbRemoteTCPConnections in interface PEPeerManager

getNbRemoteUDPConnections

public int getNbRemoteUDPConnections()
Specified by:
getNbRemoteUDPConnections in interface PEPeerManager

getNbRemoteUTPConnections

public int getNbRemoteUTPConnections()
Specified by:
getNbRemoteUTPConnections in interface PEPeerManager

getLastRemoteConnectionTime

public long getLastRemoteConnectionTime()
Specified by:
getLastRemoteConnectionTime in interface PEPeerManager

getStats

public PEPeerManagerStats getStats()
Specified by:
getStats in interface PEPeerManager

getNbPeersStalledPendingLoad

public int getNbPeersStalledPendingLoad()
Specified by:
getNbPeersStalledPendingLoad in interface PEPeerControl

getETA

public long getETA(boolean smoothed)
Returns the ETA time in seconds. 0 = download is complete. < 0 = download is complete and it took -xxx time to complete. Constants.CRAPPY_INFINITE_AS_LONG = incomplete and 0 average speed

Specified by:
getETA in interface PEPeerManager

isRTA

public boolean isRTA()
Specified by:
isRTA in interface PEPeerControl

addRateLimiter

public void addRateLimiter(LimitedRateGroup group,
                           boolean upload)
Specified by:
addRateLimiter in interface PEPeerManager

removeRateLimiter

public void removeRateLimiter(LimitedRateGroup group,
                              boolean upload)
Specified by:
removeRateLimiter in interface PEPeerManager

getUploadRateLimitBytesPerSecond

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

getDownloadRateLimitBytesPerSecond

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

peerConnectionClosed

public void peerConnectionClosed(PEPeerTransport peer,
                                 boolean connect_failed,
                                 boolean network_failed)
Description copied from interface: PEPeerManager
Notify the manager that the given peer connection has been closed.

Specified by:
peerConnectionClosed in interface PEPeerManager
Parameters:
peer - closed

peerAdded

public void peerAdded(PEPeer pc)
Specified by:
peerAdded in interface PEPeerManager

peerRemoved

public void peerRemoved(PEPeer pc)
Specified by:
peerRemoved in interface PEPeerManager

addPiece

public void addPiece(PEPiece piece,
                     int pieceNumber,
                     PEPeer for_peer)
Don't pass a null to this method. All activations of pieces must go through here.

Specified by:
addPiece in interface PEPeerManager
Parameters:
piece - PEPiece invoked; notifications of it's invocation need to be done
pieceNumber - of the PEPiece

addPiece

protected void addPiece(PEPiece piece,
                        int pieceNumber,
                        boolean force_add,
                        PEPeer for_peer)

removePiece

public void removePiece(PEPiece pePiece,
                        int pieceNumber)
Sends messages to listeners that the piece is no longer active. All closing out (deactivation) of pieces must go through here. The piece will be null upon return.

Parameters:
pePiece - PEPiece to remove
pieceNumber - int

getNbActivePieces

public int getNbActivePieces()
Specified by:
getNbActivePieces in interface PEPeerControl

getElapsedTime

public String getElapsedTime()
Specified by:
getElapsedTime in interface PEPeerManager

getTimeStarted

public long getTimeStarted(boolean mono)
Specified by:
getTimeStarted in interface PEPeerManager

getTimeStartedSeeding

public long getTimeStartedSeeding(boolean mono)
Specified by:
getTimeStartedSeeding in interface PEPeerManager

checkCompleted

public void checkCompleted(DiskManagerCheckRequest request,
                           boolean passed)
Specified by:
checkCompleted in interface DiskManagerCheckRequestListener

checkCancelled

public void checkCancelled(DiskManagerCheckRequest request)
Specified by:
checkCancelled in interface DiskManagerCheckRequestListener

checkFailed

public void checkFailed(DiskManagerCheckRequest request,
                        Throwable cause)
Specified by:
checkFailed in interface DiskManagerCheckRequestListener

needsMD5CheckOnCompletion

public boolean needsMD5CheckOnCompletion(int pieceNumber)
Specified by:
needsMD5CheckOnCompletion in interface PEPeerManager

getPieces

public PEPiece[] getPieces()
Description copied from interface: PEPeerManager
Often better to use getPiece(pieceNumber)

Specified by:
getPieces in interface PEPeerManager

getPiece

public PEPiece getPiece(int pieceNumber)
Specified by:
getPiece in interface PEPeerManager
Returns:
PEPiece or null if piece not currently active

createPeerStats

public PEPeerStats createPeerStats(PEPeer owner)
Specified by:
createPeerStats in interface PEPeerManager

createDiskManagerRequest

public DiskManagerReadRequest createDiskManagerRequest(int pieceNumber,
                                                       int offset,
                                                       int length)
Specified by:
createDiskManagerRequest in interface PEPeerManager

requestExists

public boolean requestExists(String peer_ip,
                             int piece_number,
                             int offset,
                             int length)
Specified by:
requestExists in interface PEPeerManager

seedPieceRecheck

public boolean seedPieceRecheck()
Specified by:
seedPieceRecheck in interface PEPeerManager

addListener

public void addListener(PEPeerManagerListener l)
Specified by:
addListener in interface PEPeerManager

removeListener

public void removeListener(PEPeerManagerListener l)
Specified by:
removeListener in interface PEPeerManager

isSeeding

public boolean isSeeding()
Specified by:
isSeeding in interface PEPeerManager

isMetadataDownload

public boolean isMetadataDownload()
Specified by:
isMetadataDownload in interface PEPeerManager

getTorrentInfoDictSize

public int getTorrentInfoDictSize()
Specified by:
getTorrentInfoDictSize in interface PEPeerManager

setTorrentInfoDictSize

public void setTorrentInfoDictSize(int size)
Specified by:
setTorrentInfoDictSize in interface PEPeerManager

isInEndGameMode

public boolean isInEndGameMode()
Description copied from interface: PEPeerManager
Are we in end-game mode?

Specified by:
isInEndGameMode in interface PEPeerManager
Returns:
true if in end game mode, false if not

isSuperSeedMode

public boolean isSuperSeedMode()
Specified by:
isSuperSeedMode in interface PEPeerManager

canToggleSuperSeedMode

public boolean canToggleSuperSeedMode()
Specified by:
canToggleSuperSeedMode in interface PEPeerManager

setSuperSeedMode

public void setSuperSeedMode(boolean _superSeedMode)
Specified by:
setSuperSeedMode in interface PEPeerManager

updateSuperSeedPiece

public void updateSuperSeedPiece(PEPeer peer,
                                 int pieceNumber)
Specified by:
updateSuperSeedPiece in interface PEPeerControl

isPrivateTorrent

public boolean isPrivateTorrent()
Specified by:
isPrivateTorrent in interface PEPeerControl

getExtendedMessagingMode

public int getExtendedMessagingMode()
Specified by:
getExtendedMessagingMode in interface PEPeerControl

isPeerExchangeEnabled

public boolean isPeerExchangeEnabled()
Specified by:
isPeerExchangeEnabled in interface PEPeerControl

getUploadLimitedRateGroup

public LimitedRateGroup getUploadLimitedRateGroup()
Description copied from interface: PEPeerManager
Get the limited rate group used for upload limiting.

Specified by:
getUploadLimitedRateGroup in interface PEPeerManager
Returns:
upload limit group

getDownloadLimitedRateGroup

public LimitedRateGroup getDownloadLimitedRateGroup()
Description copied from interface: PEPeerManager
Get the limited rate group used for download limiting.

Specified by:
getDownloadLimitedRateGroup in interface PEPeerManager
Returns:
download limit group

getData

public Object getData(String key)
To retreive arbitrary objects against this object.

Specified by:
getData in interface PEPeerManager

setData

public void setData(String key,
                    Object value)
To store arbitrary objects against a control.

Specified by:
setData in interface PEPeerManager

getConnectTimeout

public int getConnectTimeout(int ct_def)
Specified by:
getConnectTimeout in interface PEPeerControl

doOptimisticDisconnect

public boolean doOptimisticDisconnect(boolean pending_lan_local_peer,
                                      boolean force,
                                      String network)
Specified by:
doOptimisticDisconnect in interface PEPeerControl

createPeerExchangeConnection

public PeerExchangerItem createPeerExchangeConnection(PEPeerTransport base_peer)
Description copied from interface: PEPeerManager
Register a peer connection for peer exchange handling. NOTE: Creation could fail if the peer is not eligible for peer exchange (like if it's remote port is unknown).

Specified by:
createPeerExchangeConnection in interface PEPeerManager
Parameters:
base_peer - exchaning with
Returns:
peer database connection item, or null if creation failed

peerVerifiedAsSelf

public void peerVerifiedAsSelf(PEPeerTransport self)
Description copied from interface: PEPeerManager
Notify that the given peer connection represents our own client.

Specified by:
peerVerifiedAsSelf in interface PEPeerManager
Parameters:
self - peer

IPFilterEnabledChanged

public void IPFilterEnabledChanged(boolean is_enabled)
Specified by:
IPFilterEnabledChanged in interface IPFilterListener

canIPBeBanned

public boolean canIPBeBanned(String ip)
Specified by:
canIPBeBanned in interface IPFilterListener

canIPBeBlocked

public boolean canIPBeBlocked(String ip,
                              byte[] torrent_hash)
Specified by:
canIPBeBlocked in interface IPFilterListener

IPBlockedListChanged

public void IPBlockedListChanged(IpFilter filter)
Specified by:
IPBlockedListChanged in interface IPFilterListener

IPBanned

public void IPBanned(BannedIp ip)
Specified by:
IPBanned in interface IPFilterListener

getHiddenBytes

public long getHiddenBytes()
Specified by:
getHiddenBytes in interface PEPeerManager

getHiddenPiece

public int getHiddenPiece()
Specified by:
getHiddenPiece in interface PEPeerControl

getUploadPriority

public int getUploadPriority()
Specified by:
getUploadPriority in interface PEPeerControl

getAverageCompletionInThousandNotation

public int getAverageCompletionInThousandNotation()
Description copied from interface: PEPeerManager
Get the average completion percentage of connected peers.

Specified by:
getAverageCompletionInThousandNotation in interface PEPeerManager
Returns:
average percent complete in thousand notation

getMaxConnections

public int[] getMaxConnections()
Specified by:
getMaxConnections in interface PEPeerControl

getMaxSeedConnections

public int[] getMaxSeedConnections()

getMaxNewConnectionsAllowed

public int getMaxNewConnectionsAllowed(String network)
returns the allowed connections for the given network -1 -> unlimited

Specified by:
getMaxNewConnectionsAllowed in interface PEPeerManager

getSchedulePriority

public int getSchedulePriority()
Specified by:
getSchedulePriority in interface PeerControlInstance

hasPotentialConnections

public boolean hasPotentialConnections()
Specified by:
hasPotentialConnections in interface PEPeerManager

getRelationText

public String getRelationText()
Description copied from class: LogRelation
A short description of what your class holds that can be printed by the logger

Overrides:
getRelationText in class LogRelation
Returns:

getQueryableInterfaces

public Object[] getQueryableInterfaces()
Description copied from class: LogRelation
Query this class for a reference to another class that it may hold

Overrides:
getQueryableInterfaces in class LogRelation
Returns:
If found, the class desired. Otherwise, null.

getTransportFromIdentity

public PEPeerTransport getTransportFromIdentity(byte[] peer_id)
Description copied from interface: PEPeerManager
Locate an existing transport via peer id byte identity.

Specified by:
getTransportFromIdentity in interface PEPeerManager
Parameters:
peer_id - to look for
Returns:
transport with matching identity, or null if no match is found

getTransportFromAddress

public PEPeerTransport getTransportFromAddress(String peer)
Description copied from interface: PEPeerManager
Locate an existing transport via [IP] Address.

Specified by:
getTransportFromAddress in interface PEPeerManager
Parameters:
peer - String to look for
Returns:
PEPeerTransport with matching address String, or null if no match is found

incNbPeersSnubbed

public void incNbPeersSnubbed()
Specified by:
incNbPeersSnubbed in interface PEPeerControl

decNbPeersSnubbed

public void decNbPeersSnubbed()
Specified by:
decNbPeersSnubbed in interface PEPeerControl

setNbPeersSnubbed

public void setNbPeersSnubbed(int n)
Specified by:
setNbPeersSnubbed in interface PEPeerControl

getNbPeersSnubbed

public int getNbPeersSnubbed()
Specified by:
getNbPeersSnubbed in interface PEPeerControl

getPreferUDP

public boolean getPreferUDP()
Specified by:
getPreferUDP in interface PEPeerManager

setPreferUDP

public void setPreferUDP(boolean prefer)
Specified by:
setPreferUDP in interface PEPeerManager

isPeerSourceEnabled

public boolean isPeerSourceEnabled(String peer_source)
Specified by:
isPeerSourceEnabled in interface PEPeerManager

isNetworkEnabled

public boolean isNetworkEnabled(String net)
Specified by:
isNetworkEnabled in interface PEPeerManager

peerDiscovered

public void peerDiscovered(PEPeerTransport finder,
                           PeerItem pi)
Specified by:
peerDiscovered in interface PEPeerControl

getTrackerPeerSource

public TrackerPeerSource getTrackerPeerSource()
Specified by:
getTrackerPeerSource in interface PEPeerManager

generateEvidence

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