Class UTPeerExchange
- java.lang.Object
-
- com.biglybt.core.peermanager.messaging.bittorrent.ltep.UTPeerExchange
-
- All Implemented Interfaces:
AZStylePeerExchange
,LTMessage
,Message
public class UTPeerExchange extends java.lang.Object implements AZStylePeerExchange, LTMessage
-
-
Field Summary
Fields Modifier and Type Field Description private DirectByteBuffer
buffer
private java.lang.String
description
private static int
IPv4_SIZE_WITH_PORT
private static int
IPv6_SIZE_WITH_PORT
private static LogIDs
LOGID
private PeerItem[]
peers_added
private PeerItem[]
peers_dropped
private PeerItem[]
peersAddedNoSeeds
private byte
version
-
Fields inherited from interface com.biglybt.core.peermanager.messaging.bittorrent.ltep.LTMessage
ID_DISABLED_EXT, ID_DISABLED_EXT_BYTES, ID_LT_HANDSHAKE, ID_LT_HANDSHAKE_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_METADATA, SUBID_UT_PEX, SUBID_UT_UPLOAD_ONLY
-
Fields inherited from interface com.biglybt.core.peermanager.messaging.Message
TYPE_DATA_PAYLOAD, TYPE_PROTOCOL_PAYLOAD
-
-
Constructor Summary
Constructors Constructor Description UTPeerExchange(PeerItem[] _peers_added, PeerItem[] _peers_dropped, PeerItem[] peersAddedNoSeeds, byte version)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Message
deserialize(DirectByteBuffer data, byte version)
Create a new instance of this message by decoding the given byte serialization.void
destroy()
Destroy the message; i.e.private java.util.List
extractPeers(java.lang.String key_name, java.util.Map root_map, int peer_byte_size, boolean noSeeds)
PeerItem[]
getAddedPeers()
PeerItem[]
getAddedPeers(boolean seeds)
DirectByteBuffer[]
getData()
Get message payload data.java.lang.String
getDescription()
Get textual description of this particular message.PeerItem[]
getDroppedPeers()
java.lang.String
getFeatureID()
Get the main feature set name this message belongs to.int
getFeatureSubID()
Get the static message sub-id for the feature.java.lang.String
getID()
Get message id.byte[]
getIDBytes()
int
getMaxAllowedPeersPerVolley(boolean initial, boolean added)
Arbitrary value - most clients are configured to about 100 or so...int
getType()
Get message type.byte
getVersion()
private void
insertPeers(java.lang.String key_name, java.util.Map root_map, boolean include_flags, PeerItem[] peers)
private void
insertPeers(java.lang.String key_name, java.util.Map root_map, boolean include_flags, java.util.List peers, int peer_byte_size)
-
-
-
Field Detail
-
LOGID
private static final LogIDs LOGID
-
IPv4_SIZE_WITH_PORT
private static final int IPv4_SIZE_WITH_PORT
- See Also:
- Constant Field Values
-
IPv6_SIZE_WITH_PORT
private static final int IPv6_SIZE_WITH_PORT
- See Also:
- Constant Field Values
-
buffer
private DirectByteBuffer buffer
-
description
private java.lang.String description
-
version
private final byte version
-
peers_added
private final PeerItem[] peers_added
-
peersAddedNoSeeds
private final PeerItem[] peersAddedNoSeeds
-
peers_dropped
private final PeerItem[] peers_dropped
-
-
Method Detail
-
insertPeers
private void insertPeers(java.lang.String key_name, java.util.Map root_map, boolean include_flags, PeerItem[] peers)
-
insertPeers
private void insertPeers(java.lang.String key_name, java.util.Map root_map, boolean include_flags, java.util.List peers, int peer_byte_size)
-
extractPeers
private java.util.List extractPeers(java.lang.String key_name, java.util.Map root_map, int peer_byte_size, boolean noSeeds)
-
getAddedPeers
public PeerItem[] getAddedPeers(boolean seeds)
-
getAddedPeers
public PeerItem[] getAddedPeers()
- Specified by:
getAddedPeers
in interfaceAZStylePeerExchange
-
getDroppedPeers
public PeerItem[] getDroppedPeers()
- Specified by:
getDroppedPeers
in interfaceAZStylePeerExchange
-
getID
public java.lang.String getID()
Description copied from interface:Message
Get message id.
-
getIDBytes
public byte[] getIDBytes()
- Specified by:
getIDBytes
in interfaceMessage
-
getFeatureID
public java.lang.String getFeatureID()
Description copied from interface:Message
Get the main feature set name this message belongs to.- Specified by:
getFeatureID
in interfaceMessage
- Returns:
- feature id
-
getFeatureSubID
public int getFeatureSubID()
Description copied from interface:Message
Get the static message sub-id for the feature.- Specified by:
getFeatureSubID
in interfaceMessage
- Returns:
- sub id
-
getType
public int getType()
Description copied from interface:Message
Get message type.
-
getVersion
public byte getVersion()
- Specified by:
getVersion
in interfaceMessage
-
getDescription
public java.lang.String getDescription()
Description copied from interface:Message
Get textual description of this particular message.- Specified by:
getDescription
in interfaceMessage
- Returns:
- description
-
getData
public DirectByteBuffer[] getData()
Description copied from interface:Message
Get message payload data.
-
deserialize
public Message deserialize(DirectByteBuffer data, byte version) throws MessageException
Description copied from interface:Message
Create a new instance of this message by decoding the given byte serialization.- Specified by:
deserialize
in 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
public void destroy()
Description copied from interface:Message
Destroy the message; i.e. perform cleanup actions.
-
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:
getMaxAllowedPeersPerVolley
in interfaceAZStylePeerExchange
-
-