Class PEPeerControlImpl
- java.lang.Object
-
- com.biglybt.core.logging.LogRelation
-
- com.biglybt.core.peer.impl.control.PEPeerControlImpl
-
- All Implemented Interfaces:
DiskManagerCheckRequestListener
,DiskManagerWriteRequestListener
,IPFilterListener
,PEPeerControl
,PEPeerManager
,PeerControlInstance
,PeerNATInitiator
public class PEPeerControlImpl extends LogRelation implements PEPeerControl, DiskManagerWriteRequestListener, PeerControlInstance, PeerNATInitiator, DiskManagerCheckRequestListener, IPFilterListener
manages all peer transports for a torrent
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
PEPeerControlImpl.MyPeer
private class
PEPeerControlImpl.MyPeerStats
-
Nested classes/interfaces inherited from interface com.biglybt.core.disk.DiskManagerCheckRequestListener
DiskManagerCheckRequestListener.HashListener
-
Nested classes/interfaces inherited from interface com.biglybt.core.peer.PEPeerManager
PEPeerManager.StatsReceiver
-
-
Field Summary
-
Fields inherited from interface com.biglybt.core.peer.impl.PEPeerControl
SNUB_MILLIS
-
-
Constructor Summary
Constructors Constructor Description PEPeerControlImpl(byte[] _peer_id, PEPeerManagerAdapter _adapter, DiskManager _diskManager, int _partition_id)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addExtendedPeersFromTracker(java.util.Map extensions)
private void
addFastUnchokes(java.util.ArrayList peers_to_unchoke)
void
addListener(PEPeerManagerListener l)
void
addPeer(PEPeer _transport)
void
addPeer(java.lang.String ip_address, int tcp_port, int udp_port, boolean use_crypto, java.util.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.private void
addPeersFromTracker(TRTrackerAnnouncerResponsePeer[] peers)
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)
private void
addToPeerTransports(PEPeerTransport peer)
private void
analyseTrackerResponse(TRTrackerAnnouncerResponse tracker_response)
A private method that does analysis of the result sent by the tracker.private void
badPeerDetected(java.lang.String ip, int piece_number, java.lang.String reason)
void
badPieceReported(PEPeerTransport originator, int piece_number)
boolean
canIPBeBanned(java.lang.String ip)
boolean
canIPBeBlocked(java.lang.String ip, byte[] torrent_hash)
boolean
canToggleSuperSeedMode()
private void
check99PercentBug()
private void
checkAutoSequentialFiles(DiskManagerFileInfo done_file)
private void
checkBadPieces()
void
checkCancelled(DiskManagerCheckRequest request)
void
checkCompleted(DiskManagerCheckRequest request, boolean passed)
private void
checkCompletedPieces()
A private method that checks if PEPieces being downloaded are finished If all blocks from a PEPiece are written to disk, this method will queue the piece for hash check.protected void
checkCompletionState()
private boolean
checkEmptyPiece(int pieceNumber)
Checks given piece to see if it's active but empty, and if so deactivates it.void
checkFailed(DiskManagerCheckRequest request, java.lang.Throwable cause)
private void
checkFinished(boolean start_of_day)
This method checks if the downloading process is finished.private void
checkForBannedConnections()
private void
checkInterested()
private void
checkRequests()
This method will locate expired requests on peers, will cancel them, and mark the peer as snubbed if we haven't received usefull data from them within the last 60 secondsprivate void
checkRescan()
private void
checkSeeds()
void
checkSnubbing(PEPeerTransport peer)
private void
checkSpeedAndReserved()
Check if a piece's Speed is too fast for it to be getting new data and if a reserved pieced failed to get data within 120 secondsprivate void
closeAndRemoveAllPeers(java.lang.String reason, boolean reconnect)
private void
closeAndRemovePeer(PEPeerTransport peer, java.lang.String reason, boolean log_if_not_found)
private byte[]
computeMd5Hash(DirectByteBuffer buffer)
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)
private void
doConnectionChecks()
boolean
doOptimisticDisconnect(boolean pending_lan_local_peer, boolean force, java.lang.String network)
private void
doUDPConnectionChecks(int number)
private void
doUnchokes()
Do all peer choke/unchoke processing.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()
java.lang.String
getConnectHealth(boolean verbose)
int
getConnectTimeout(int ct_def)
PEPeerControl
getControl()
java.lang.Object
getData(java.lang.String key)
To retreive arbitrary objects against this object.DiskManager
getDiskManager()
java.lang.String
getDisplayName()
LimitedRateGroup
getDownloadLimitedRateGroup()
Get the limited rate group used for download limiting.int
getDownloadRateLimitBytesPerSecond()
int
getEffectiveUploadRateLimitBytesPerSecond()
java.lang.String
getElapsedTime()
long
getETA(boolean smoothed)
Returns the ETA time in seconds.int
getExtendedMessagingMode()
byte[]
getHash()
PEPeerControlHashHandler
getHashHandler()
long
getHiddenBytes()
int
getHiddenPiece()
long
getLastRemoteConnectionTime()
int
getMaxCompletionInThousandNotation(boolean never_include_seeds)
Max completion of connected peers (doesn't factor in our completion)int[]
getMaxConnections()
private int
getMaxConnections(java.lang.String net)
private int[]
getMaxNewConnectionsAllowed()
returns number of whatever peers to connect and then extra ones that must be non-pub if availableint
getMaxNewConnectionsAllowed(java.lang.String network)
returns the allowed connections for the given network -1 -> unlimitedint[]
getMaxSeedConnections()
private int
getMaxSeedConnections(java.lang.String net)
float
getMinAvailability()
float
getMinAvailability(int file_index)
PEPeer
getMyPeer()
java.lang.String
getName()
int
getNbActivePieces()
int
getNbPeers()
int
getNbPeersSnubbed()
int
getNbPeersStalledPendingLoad()
int
getNbPeersUnchoked()
int
getNbPeersUnchoking()
int
getNbPeersWithUploadBlocked()
int
getNbPeersWithUploadQueued()
int
getNbPieces()
int
getNbRemoteTCPConnections()
int
getNbRemoteUDPConnections()
int
getNbRemoteUTPConnections()
int
getNbSeeds()
int
getPartitionID()
int[]
getPeerCount()
byte[]
getPeerId()
PeerIdentityDataID
getPeerIdentityDataID()
java.util.List<PEPeer>
getPeers()
java.util.List<PEPeer>
getPeers(java.lang.String address)
int
getPendingPeerCount()
PeerDescriptor[]
getPendingPeers()
PeerDescriptor[]
getPendingPeers(java.lang.String address)
PEPiece
getPiece(int pieceNumber)
int[]
getPieceCount()
int
getPieceLength(int pieceNumber)
PiecePicker
getPiecePicker()
PEPiece[]
getPieces()
Often better to use getPiece(pieceNumber)boolean
getPreferUDP()
java.lang.Object[]
getQueryableInterfaces()
Query this class for a reference to another class that it may holdjava.lang.String
getRelationText()
A short description of what your class holds that can be printed by the loggerlong
getRemaining()
int
getSchedulePriority()
byte[][]
getSecrets(int crypto_level)
PEPeerManagerStats
getStats()
byte[]
getTargetHash()
Get torrent hash including any overridesint
getTCPListeningPortNumber()
long
getTimeStarted(boolean mono)
long
getTimeStartedSeeding(boolean mono)
protected byte[]
getTorrentHash()
int
getTorrentInfoDictSize()
TrackerPeerSource
getTrackerPeerSource()
PEPeerTransport
getTransportFromAddress(java.lang.String peer)
Locate an existing transport via [IP] Address.PEPeerTransport
getTransportFromIdentity(byte[] peer_id)
Locate an existing transport via peer id byte identity.int
getUID()
LimitedRateGroup
getUploadLimitedRateGroup()
Get the limited rate group used for upload limiting.int
getUploadPriority()
int
getUploadRateLimitBytesPerSecond()
boolean
hasDownloadablePiece()
boolean
hashRequest(int piece_number, DiskManagerCheckRequestListener.HashListener listener)
boolean
hasPotentialConnections()
void
havePiece(int pieceNumber, int pieceLength, PEPeer pcOrigin)
void
incNbPeersSnubbed()
void
informFullyConnected(PEPeer peer)
private void
initialiseSuperSeedMode()
void
IPBanned(BannedIp ip)
void
IPBlockedListChanged(IpFilter filter)
void
IPFilterEnabledChanged(boolean is_enabled)
private boolean
isAlreadyConnected(PeerItem peer_id)
boolean
isDestroyed()
boolean
isFastExtensionPermitted(PEPeerTransport originator)
boolean
isInEndGameMode()
Are we in end-game mode?boolean
isMetadataDownload()
boolean
isNetworkEnabled(java.lang.String net)
boolean
isPeerExchangeEnabled()
boolean
isPeerSourceEnabled(java.lang.String peer_source)
boolean
isPrivateTorrent()
boolean
isRTA()
boolean
isSeeding()
boolean
isSuperSeedMode()
boolean
isWritten(int piece_number, int offset)
private java.lang.String
makeNewOutgoingConnection(java.lang.String peer_source, java.lang.String address, int tcp_port, int udp_port, boolean use_tcp, boolean require_crypto, byte crypto_level, java.util.Map user_data)
Request a new outgoing peer connection.private void
MD5CheckPiece(PEPiece piece, boolean correct)
boolean
needsMD5CheckOnCompletion(int pieceNumber)
private void
peerAdded(PEPeerTransport 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(java.lang.String peer_source, java.lang.String ip_address, int tcp_port, int udp_port, boolean use_crypto)
private void
peerRemoved(PEPeerTransport pc)
void
peerVerifiedAsSelf(PEPeerTransport self)
Notify that the given peer connection represents our own client.private void
processPieceCheckResult(DiskManagerCheckRequest request, int outcome)
private void
processPieceChecks()
Private method to process the results given by DiskManager's piece checking thread via asyncPieceChecked(..)void
processTrackerResponse(TRTrackerAnnouncerResponse response)
void
protocolBytesReceived(PEPeer peer, int length)
Protocol bytes received.void
protocolBytesSent(PEPeer peer, int length)
Protocol bytes sent.void
removeAllPeers(java.lang.String reason)
void
removeListener(PEPeerManagerListener l)
void
removePeer(PEPeer _transport)
void
removePeer(PEPeer _transport, java.lang.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 chokedboolean
requestExists(java.lang.String peer_ip, int piece_number, int offset, int length)
void
schedule()
boolean
seedPieceRecheck()
private void
sendHave(int pieceNumber)
void
setData(java.lang.String key, java.lang.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, java.util.Map reply)
void
statsRequest(PEPeerTransport originator, java.util.Map request)
void
stopAll()
private void
updateConnectHealth(PEPeerTransport pc)
private void
updatePeersInSuperSeedMode()
private void
updateStats()
void
updateSuperSeedPiece(PEPeer peer, int pieceNumber)
private void
updateTrackerAnnounceInterval()
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, java.lang.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 messagevoid
writeFailed(DiskManagerWriteRequest request, java.lang.Throwable cause)
-
Methods inherited from class com.biglybt.core.logging.LogRelation
propogatedRelationText, queryForClass
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.biglybt.core.disk.DiskManagerCheckRequestListener
isFailureInteresting
-
Methods inherited from interface com.biglybt.core.ipfilter.IPFilterListener
IPBanListChanged
-
-
-
-
Field Detail
-
LOGID
private static final LogIDs LOGID
-
TEST_PERIODIC_SEEDING_SCAN_FAIL_HANDLING
private static final boolean TEST_PERIODIC_SEEDING_SCAN_FAIL_HANDLING
- See Also:
- Constant Field Values
-
WARNINGS_LIMIT
private static final int WARNINGS_LIMIT
- See Also:
- Constant Field Values
-
CHECK_REASON_DOWNLOADED
private static final int CHECK_REASON_DOWNLOADED
- See Also:
- Constant Field Values
-
CHECK_REASON_COMPLETE
private static final int CHECK_REASON_COMPLETE
- See Also:
- Constant Field Values
-
CHECK_REASON_SCAN
private static final int CHECK_REASON_SCAN
- See Also:
- Constant Field Values
-
CHECK_REASON_SEEDING_CHECK
private static final int CHECK_REASON_SEEDING_CHECK
- See Also:
- Constant Field Values
-
CHECK_REASON_BAD_PIECE_CHECK
private static final int CHECK_REASON_BAD_PIECE_CHECK
- See Also:
- Constant Field Values
-
SEED_CHECK_WAIT_MARKER
private static final int SEED_CHECK_WAIT_MARKER
- See Also:
- Constant Field Values
-
REQ_TIMEOUT_DATA_AGE_SEED_MILLIS
private static final long REQ_TIMEOUT_DATA_AGE_SEED_MILLIS
- See Also:
- Constant Field Values
-
REQ_TIMEOUT_DATA_AGE_LEECH_MILLIS
private static final long REQ_TIMEOUT_DATA_AGE_LEECH_MILLIS
- See Also:
- Constant Field Values
-
REQ_TIMEOUT_OLDEST_REQ_AGE_MILLIS
private static final long REQ_TIMEOUT_OLDEST_REQ_AGE_MILLIS
- See Also:
- Constant Field Values
-
RESERVED_PIECE_TIMEOUT_MILLIS
private static final long RESERVED_PIECE_TIMEOUT_MILLIS
- See Also:
- Constant Field Values
-
CON_HEALTH_DONE_KEY
private static final java.lang.Object CON_HEALTH_DONE_KEY
-
DUP_PEER_CC_KEY
private static final java.lang.Object DUP_PEER_CC_KEY
-
DUP_PEER_AS_KEY
private static final java.lang.Object DUP_PEER_AS_KEY
-
disconnect_seeds_when_seeding
private static boolean disconnect_seeds_when_seeding
-
enable_seeding_piece_rechecks
private static boolean enable_seeding_piece_rechecks
-
stalled_piece_timeout
private static int stalled_piece_timeout
-
fast_unchoke_new_peers
private static boolean fast_unchoke_new_peers
-
ban_peer_discard_ratio
private static float ban_peer_discard_ratio
-
ban_peer_discard_min_kb
private static int ban_peer_discard_min_kb
-
udp_fallback_for_failed_connection
private static boolean udp_fallback_for_failed_connection
-
udp_fallback_for_dropped_connection
private static boolean udp_fallback_for_dropped_connection
-
udp_probe_enabled
private static boolean udp_probe_enabled
-
hide_a_piece
private static boolean hide_a_piece
-
prefer_udp_default
private static boolean prefer_udp_default
-
dual_ipv4_ipv6_connection_action
private static int dual_ipv4_ipv6_connection_action
-
auto_sequential_file_exts
static volatile java.util.Set<java.lang.String> auto_sequential_file_exts
-
network_admin
private static final NetworkAdmin network_admin
-
ip_filter
private static final IpFilter ip_filter
-
UUID_GEN
private static final java.util.concurrent.atomic.AtomicInteger UUID_GEN
-
pm_uuid
private final int pm_uuid
-
is_running
private volatile boolean is_running
-
is_destroyed
private volatile boolean is_destroyed
-
peer_transports_cow
private volatile java.util.ArrayList<PEPeerTransport> peer_transports_cow
-
peer_transports_mon
private final AEMonitor peer_transports_mon
-
adapter
protected final PEPeerManagerAdapter adapter
-
torrent
private final TOTorrent torrent
-
disk_mgr
private final DiskManager disk_mgr
-
dm_pieces
private final DiskManagerPiece[] dm_pieces
-
is_private_torrent
private final boolean is_private_torrent
-
stats_receiver
private PEPeerManager.StatsReceiver stats_receiver
-
piecePicker
private final PiecePicker piecePicker
-
lastNeededUndonePieceChange
private long lastNeededUndonePieceChange
-
seeding_mode
private boolean seeding_mode
literally seeding as in 100% torrent complete
-
restart_initiated
private boolean restart_initiated
-
_nbPieces
private final int _nbPieces
-
pePieces
private final PEPieceImpl[] pePieces
-
nbPiecesActive
private int nbPiecesActive
-
nbBytesRemaining
private long nbBytesRemaining
-
nbPeersSnubbed
private int nbPeersSnubbed
-
_hash
private PeerIdentityDataID _hash
-
_myPeerId
private final byte[] _myPeerId
-
_stats
private PEPeerManagerStatsImpl _stats
-
hash_handler
private final PEPeerControlHashHandler hash_handler
-
stats_tick_count
private int stats_tick_count
-
_seeds
private int _seeds
-
_peers
private int _peers
-
_remotesTCPNoLan
private int _remotesTCPNoLan
-
_remotesUDPNoLan
private int _remotesUDPNoLan
-
_remotesUTPNoLan
private int _remotesUTPNoLan
-
_tcpPendingConnections
private int _tcpPendingConnections
-
_tcpConnectingConnections
private int _tcpConnectingConnections
-
last_remote_time
private long last_remote_time
-
_timeStarted
private long _timeStarted
-
_timeStarted_mono
private long _timeStarted_mono
-
_timeStartedSeeding
private long _timeStartedSeeding
-
_timeStartedSeeding_mono
private long _timeStartedSeeding_mono
-
_timeFinished
private long _timeFinished
-
_averageReceptionSpeed
private Average _averageReceptionSpeed
-
mainloop_loop_count
private long mainloop_loop_count
-
MAINLOOP_ONE_SECOND_INTERVAL
private static final int MAINLOOP_ONE_SECOND_INTERVAL
-
MAINLOOP_FIVE_SECOND_INTERVAL
private static final int MAINLOOP_FIVE_SECOND_INTERVAL
-
MAINLOOP_TEN_SECOND_INTERVAL
private static final int MAINLOOP_TEN_SECOND_INTERVAL
-
MAINLOOP_TWENTY_SECOND_INTERVAL
private static final int MAINLOOP_TWENTY_SECOND_INTERVAL
-
MAINLOOP_THIRTY_SECOND_INTERVAL
private static final int MAINLOOP_THIRTY_SECOND_INTERVAL
-
MAINLOOP_SIXTY_SECOND_INTERVAL
private static final int MAINLOOP_SIXTY_SECOND_INTERVAL
-
MAINLOOP_FIVE_MINUTE_INTERVAL
private static final int MAINLOOP_FIVE_MINUTE_INTERVAL
-
MAINLOOP_TEN_MINUTE_INTERVAL
private static final int MAINLOOP_TEN_MINUTE_INTERVAL
-
peer_manager_listeners_cow
private volatile java.util.ArrayList<PEPeerManagerListener> peer_manager_listeners_cow
-
piece_check_result_list
private final java.util.List<java.lang.Object[]> piece_check_result_list
-
piece_check_result_list_mon
private final AEMonitor piece_check_result_list_mon
-
superSeedMode
private boolean superSeedMode
-
superSeedModeCurrentPiece
private int superSeedModeCurrentPiece
-
superSeedModeNumberOfAnnounces
private int superSeedModeNumberOfAnnounces
-
superSeedPieces
private SuperSeedPiece[] superSeedPieces
-
hidden_piece
private int hidden_piece
-
OB_PS_STATS_HISTORY_SIZE
private static final int OB_PS_STATS_HISTORY_SIZE
- See Also:
- Constant Field Values
-
ob_ps_stats_history
private boolean[][] ob_ps_stats_history
-
ob_ps_stats
private int[] ob_ps_stats
-
ob_ps_stats_pos
private int[] ob_ps_stats_pos
-
this_mon
private final AEMonitor this_mon
-
ip_filter_last_update_time
private long ip_filter_last_update_time
-
user_data
private java.util.Map<java.lang.Object,java.lang.Object> user_data
-
unchoker
private Unchoker unchoker
-
external_rate_limiters_cow
private java.util.List<java.lang.Object[]> external_rate_limiters_cow
-
bytes_queued_for_upload
private int bytes_queued_for_upload
-
connections_with_queued_data
private int connections_with_queued_data
-
connections_with_queued_data_blocked
private int connections_with_queued_data_blocked
-
connections_unchoked
private int connections_unchoked
-
connections_unchoking
private int connections_unchoking
-
outbound_message_count
private int outbound_message_count
-
sweepList
private java.util.List<PEPeerTransport> sweepList
-
nextPEXSweepIndex
private int nextPEXSweepIndex
-
upload_helper
private final UploadHelper upload_helper
-
peer_database
private final PeerDatabase peer_database
-
bad_piece_reported
private int bad_piece_reported
-
next_rescan_piece
private int next_rescan_piece
-
rescan_piece_time
private long rescan_piece_time
-
last_eta
private long last_eta
-
last_eta_smoothed
private long last_eta_smoothed
-
last_eta_calculation
private long last_eta_calculation
-
MAX_UDP_CONNECTIONS
private static final int MAX_UDP_CONNECTIONS
- See Also:
- Constant Field Values
-
PENDING_NAT_TRAVERSAL_MAX
private static final int PENDING_NAT_TRAVERSAL_MAX
- See Also:
- Constant Field Values
-
MAX_UDP_TRAVERSAL_COUNT
private static final int MAX_UDP_TRAVERSAL_COUNT
- See Also:
- Constant Field Values
-
PEER_NAT_TRAVERSE_DONE_KEY
private static final java.lang.String PEER_NAT_TRAVERSE_DONE_KEY
-
pending_nat_traversals
private final java.util.Map<java.lang.String,PEPeerTransport> pending_nat_traversals
-
udp_traversal_count
private int udp_traversal_count
-
UDP_RECONNECT_MAX
private static final int UDP_RECONNECT_MAX
- See Also:
- Constant Field Values
-
udp_reconnects
private final java.util.Map<java.lang.String,PEPeerTransport> udp_reconnects
-
MAX_SEEDING_SEED_DISCONNECT_HISTORY
private static final int MAX_SEEDING_SEED_DISCONNECT_HISTORY
- See Also:
- Constant Field Values
-
SEEDING_SEED_DISCONNECT_TIMEOUT
private static final int SEEDING_SEED_DISCONNECT_TIMEOUT
- See Also:
- Constant Field Values
-
seeding_seed_disconnects
private final java.util.Map<java.lang.String,java.lang.Long> seeding_seed_disconnects
-
UDP_RECONNECT_MIN_MILLIS
private static final int UDP_RECONNECT_MIN_MILLIS
- See Also:
- Constant Field Values
-
last_udp_reconnect
private long last_udp_reconnect
-
prefer_udp
private boolean prefer_udp
-
PREFER_UDP_BLOOM_SIZE
private static final int PREFER_UDP_BLOOM_SIZE
- See Also:
- Constant Field Values
-
prefer_udp_bloom
private volatile BloomFilter prefer_udp_bloom
-
upload_diabled
private volatile boolean upload_diabled
-
download_diabled
private volatile boolean download_diabled
-
upload_limited_rate_group
private final LimitedRateGroup upload_limited_rate_group
-
download_limited_rate_group
private final LimitedRateGroup download_limited_rate_group
-
partition_id
private final int partition_id
-
is_metadata_download
private final boolean is_metadata_download
-
metadata_infodict_size
private int metadata_infodict_size
-
finish_in_progress
private DiskManager.DownloadEndedProgress finish_in_progress
-
last_seed_disconnect_time
private long last_seed_disconnect_time
-
naughty_fast_extension_bloom
private final BloomFilter naughty_fast_extension_bloom
-
asfe_activated
private volatile boolean asfe_activated
-
my_peer
private final PEPeerControlImpl.MyPeer my_peer
-
FE_EVENT_LIMIT
private static final int FE_EVENT_LIMIT
- See Also:
- Constant Field Values
-
optimisticDisconnectCount
private int optimisticDisconnectCount
-
-
Constructor Detail
-
PEPeerControlImpl
public PEPeerControlImpl(byte[] _peer_id, PEPeerManagerAdapter _adapter, DiskManager _diskManager, int _partition_id)
-
-
Method Detail
-
getUID
public int getUID()
- Specified by:
getUID
in interfacePEPeerManager
-
start
public void start()
- Specified by:
start
in interfacePEPeerManager
-
stopAll
public void stopAll()
- Specified by:
stopAll
in interfacePEPeerManager
-
removeAllPeers
public void removeAllPeers(java.lang.String reason)
- Specified by:
removeAllPeers
in interfacePEPeerManager
-
getPartitionID
public int getPartitionID()
- Specified by:
getPartitionID
in interfacePEPeerManager
-
getTCPListeningPortNumber
public int getTCPListeningPortNumber()
- Specified by:
getTCPListeningPortNumber
in interfacePEPeerControl
-
getTargetHash
public byte[] getTargetHash()
Description copied from interface:PEPeerControl
Get torrent hash including any overrides- Specified by:
getTargetHash
in interfacePEPeerControl
- Returns:
-
isDestroyed
public boolean isDestroyed()
- Specified by:
isDestroyed
in interfacePEPeerManager
-
getDiskManager
public DiskManager getDiskManager()
- Specified by:
getDiskManager
in interfacePEPeerManager
-
getPiecePicker
public PiecePicker getPiecePicker()
- Specified by:
getPiecePicker
in interfacePEPeerManager
-
getAdapter
public PEPeerManagerAdapter getAdapter()
- Specified by:
getAdapter
in interfacePEPeerManager
-
getDisplayName
public java.lang.String getDisplayName()
- Specified by:
getDisplayName
in interfacePeerNATInitiator
- Specified by:
getDisplayName
in interfacePEPeerManager
-
getName
public java.lang.String getName()
- Specified by:
getName
in interfacePeerControlInstance
-
schedule
public void schedule()
- Specified by:
schedule
in interfacePeerControlInstance
-
analyseTrackerResponse
private void analyseTrackerResponse(TRTrackerAnnouncerResponse tracker_response)
A private method that does analysis of the result sent by the tracker. It will mainly open new connections with peers provided and set the timeToWait variable according to the tracker response.- Parameters:
tracker_response
-
-
processTrackerResponse
public void processTrackerResponse(TRTrackerAnnouncerResponse response)
- Specified by:
processTrackerResponse
in interfacePEPeerManager
-
addExtendedPeersFromTracker
private void addExtendedPeersFromTracker(java.util.Map extensions)
-
getMyPeer
public PEPeer getMyPeer()
- Specified by:
getMyPeer
in interfacePEPeerManager
-
getPeers
public java.util.List<PEPeer> getPeers()
- Specified by:
getPeers
in interfacePEPeerManager
-
getPeers
public java.util.List<PEPeer> getPeers(java.lang.String address)
- Specified by:
getPeers
in interfacePEPeerManager
-
getPendingPeerCount
public int getPendingPeerCount()
- Specified by:
getPendingPeerCount
in interfacePEPeerManager
-
getPendingPeers
public PeerDescriptor[] getPendingPeers()
- Specified by:
getPendingPeers
in interfacePEPeerManager
-
getPendingPeers
public PeerDescriptor[] getPendingPeers(java.lang.String address)
- Specified by:
getPendingPeers
in interfacePEPeerManager
-
addPeer
public void addPeer(PEPeer _transport)
- Specified by:
addPeer
in interfacePEPeerManager
-
getTorrentHash
protected byte[] getTorrentHash()
-
removePeer
public void removePeer(PEPeer _transport)
- Specified by:
removePeer
in interfacePEPeerManager
-
removePeer
public void removePeer(PEPeer _transport, java.lang.String reason)
- Specified by:
removePeer
in interfacePEPeerManager
-
closeAndRemovePeer
private void closeAndRemovePeer(PEPeerTransport peer, java.lang.String reason, boolean log_if_not_found)
-
closeAndRemoveAllPeers
private void closeAndRemoveAllPeers(java.lang.String reason, boolean reconnect)
-
addPeer
public void addPeer(java.lang.String ip_address, int tcp_port, int udp_port, boolean use_crypto, java.util.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 interfacePEPeerManager
- Parameters:
ip_address
- of peer to injecttcp_port
- of peer to injectudp_port
- of peer to inject (0 if unknown)use_crypto
- use encrypted transport
-
peerDiscovered
public void peerDiscovered(java.lang.String peer_source, java.lang.String ip_address, int tcp_port, int udp_port, boolean use_crypto)
- Specified by:
peerDiscovered
in interfacePEPeerManager
-
addPeersFromTracker
private void addPeersFromTracker(TRTrackerAnnouncerResponsePeer[] peers)
-
makeNewOutgoingConnection
private java.lang.String makeNewOutgoingConnection(java.lang.String peer_source, java.lang.String address, int tcp_port, int udp_port, boolean use_tcp, boolean require_crypto, byte crypto_level, java.util.Map user_data)
Request a new outgoing peer connection.- Parameters:
address
- ip of remote peerport
- remote peer listen port- Returns:
- null if the connection was added to the transport list, reason if rejected
-
checkCompletedPieces
private void checkCompletedPieces()
A private method that checks if PEPieces being downloaded are finished If all blocks from a PEPiece are written to disk, this method will queue the piece for hash check. Elsewhere, if it passes sha-1 check, it will be marked as downloaded, otherwise, it will unmark it as fully downloaded, so blocks can be retreived again.
-
hashRequest
public boolean hashRequest(int piece_number, DiskManagerCheckRequestListener.HashListener listener)
- Specified by:
hashRequest
in interfaceDiskManagerCheckRequestListener
-
checkEmptyPiece
private boolean checkEmptyPiece(int pieceNumber)
Checks given piece to see if it's active but empty, and if so deactivates it.- Parameters:
pieceNumber
- to check- Returns:
- true if the piece was removed and is no longer active (pePiece ==null)
-
checkSpeedAndReserved
private void checkSpeedAndReserved()
Check if a piece's Speed is too fast for it to be getting new data and if a reserved pieced failed to get data within 120 seconds
-
check99PercentBug
private void check99PercentBug()
-
checkInterested
private void checkInterested()
-
processPieceChecks
private void processPieceChecks()
Private method to process the results given by DiskManager's piece checking thread via asyncPieceChecked(..)
-
checkBadPieces
private void checkBadPieces()
-
checkRescan
private void checkRescan()
-
badPieceReported
public void badPieceReported(PEPeerTransport originator, int piece_number)
- Specified by:
badPieceReported
in interfacePEPeerControl
-
isFastExtensionPermitted
public boolean isFastExtensionPermitted(PEPeerTransport originator)
- Specified by:
isFastExtensionPermitted
in interfacePEPeerControl
-
reportBadFastExtensionUse
public void reportBadFastExtensionUse(PEPeerTransport originator)
- Specified by:
reportBadFastExtensionUse
in interfacePEPeerControl
-
setStatsReceiver
public void setStatsReceiver(PEPeerManager.StatsReceiver receiver)
- Specified by:
setStatsReceiver
in interfacePEPeerManager
-
statsRequest
public void statsRequest(PEPeerTransport originator, java.util.Map request)
- Specified by:
statsRequest
in interfacePEPeerControl
-
statsReply
public void statsReply(PEPeerTransport originator, java.util.Map reply)
- Specified by:
statsReply
in interfacePEPeerControl
-
checkFinished
private void checkFinished(boolean start_of_day)
This method checks if the downloading process is finished.
-
checkCompletionState
protected void checkCompletionState()
-
checkRequests
private void checkRequests()
This method will locate expired requests on peers, will cancel them, and mark the peer as snubbed if we haven't received usefull data from them within the last 60 seconds
-
checkSnubbing
public void checkSnubbing(PEPeerTransport peer)
- Specified by:
checkSnubbing
in interfacePEPeerControl
-
updateTrackerAnnounceInterval
private void updateTrackerAnnounceInterval()
-
hasDownloadablePiece
public boolean hasDownloadablePiece()
- Specified by:
hasDownloadablePiece
in interfacePEPeerManager
-
getBytesQueuedForUpload
public int getBytesQueuedForUpload()
- Specified by:
getBytesQueuedForUpload
in interfacePEPeerManager
-
getNbPeersWithUploadQueued
public int getNbPeersWithUploadQueued()
- Specified by:
getNbPeersWithUploadQueued
in interfacePEPeerManager
-
getNbPeersWithUploadBlocked
public int getNbPeersWithUploadBlocked()
- Specified by:
getNbPeersWithUploadBlocked
in interfacePEPeerManager
-
getNbPeersUnchoked
public int getNbPeersUnchoked()
- Specified by:
getNbPeersUnchoked
in interfacePEPeerManager
-
getNbPeersUnchoking
public int getNbPeersUnchoking()
- Specified by:
getNbPeersUnchoking
in interfacePEPeerManager
-
getAvailability
public int[] getAvailability()
- Specified by:
getAvailability
in interfacePEPeerManager
-
getMinAvailability
public float getMinAvailability()
- Specified by:
getMinAvailability
in interfacePEPeerManager
-
getMinAvailability
public float getMinAvailability(int file_index)
- Specified by:
getMinAvailability
in interfacePEPeerManager
-
getBytesUnavailable
public long getBytesUnavailable()
- Specified by:
getBytesUnavailable
in interfacePEPeerManager
-
getAvgAvail
public float getAvgAvail()
- Specified by:
getAvgAvail
in interfacePEPeerManager
-
getAvailWentBadTime
public long getAvailWentBadTime()
- Specified by:
getAvailWentBadTime
in interfacePEPeerManager
-
addPeerTransport
public void addPeerTransport(PEPeerTransport transport)
- Specified by:
addPeerTransport
in interfacePEPeerControl
-
doUnchokes
private void doUnchokes()
Do all peer choke/unchoke processing.
-
addFastUnchokes
private void addFastUnchokes(java.util.ArrayList peers_to_unchoke)
-
sendHave
private void sendHave(int pieceNumber)
-
checkSeeds
private void checkSeeds()
-
updateStats
private void updateStats()
-
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 interfacePEPeerManager
- 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 interfacePEPeerControl
-
getHash
public byte[] getHash()
- Specified by:
getHash
in interfacePEPeerManager
-
getPeerIdentityDataID
public PeerIdentityDataID getPeerIdentityDataID()
- Specified by:
getPeerIdentityDataID
in interfacePEPeerManager
-
getPeerId
public byte[] getPeerId()
- Specified by:
getPeerId
in interfacePEPeerManager
-
getRemaining
public long getRemaining()
- Specified by:
getRemaining
in interfacePEPeerManager
-
discarded
public void discarded(PEPeer peer, int length)
- Specified by:
discarded
in interfacePEPeerManager
-
dataBytesReceived
public void dataBytesReceived(PEPeer peer, int length)
Description copied from interface:PEPeerManager
Data bytes received.- Specified by:
dataBytesReceived
in interfacePEPeerManager
-
protocolBytesReceived
public void protocolBytesReceived(PEPeer peer, int length)
Description copied from interface:PEPeerManager
Protocol bytes received.- Specified by:
protocolBytesReceived
in interfacePEPeerManager
-
dataBytesSent
public void dataBytesSent(PEPeer peer, int length)
Description copied from interface:PEPeerManager
Data bytes sent.- Specified by:
dataBytesSent
in interfacePEPeerManager
-
protocolBytesSent
public void protocolBytesSent(PEPeer peer, int length)
Description copied from interface:PEPeerManager
Protocol bytes sent.- Specified by:
protocolBytesSent
in interfacePEPeerManager
-
writeCompleted
public void writeCompleted(DiskManagerWriteRequest request)
DiskManagerWriteRequestListener message- Specified by:
writeCompleted
in interfaceDiskManagerWriteRequestListener
- See Also:
DiskManagerWriteRequestListener
-
writeFailed
public void writeFailed(DiskManagerWriteRequest request, java.lang.Throwable cause)
- Specified by:
writeFailed
in interfaceDiskManagerWriteRequestListener
-
writeBlock
public void writeBlock(int pieceNumber, int offset, DirectByteBuffer data, java.lang.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 interfacePEPeerManager
- Parameters:
pieceNumber
- to potentialy write tooffset
- within piece to queue write fordata
- to be writensender
- peer that sent this datacancel
- 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 interfacePEPeerManager
-
validateReadRequest
public boolean validateReadRequest(PEPeerTransport originator, int pieceNumber, int offset, int length)
- Specified by:
validateReadRequest
in interfacePEPeerControl
-
validateHintRequest
public boolean validateHintRequest(PEPeerTransport originator, int pieceNumber, int offset, int length)
- Specified by:
validateHintRequest
in interfacePEPeerControl
-
validatePieceReply
public boolean validatePieceReply(PEPeerTransport originator, int pieceNumber, int offset, DirectByteBuffer data)
- Specified by:
validatePieceReply
in interfacePEPeerManager
-
getAvailability
public int getAvailability(int pieceNumber)
- Specified by:
getAvailability
in interfacePEPeerManager
-
havePiece
public void havePiece(int pieceNumber, int pieceLength, PEPeer pcOrigin)
- Specified by:
havePiece
in interfacePEPeerControl
-
getPieceLength
public int getPieceLength(int pieceNumber)
- Specified by:
getPieceLength
in interfacePEPeerManager
-
getNbPeers
public int getNbPeers()
- Specified by:
getNbPeers
in interfacePEPeerManager
-
getNbSeeds
public int getNbSeeds()
- Specified by:
getNbSeeds
in interfacePEPeerManager
-
getNbRemoteTCPConnections
public int getNbRemoteTCPConnections()
- Specified by:
getNbRemoteTCPConnections
in interfacePEPeerManager
-
getNbRemoteUDPConnections
public int getNbRemoteUDPConnections()
- Specified by:
getNbRemoteUDPConnections
in interfacePEPeerManager
-
getNbRemoteUTPConnections
public int getNbRemoteUTPConnections()
- Specified by:
getNbRemoteUTPConnections
in interfacePEPeerManager
-
getLastRemoteConnectionTime
public long getLastRemoteConnectionTime()
- Specified by:
getLastRemoteConnectionTime
in interfacePEPeerManager
-
getStats
public PEPeerManagerStats getStats()
- Specified by:
getStats
in interfacePEPeerManager
-
getNbPeersStalledPendingLoad
public int getNbPeersStalledPendingLoad()
- Specified by:
getNbPeersStalledPendingLoad
in interfacePEPeerControl
-
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 interfacePEPeerManager
-
isRTA
public boolean isRTA()
- Specified by:
isRTA
in interfacePEPeerControl
-
addToPeerTransports
private void addToPeerTransports(PEPeerTransport peer)
-
addRateLimiter
public void addRateLimiter(LimitedRateGroup group, boolean upload)
- Specified by:
addRateLimiter
in interfacePEPeerManager
-
removeRateLimiter
public void removeRateLimiter(LimitedRateGroup group, boolean upload)
- Specified by:
removeRateLimiter
in interfacePEPeerManager
-
getEffectiveUploadRateLimitBytesPerSecond
public int getEffectiveUploadRateLimitBytesPerSecond()
- Specified by:
getEffectiveUploadRateLimitBytesPerSecond
in interfacePEPeerManager
-
getUploadRateLimitBytesPerSecond
public int getUploadRateLimitBytesPerSecond()
- Specified by:
getUploadRateLimitBytesPerSecond
in interfacePEPeerManager
-
getDownloadRateLimitBytesPerSecond
public int getDownloadRateLimitBytesPerSecond()
- Specified by:
getDownloadRateLimitBytesPerSecond
in interfacePEPeerManager
-
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 interfacePEPeerManager
- Parameters:
peer
- closed
-
informFullyConnected
public void informFullyConnected(PEPeer peer)
- Specified by:
informFullyConnected
in interfacePEPeerManager
-
updateConnectHealth
private void updateConnectHealth(PEPeerTransport pc)
-
getConnectHealth
public java.lang.String getConnectHealth(boolean verbose)
- Specified by:
getConnectHealth
in interfacePEPeerManager
-
peerAdded
private void peerAdded(PEPeerTransport pc)
-
peerRemoved
private void peerRemoved(PEPeerTransport pc)
-
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 interfacePEPeerManager
- Parameters:
piece
- PEPiece invoked; notifications of it's invocation need to be donepieceNumber
- 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 removepieceNumber
- int
-
getNbActivePieces
public int getNbActivePieces()
- Specified by:
getNbActivePieces
in interfacePEPeerControl
-
getElapsedTime
public java.lang.String getElapsedTime()
- Specified by:
getElapsedTime
in interfacePEPeerManager
-
getTimeStarted
public long getTimeStarted(boolean mono)
- Specified by:
getTimeStarted
in interfacePEPeerManager
-
getTimeStartedSeeding
public long getTimeStartedSeeding(boolean mono)
- Specified by:
getTimeStartedSeeding
in interfacePEPeerManager
-
computeMd5Hash
private byte[] computeMd5Hash(DirectByteBuffer buffer)
-
MD5CheckPiece
private void MD5CheckPiece(PEPiece piece, boolean correct)
-
checkCompleted
public void checkCompleted(DiskManagerCheckRequest request, boolean passed)
- Specified by:
checkCompleted
in interfaceDiskManagerCheckRequestListener
-
checkCancelled
public void checkCancelled(DiskManagerCheckRequest request)
- Specified by:
checkCancelled
in interfaceDiskManagerCheckRequestListener
-
checkFailed
public void checkFailed(DiskManagerCheckRequest request, java.lang.Throwable cause)
- Specified by:
checkFailed
in interfaceDiskManagerCheckRequestListener
-
needsMD5CheckOnCompletion
public boolean needsMD5CheckOnCompletion(int pieceNumber)
- Specified by:
needsMD5CheckOnCompletion
in interfacePEPeerManager
-
processPieceCheckResult
private void processPieceCheckResult(DiskManagerCheckRequest request, int outcome)
-
badPeerDetected
private void badPeerDetected(java.lang.String ip, int piece_number, java.lang.String reason)
-
getNbPieces
public int getNbPieces()
- Specified by:
getNbPieces
in interfacePEPeerManager
-
getPieces
public PEPiece[] getPieces()
Description copied from interface:PEPeerManager
Often better to use getPiece(pieceNumber)- Specified by:
getPieces
in interfacePEPeerManager
-
getPiece
public PEPiece getPiece(int pieceNumber)
- Specified by:
getPiece
in interfacePEPeerManager
- Returns:
- PEPiece or null if piece not currently active
-
createPeerStats
public PEPeerStats createPeerStats(PEPeer owner)
- Specified by:
createPeerStats
in interfacePEPeerManager
-
createDiskManagerRequest
public DiskManagerReadRequest createDiskManagerRequest(int pieceNumber, int offset, int length)
- Specified by:
createDiskManagerRequest
in interfacePEPeerManager
-
requestExists
public boolean requestExists(java.lang.String peer_ip, int piece_number, int offset, int length)
- Specified by:
requestExists
in interfacePEPeerManager
-
seedPieceRecheck
public boolean seedPieceRecheck()
- Specified by:
seedPieceRecheck
in interfacePEPeerManager
-
addListener
public void addListener(PEPeerManagerListener l)
- Specified by:
addListener
in interfacePEPeerManager
-
removeListener
public void removeListener(PEPeerManagerListener l)
- Specified by:
removeListener
in interfacePEPeerManager
-
checkForBannedConnections
private void checkForBannedConnections()
-
isSeeding
public boolean isSeeding()
- Specified by:
isSeeding
in interfacePEPeerManager
-
isMetadataDownload
public boolean isMetadataDownload()
- Specified by:
isMetadataDownload
in interfacePEPeerManager
-
getTorrentInfoDictSize
public int getTorrentInfoDictSize()
- Specified by:
getTorrentInfoDictSize
in interfacePEPeerManager
-
setTorrentInfoDictSize
public void setTorrentInfoDictSize(int size)
- Specified by:
setTorrentInfoDictSize
in interfacePEPeerManager
-
isInEndGameMode
public boolean isInEndGameMode()
Description copied from interface:PEPeerManager
Are we in end-game mode?- Specified by:
isInEndGameMode
in interfacePEPeerManager
- Returns:
- true if in end game mode, false if not
-
isSuperSeedMode
public boolean isSuperSeedMode()
- Specified by:
isSuperSeedMode
in interfacePEPeerManager
-
canToggleSuperSeedMode
public boolean canToggleSuperSeedMode()
- Specified by:
canToggleSuperSeedMode
in interfacePEPeerManager
-
setSuperSeedMode
public void setSuperSeedMode(boolean _superSeedMode)
- Specified by:
setSuperSeedMode
in interfacePEPeerManager
-
initialiseSuperSeedMode
private void initialiseSuperSeedMode()
-
updatePeersInSuperSeedMode
private void updatePeersInSuperSeedMode()
-
updateSuperSeedPiece
public void updateSuperSeedPiece(PEPeer peer, int pieceNumber)
- Specified by:
updateSuperSeedPiece
in interfacePEPeerControl
-
isPrivateTorrent
public boolean isPrivateTorrent()
- Specified by:
isPrivateTorrent
in interfacePEPeerControl
-
getExtendedMessagingMode
public int getExtendedMessagingMode()
- Specified by:
getExtendedMessagingMode
in interfacePEPeerControl
-
isPeerExchangeEnabled
public boolean isPeerExchangeEnabled()
- Specified by:
isPeerExchangeEnabled
in interfacePEPeerControl
-
getUploadLimitedRateGroup
public LimitedRateGroup getUploadLimitedRateGroup()
Description copied from interface:PEPeerManager
Get the limited rate group used for upload limiting.- Specified by:
getUploadLimitedRateGroup
in interfacePEPeerManager
- 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 interfacePEPeerManager
- Returns:
- download limit group
-
getData
public java.lang.Object getData(java.lang.String key)
To retreive arbitrary objects against this object.- Specified by:
getData
in interfacePEPeerManager
-
setData
public void setData(java.lang.String key, java.lang.Object value)
To store arbitrary objects against a control.- Specified by:
setData
in interfacePEPeerManager
-
getConnectTimeout
public int getConnectTimeout(int ct_def)
- Specified by:
getConnectTimeout
in interfacePEPeerControl
-
doConnectionChecks
private void doConnectionChecks()
-
doUDPConnectionChecks
private void doUDPConnectionChecks(int number)
-
doOptimisticDisconnect
public boolean doOptimisticDisconnect(boolean pending_lan_local_peer, boolean force, java.lang.String network)
- Specified by:
doOptimisticDisconnect
in interfacePEPeerControl
-
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 interfacePEPeerManager
- Parameters:
base_peer
- exchaning with- Returns:
- peer database connection item, or null if creation failed
-
isAlreadyConnected
private boolean isAlreadyConnected(PeerItem peer_id)
-
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 interfacePEPeerManager
- Parameters:
self
- peer
-
IPFilterEnabledChanged
public void IPFilterEnabledChanged(boolean is_enabled)
- Specified by:
IPFilterEnabledChanged
in interfaceIPFilterListener
-
canIPBeBanned
public boolean canIPBeBanned(java.lang.String ip)
- Specified by:
canIPBeBanned
in interfaceIPFilterListener
-
canIPBeBlocked
public boolean canIPBeBlocked(java.lang.String ip, byte[] torrent_hash)
- Specified by:
canIPBeBlocked
in interfaceIPFilterListener
-
IPBlockedListChanged
public void IPBlockedListChanged(IpFilter filter)
- Specified by:
IPBlockedListChanged
in interfaceIPFilterListener
-
IPBanned
public void IPBanned(BannedIp ip)
- Specified by:
IPBanned
in interfaceIPFilterListener
-
getHiddenBytes
public long getHiddenBytes()
- Specified by:
getHiddenBytes
in interfacePEPeerManager
-
getHiddenPiece
public int getHiddenPiece()
- Specified by:
getHiddenPiece
in interfacePEPeerControl
-
getUploadPriority
public int getUploadPriority()
- Specified by:
getUploadPriority
in interfacePEPeerControl
-
getAverageCompletionInThousandNotation
public int getAverageCompletionInThousandNotation()
Description copied from interface:PEPeerManager
Get the average completion percentage of connected peers.- Specified by:
getAverageCompletionInThousandNotation
in interfacePEPeerManager
- Returns:
- average percent complete in thousand notation
-
getMaxCompletionInThousandNotation
public int getMaxCompletionInThousandNotation(boolean never_include_seeds)
Description copied from interface:PEPeerManager
Max completion of connected peers (doesn't factor in our completion)- Specified by:
getMaxCompletionInThousandNotation
in interfacePEPeerManager
- Returns:
-
getMaxConnections
public int[] getMaxConnections()
- Specified by:
getMaxConnections
in interfacePEPeerControl
-
getMaxConnections
private int getMaxConnections(java.lang.String net)
-
getMaxSeedConnections
public int[] getMaxSeedConnections()
-
getMaxSeedConnections
private int getMaxSeedConnections(java.lang.String net)
-
getMaxNewConnectionsAllowed
public int getMaxNewConnectionsAllowed(java.lang.String network)
returns the allowed connections for the given network -1 -> unlimited- Specified by:
getMaxNewConnectionsAllowed
in interfacePEPeerManager
-
getMaxNewConnectionsAllowed
private int[] getMaxNewConnectionsAllowed()
returns number of whatever peers to connect and then extra ones that must be non-pub if available- Returns:
- -1 -> unlimited
-
getPeerCount
public int[] getPeerCount()
- Specified by:
getPeerCount
in interfacePeerControlInstance
-
getPieceCount
public int[] getPieceCount()
- Specified by:
getPieceCount
in interfacePeerControlInstance
-
getSchedulePriority
public int getSchedulePriority()
- Specified by:
getSchedulePriority
in interfacePeerControlInstance
-
hasPotentialConnections
public boolean hasPotentialConnections()
- Specified by:
hasPotentialConnections
in interfacePEPeerManager
-
getRelationText
public java.lang.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 classLogRelation
- Returns:
-
getQueryableInterfaces
public java.lang.Object[] getQueryableInterfaces()
Description copied from class:LogRelation
Query this class for a reference to another class that it may hold- Overrides:
getQueryableInterfaces
in classLogRelation
- 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 interfacePEPeerManager
- Parameters:
peer_id
- to look for- Returns:
- transport with matching identity, or null if no match is found
-
getTransportFromAddress
public PEPeerTransport getTransportFromAddress(java.lang.String peer)
Description copied from interface:PEPeerManager
Locate an existing transport via [IP] Address.- Specified by:
getTransportFromAddress
in interfacePEPeerManager
- 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 interfacePEPeerControl
-
decNbPeersSnubbed
public void decNbPeersSnubbed()
- Specified by:
decNbPeersSnubbed
in interfacePEPeerControl
-
setNbPeersSnubbed
public void setNbPeersSnubbed(int n)
- Specified by:
setNbPeersSnubbed
in interfacePEPeerControl
-
getNbPeersSnubbed
public int getNbPeersSnubbed()
- Specified by:
getNbPeersSnubbed
in interfacePEPeerControl
-
getPreferUDP
public boolean getPreferUDP()
- Specified by:
getPreferUDP
in interfacePEPeerManager
-
setPreferUDP
public void setPreferUDP(boolean prefer)
- Specified by:
setPreferUDP
in interfacePEPeerManager
-
isPeerSourceEnabled
public boolean isPeerSourceEnabled(java.lang.String peer_source)
- Specified by:
isPeerSourceEnabled
in interfacePEPeerManager
-
isNetworkEnabled
public boolean isNetworkEnabled(java.lang.String net)
- Specified by:
isNetworkEnabled
in interfacePEPeerManager
-
peerDiscovered
public void peerDiscovered(PEPeerTransport finder, PeerItem pi)
- Specified by:
peerDiscovered
in interfacePEPeerControl
-
getTrackerPeerSource
public TrackerPeerSource getTrackerPeerSource()
- Specified by:
getTrackerPeerSource
in interfacePEPeerManager
-
checkAutoSequentialFiles
private void checkAutoSequentialFiles(DiskManagerFileInfo done_file)
-
getHashHandler
public PEPeerControlHashHandler getHashHandler()
- Specified by:
getHashHandler
in interfacePEPeerControl
-
generateEvidence
public void generateEvidence(IndentWriter writer)
- Specified by:
generateEvidence
in interfacePEPeerManager
-
-