com.aelitis.azureus.core.peermanager.messaging.bittorrent.ltep
Class UTPeerExchange

java.lang.Object
  extended by com.aelitis.azureus.core.peermanager.messaging.bittorrent.ltep.UTPeerExchange
All Implemented Interfaces:
AZStylePeerExchange, LTMessage, Message

public class UTPeerExchange
extends Object
implements AZStylePeerExchange, LTMessage

Author:
Allan Crooks Largely copied from AZPeerExchange.

Field Summary
 
Fields inherited from interface com.aelitis.azureus.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.aelitis.azureus.core.peermanager.messaging.Message
TYPE_DATA_PAYLOAD, TYPE_PROTOCOL_PAYLOAD
 
Constructor Summary
UTPeerExchange(PeerItem[] _peers_added, PeerItem[] _peers_dropped, PeerItem[] peersAddedNoSeeds, byte version)
           
 
Method Summary
 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.
 PeerItem[] getAddedPeers()
           
 PeerItem[] getAddedPeers(boolean seeds)
           
 DirectByteBuffer[] getData()
          Get message payload data.
 String getDescription()
          Get textual description of this particular message.
 PeerItem[] getDroppedPeers()
           
 String getFeatureID()
          Get the main feature set name this message belongs to.
 int getFeatureSubID()
          Get the static message sub-id for the feature.
 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()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

UTPeerExchange

public UTPeerExchange(PeerItem[] _peers_added,
                      PeerItem[] _peers_dropped,
                      PeerItem[] peersAddedNoSeeds,
                      byte version)
Method Detail

getAddedPeers

public PeerItem[] getAddedPeers(boolean seeds)

getAddedPeers

public PeerItem[] getAddedPeers()
Specified by:
getAddedPeers in interface AZStylePeerExchange

getDroppedPeers

public PeerItem[] getDroppedPeers()
Specified by:
getDroppedPeers in interface AZStylePeerExchange

getID

public String getID()
Description copied from interface: Message
Get message id.

Specified by:
getID in interface Message
Returns:
id

getIDBytes

public byte[] getIDBytes()
Specified by:
getIDBytes in interface Message

getFeatureID

public String getFeatureID()
Description copied from interface: Message
Get the main feature set name this message belongs to.

Specified by:
getFeatureID in interface Message
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 interface Message
Returns:
sub id

getType

public int getType()
Description copied from interface: Message
Get message type.

Specified by:
getType in interface Message
Returns:
type

getVersion

public byte getVersion()
Specified by:
getVersion in interface Message

getDescription

public String getDescription()
Description copied from interface: Message
Get textual description of this particular message.

Specified by:
getDescription in interface Message
Returns:
description

getData

public DirectByteBuffer[] getData()
Description copied from interface: Message
Get message payload data.

Specified by:
getData in interface Message
Returns:
message data buffers

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 interface Message
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.

Specified by:
destroy in interface Message

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 interface AZStylePeerExchange