Class UTPeerExchange
java.lang.Object
com.biglybt.core.peermanager.messaging.bittorrent.ltep.UTPeerExchange
- All Implemented Interfaces:
AZStylePeerExchange, LTMessage, Message
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate DirectByteBufferprivate Stringprivate static final intprivate static final intprivate static final LogIDsprivate final PeerItem[]private final PeerItem[]private final PeerItem[]private final byteFields inherited from interface LTMessage
ID_DISABLED_EXT, ID_DISABLED_EXT_BYTES, ID_LT_HANDSHAKE, ID_LT_HANDSHAKE_BYTES, ID_UT_HOLEPUNCH, ID_UT_HOLEPUNCH_BYTES, ID_UT_METADATA, ID_UT_METADATA_BYTES, ID_UT_PEX, ID_UT_PEX_BYTES, ID_UT_UPLOAD_ONLY, ID_UT_UPLOAD_ONLY_BYTES, LT_FEATURE_ID, SUBID_DISABLED_EXT, SUBID_LT_HANDSHAKE, SUBID_UT_HOLEPUNCH, SUBID_UT_METADATA, SUBID_UT_PEX, SUBID_UT_UPLOAD_ONLYFields inherited from interface Message
TYPE_DATA_PAYLOAD, TYPE_PROTOCOL_PAYLOAD -
Constructor Summary
ConstructorsConstructorDescriptionUTPeerExchange(PeerItem[] _peers_added, PeerItem[] _peers_dropped, PeerItem[] peersAddedNoSeeds, byte version) -
Method Summary
Modifier and TypeMethodDescriptiondeserialize(DirectByteBuffer data, byte version) Create a new instance of this message by decoding the given byte serialization.voiddestroy()Destroy the message; i.e.private ListextractPeers(String key_name, Map root_map, int peer_byte_size, boolean noSeeds) PeerItem[]PeerItem[]getAddedPeers(boolean seeds) getData()Get message payload data.Get textual description of this particular message.PeerItem[]Get the main feature set name this message belongs to.intGet the static message sub-id for the feature.getID()Get message id.byte[]intgetMaxAllowedPeersPerVolley(boolean initial, boolean added) Arbitrary value - most clients are configured to about 100 or so...intgetType()Get message type.byteprivate voidinsertPeers(String key_name, Map root_map, boolean include_flags, PeerItem[] peers) private voidinsertPeers(String key_name, Map root_map, boolean include_flags, List peers, int peer_byte_size)
-
Field Details
-
LOGID
-
IPv4_SIZE_WITH_PORT
private static final int IPv4_SIZE_WITH_PORT- See Also:
-
IPv6_SIZE_WITH_PORT
private static final int IPv6_SIZE_WITH_PORT- See Also:
-
buffer
-
description
-
version
private final byte version -
peers_added
-
peersAddedNoSeeds
-
peers_dropped
-
-
Constructor Details
-
UTPeerExchange
-
-
Method Details
-
insertPeers
-
insertPeers
-
extractPeers
-
getAddedPeers
-
getAddedPeers
- Specified by:
getAddedPeersin interfaceAZStylePeerExchange
-
getDroppedPeers
- Specified by:
getDroppedPeersin interfaceAZStylePeerExchange
-
getID
-
getIDBytes
public byte[] getIDBytes()- Specified by:
getIDBytesin interfaceMessage
-
getFeatureID
Description copied from interface:MessageGet the main feature set name this message belongs to.- Specified by:
getFeatureIDin interfaceMessage- Returns:
- feature id
-
getFeatureSubID
public int getFeatureSubID()Description copied from interface:MessageGet the static message sub-id for the feature.- Specified by:
getFeatureSubIDin interfaceMessage- Returns:
- sub id
-
getType
-
getVersion
public byte getVersion()- Specified by:
getVersionin interfaceMessage
-
getDescription
Description copied from interface:MessageGet textual description of this particular message.- Specified by:
getDescriptionin interfaceMessage- Returns:
- description
-
getData
Description copied from interface:MessageGet message payload data. -
deserialize
Description copied from interface:MessageCreate a new instance of this message by decoding the given byte serialization.- Specified by:
deserializein interfaceMessage- Parameters:
data- to deserialize- Returns:
- decoded message instance
- Throws:
MessageException- if the decoding process fails NOTE: Does not auto-return given direct buffer on thrown exception.
-
destroy
-
getMaxAllowedPeersPerVolley
public int getMaxAllowedPeersPerVolley(boolean initial, boolean added) Arbitrary value - most clients are configured to about 100 or so... We'll allow ourselves to be informed about 200 connected peers from the initial handshake, and then cap either list to about 100. These values are plucked from the air really - although I've seen PEX sizes where the added list is about 300 (sometimes), most contain a sensible number (not normally over 100). Subsequent PEX messages are relatively small too, so we'll stick to smaller limits - 50 would be probably fine, but watching some big swarms over a short period, the biggest "added" list I saw was one containing 38 peers, so it's quite possible list sizes above 50 get sent out. So 100 is a safe-ish figure. Update: uTorrent doesn't have any set limits on this, apparently it simply depends on the number of connections a peer has, which can be large for fast peers (I've seen 350 peers for example). Increased limits somewhat and added code to ignore excessive peers rather than dropping the connection- Specified by:
getMaxAllowedPeersPerVolleyin interfaceAZStylePeerExchange
-