java.lang.Object
com.biglybt.core.peermanager.messaging.bittorrent.ltep.UTPeerExchange
All Implemented Interfaces:
AZStylePeerExchange, LTMessage, Message

public class UTPeerExchange extends Object implements AZStylePeerExchange, LTMessage
  • Field Details

    • LOGID

      private static final LogIDs 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

      private DirectByteBuffer buffer
    • description

      private 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
  • Constructor Details

    • UTPeerExchange

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

    • insertPeers

      private void insertPeers(String key_name, Map root_map, boolean include_flags, PeerItem[] peers)
    • insertPeers

      private void insertPeers(String key_name, Map root_map, boolean include_flags, List peers, int peer_byte_size)
    • extractPeers

      private List extractPeers(String key_name, Map root_map, int peer_byte_size, boolean noSeeds)
    • 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