com.aelitis.azureus.core.dht.transport.udp.impl
Class DHTTransportUDPImpl

java.lang.Object
  extended by com.aelitis.azureus.core.dht.transport.udp.impl.DHTTransportUDPImpl
All Implemented Interfaces:
DHTTransport, DHTTransportUDP, DHTUDPRequestHandler

public class DHTTransportUDPImpl
extends java.lang.Object
implements DHTTransportUDP, DHTUDPRequestHandler

Author:
parg

Nested Class Summary
 
Nested classes/interfaces inherited from interface com.aelitis.azureus.core.dht.transport.udp.DHTTransportUDP
DHTTransportUDP.Helper
 
Field Summary
static int MIN_ADDRESS_CHANGE_PERIOD_INIT_DEFAULT
           
static int MIN_ADDRESS_CHANGE_PERIOD_NEXT_DEFAULT
           
static int STORE_TIMEOUT_MULTIPLIER
           
static boolean TEST_EXTERNAL_IP
           
 
Fields inherited from interface com.aelitis.azureus.core.dht.transport.udp.DHTTransportUDP
PROTOCOL_VERSION_2304, PROTOCOL_VERSION_2306, PROTOCOL_VERSION_2400, PROTOCOL_VERSION_2402, PROTOCOL_VERSION_2500, PROTOCOL_VERSION_2502, PROTOCOL_VERSION_3111, PROTOCOL_VERSION_4204, PROTOCOL_VERSION_4208, PROTOCOL_VERSION_4310, PROTOCOL_VERSION_4407, PROTOCOL_VERSION_4511, PROTOCOL_VERSION_4600, PROTOCOL_VERSION_4720, PROTOCOL_VERSION_4800, PROTOCOL_VERSION_5400, PROTOCOL_VERSION_5500, PROTOCOL_VERSION_ALT_CONTACTS, PROTOCOL_VERSION_ANON_VALUES, PROTOCOL_VERSION_ANTI_SPOOF, PROTOCOL_VERSION_ANTI_SPOOF2, PROTOCOL_VERSION_BLOCK_KEYS, PROTOCOL_VERSION_CVS, PROTOCOL_VERSION_CVS_FIX_OVERLOAD_V1, PROTOCOL_VERSION_CVS_FIX_OVERLOAD_V2, PROTOCOL_VERSION_CVS_FIX_OVERLOAD_V3, PROTOCOL_VERSION_DIV_AND_CONT, PROTOCOL_VERSION_ENCRYPT_TT, PROTOCOL_VERSION_FIX_ORIGINATOR, PROTOCOL_VERSION_GENERIC_NETPOS, PROTOCOL_VERSION_LONGER_LIFE, PROTOCOL_VERSION_MAIN, PROTOCOL_VERSION_MIN, PROTOCOL_VERSION_MIN_CVS, PROTOCOL_VERSION_MORE_NODE_STATUS, PROTOCOL_VERSION_MORE_STATS, PROTOCOL_VERSION_NETWORKS, PROTOCOL_VERSION_PACKET_FLAGS, PROTOCOL_VERSION_PACKET_FLAGS2, PROTOCOL_VERSION_PROC_TIME, PROTOCOL_VERSION_REMOVE_DIST_ADD_VER, PROTOCOL_VERSION_REPLICATION_CONTROL, PROTOCOL_VERSION_REPLICATION_CONTROL2, PROTOCOL_VERSION_REPLICATION_CONTROL3, PROTOCOL_VERSION_RESTRICT_ID_PORTS, PROTOCOL_VERSION_RESTRICT_ID_PORTS2, PROTOCOL_VERSION_RESTRICT_ID_PORTS2X, PROTOCOL_VERSION_RESTRICT_ID_PORTS2Y, PROTOCOL_VERSION_RESTRICT_ID_PORTS2Z, PROTOCOL_VERSION_RESTRICT_ID3, PROTOCOL_VERSION_SIZE_ESTIMATE, PROTOCOL_VERSION_VENDOR_ID, PROTOCOL_VERSION_VIVALDI, PROTOCOL_VERSION_VIVALDI_FINDVALUE, PROTOCOL_VERSION_VIVALDI_OPTIONAL, PROTOCOL_VERSION_XFER_STATUS, VENDOR_ID_AELITIS, VENDOR_ID_ME, VENDOR_ID_NONE, VENDOR_ID_ShareNET
 
Fields inherited from interface com.aelitis.azureus.core.dht.transport.DHTTransport
GF_DHT_SLEEPING, GF_NONE
 
Constructor Summary
DHTTransportUDPImpl(byte _protocol_version, int _network, boolean _v6, java.lang.String _ip, java.lang.String _default_ip, int _port, int _max_fails_for_live, int _max_fails_for_unknown, long _timeout, int _dht_send_delay, int _dht_receive_delay, boolean _bootstrap_node, boolean _initial_reachability, DHTLogger _logger)
           
 
Method Summary
 void addListener(DHTTransportListener l)
           
protected  java.net.InetSocketAddress askContactForExternalAddress(DHTTransportUDPContactImpl contact)
           
protected  void checkAddress(DHTTransportUDPContactImpl contact)
           
protected  void contactAlive(DHTTransportUDPContactImpl contact)
           
protected  void createPacketHandler()
           
protected  void dataRequest(DHTTransportUDPContactImpl originator, DHTUDPPacketData req)
           
 void exportContact(DHTTransportContact contact, java.io.DataOutputStream os)
           
 java.util.Map<java.lang.String,java.lang.Object> exportContactToMap(DHTTransportContact contact)
           
protected  void externalAddressChange(DHTTransportUDPContactImpl reporter, java.net.InetSocketAddress new_address, boolean force)
           
 DHTTransportAlternativeNetwork getAlternativeNetwork(int network_type)
           
protected  long getConnectionID()
           
protected  void getExternalAddress(java.lang.String default_address, DHTLogger log)
           
protected  DHTTransportFullStats getFullStats(DHTTransportUDPContactImpl contact)
           
 byte getGenericFlags()
           
 byte getGenericFlags2()
           
 DHTTransportContact getLocalContact()
          Gives access to the node ID for this transport
protected  int getMaxFailForLiveCount()
           
protected  int getMaxFailForUnknownCount()
           
 byte getMinimumProtocolVersion()
           
 int getNetwork()
           
protected  int getNodeStatus()
           
 DHTUDPPacketHandler getPacketHandler()
           
 int getPort()
           
 byte getProtocolVersion()
           
 DHTTransportContact[] getReachableContacts()
           
 DHTTransportContact[] getRecentContacts()
           
 DHTUDPRequestHandler getRequestHandler()
           
 int getRouteablePercentage()
           
 DHTTransportStats getStats()
           
 long getTimeout()
           
 DHTTransportContact importContact(java.io.DataInputStream is, boolean is_bootstrap)
           
protected  void importContact(DHTTransportUDPContactImpl contact, boolean is_bootstrap)
           
 DHTTransportUDPContact importContact(java.net.InetSocketAddress _address, byte _protocol_version, boolean is_bootstrap)
           
 DHTTransportUDPContact importContact(java.util.Map<java.lang.String,java.lang.Object> map)
           
protected  void informLocalAddress(java.lang.String address)
           
protected  boolean invalidExternalAddress(java.net.InetAddress ia)
           
 boolean isIPV6()
           
 boolean isReachable()
           
 void process(DHTUDPPacketHandlerStub packet_handler_stub, DHTUDPPacketRequest request, boolean alien)
           
 void process(DHTUDPPacketRequest request, boolean alien)
           
 byte[] readTransfer(DHTTransportProgressListener listener, DHTTransportContact target, byte[] handler_key, byte[] key, long timeout)
           
protected  void recordSkew(java.net.InetSocketAddress originator_address, long skew)
           
 void registerAlternativeNetwork(DHTTransportAlternativeNetwork network)
           
 void registerTransferHandler(byte[] handler_key, DHTTransportTransferHandler handler)
           
 void registerTransferHandler(byte[] handler_key, DHTTransportTransferHandler handler, java.util.Map<java.lang.String,java.lang.Object> options)
           
 void removeContact(DHTTransportContact contact)
           
 void removeListener(DHTTransportListener l)
           
protected  void requestReceiveReplyProcessor(DHTTransportUDPContactImpl contact, DHTUDPPacketReply reply)
           
protected  void requestReceiveRequestProcessor(DHTTransportUDPContactImpl contact, DHTUDPPacketRequest request)
           
protected  void requestSendReplyProcessor(DHTTransportUDPContactImpl remote_contact, DHTTransportReplyHandler handler, DHTUDPPacketReply reply, long elapsed_time)
          Returns false if this isn't an error reply, true if it is and a retry can be performed, throws an exception otherwise
protected  void requestSendRequestProcessor(DHTTransportUDPContactImpl contact, DHTUDPPacketRequest request)
           
 void sendFindNode(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler, byte[] nid)
           
 void sendFindValue(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler, byte[] key, int max_values, short flags)
           
protected  void sendImmediatePing(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler, long timeout)
           
protected  void sendKeyBlockRequest(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler, byte[] block_request, byte[] block_signature)
           
protected  void sendPing(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler)
           
protected  void sendPing(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler, long timeout, int priority)
           
 void sendQueryStore(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler, int header_size, java.util.List<java.lang.Object[]> key_details)
           
protected  void sendStats(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler)
           
 void sendStore(DHTTransportUDPContactImpl contact, DHTTransportReplyHandler handler, byte[][] keys, DHTTransportValue[][] value_sets, int priority)
           
 void setGenericFlag(byte flag, boolean value)
           
protected  void setLocalContact()
           
 void setPort(int new_port)
           
 void setRequestHandler(DHTTransportRequestHandler _request_handler)
          Set the handler for incoming requests
 void setSuspended(boolean susp)
           
 void setTimeout(long timeout)
           
 boolean supportsStorage()
           
 void testExternalAddressChange()
           
 void testInstanceIDChange()
           
 void testNetworkAlive(boolean alive)
           
 void testTransportIDChange()
           
 void unregisterAlternativeNetwork(DHTTransportAlternativeNetwork network)
           
 void unregisterTransferHandler(byte[] handler_key, DHTTransportTransferHandler handler)
           
protected  void updateContactStatus(DHTTransportUDPContactImpl contact, int status, boolean incoming)
           
protected  void updateStats(int tick_count)
           
 byte[] writeReadTransfer(DHTTransportProgressListener listener, DHTTransportContact target, byte[] handler_key, byte[] data, long timeout)
           
 void writeTransfer(DHTTransportProgressListener listener, DHTTransportContact target, byte[] handler_key, byte[] key, byte[] data, long timeout)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TEST_EXTERNAL_IP

public static boolean TEST_EXTERNAL_IP

MIN_ADDRESS_CHANGE_PERIOD_INIT_DEFAULT

public static final int MIN_ADDRESS_CHANGE_PERIOD_INIT_DEFAULT
See Also:
Constant Field Values

MIN_ADDRESS_CHANGE_PERIOD_NEXT_DEFAULT

public static final int MIN_ADDRESS_CHANGE_PERIOD_NEXT_DEFAULT
See Also:
Constant Field Values

STORE_TIMEOUT_MULTIPLIER

public static final int STORE_TIMEOUT_MULTIPLIER
See Also:
Constant Field Values
Constructor Detail

DHTTransportUDPImpl

public DHTTransportUDPImpl(byte _protocol_version,
                           int _network,
                           boolean _v6,
                           java.lang.String _ip,
                           java.lang.String _default_ip,
                           int _port,
                           int _max_fails_for_live,
                           int _max_fails_for_unknown,
                           long _timeout,
                           int _dht_send_delay,
                           int _dht_receive_delay,
                           boolean _bootstrap_node,
                           boolean _initial_reachability,
                           DHTLogger _logger)
                    throws DHTTransportException
Throws:
DHTTransportException
Method Detail

createPacketHandler

protected void createPacketHandler()
                            throws DHTTransportException
Throws:
DHTTransportException

getRequestHandler

public DHTUDPRequestHandler getRequestHandler()
Specified by:
getRequestHandler in interface DHTTransportUDP

getPacketHandler

public DHTUDPPacketHandler getPacketHandler()
Specified by:
getPacketHandler in interface DHTTransportUDP

setSuspended

public void setSuspended(boolean susp)
Specified by:
setSuspended in interface DHTTransport

updateStats

protected void updateStats(int tick_count)

recordSkew

protected void recordSkew(java.net.InetSocketAddress originator_address,
                          long skew)

getNodeStatus

protected int getNodeStatus()

isReachable

public boolean isReachable()
Specified by:
isReachable in interface DHTTransport

getProtocolVersion

public byte getProtocolVersion()
Specified by:
getProtocolVersion in interface DHTTransport

getMinimumProtocolVersion

public byte getMinimumProtocolVersion()
Specified by:
getMinimumProtocolVersion in interface DHTTransport

getPort

public int getPort()
Specified by:
getPort in interface DHTTransport

setPort

public void setPort(int new_port)
             throws DHTTransportException
Specified by:
setPort in interface DHTTransport
Throws:
DHTTransportException

getTimeout

public long getTimeout()
Specified by:
getTimeout in interface DHTTransport

setTimeout

public void setTimeout(long timeout)
Specified by:
setTimeout in interface DHTTransport

getNetwork

public int getNetwork()
Specified by:
getNetwork in interface DHTTransport

getGenericFlags

public byte getGenericFlags()
Specified by:
getGenericFlags in interface DHTTransport

getGenericFlags2

public byte getGenericFlags2()

setGenericFlag

public void setGenericFlag(byte flag,
                           boolean value)
Specified by:
setGenericFlag in interface DHTTransport

isIPV6

public boolean isIPV6()
Specified by:
isIPV6 in interface DHTTransport

testInstanceIDChange

public void testInstanceIDChange()
                          throws DHTTransportException
Throws:
DHTTransportException

testTransportIDChange

public void testTransportIDChange()
                           throws DHTTransportException
Throws:
DHTTransportException

testExternalAddressChange

public void testExternalAddressChange()

testNetworkAlive

public void testNetworkAlive(boolean alive)

getExternalAddress

protected void getExternalAddress(java.lang.String default_address,
                                  DHTLogger log)

informLocalAddress

protected void informLocalAddress(java.lang.String address)

externalAddressChange

protected void externalAddressChange(DHTTransportUDPContactImpl reporter,
                                     java.net.InetSocketAddress new_address,
                                     boolean force)
                              throws DHTTransportException
Throws:
DHTTransportException

contactAlive

protected void contactAlive(DHTTransportUDPContactImpl contact)

getReachableContacts

public DHTTransportContact[] getReachableContacts()
Specified by:
getReachableContacts in interface DHTTransport

getRecentContacts

public DHTTransportContact[] getRecentContacts()
Specified by:
getRecentContacts in interface DHTTransport

updateContactStatus

protected void updateContactStatus(DHTTransportUDPContactImpl contact,
                                   int status,
                                   boolean incoming)

getRouteablePercentage

public int getRouteablePercentage()

invalidExternalAddress

protected boolean invalidExternalAddress(java.net.InetAddress ia)

getMaxFailForLiveCount

protected int getMaxFailForLiveCount()

getMaxFailForUnknownCount

protected int getMaxFailForUnknownCount()

getLocalContact

public DHTTransportContact getLocalContact()
Description copied from interface: DHTTransport
Gives access to the node ID for this transport

Specified by:
getLocalContact in interface DHTTransport
Returns:

setLocalContact

protected void setLocalContact()

importContact

public DHTTransportContact importContact(java.io.DataInputStream is,
                                         boolean is_bootstrap)
                                  throws java.io.IOException,
                                         DHTTransportException
Specified by:
importContact in interface DHTTransport
Throws:
java.io.IOException
DHTTransportException

importContact

public DHTTransportUDPContact importContact(java.net.InetSocketAddress _address,
                                            byte _protocol_version,
                                            boolean is_bootstrap)
                                     throws DHTTransportException
Specified by:
importContact in interface DHTTransportUDP
Throws:
DHTTransportException

importContact

protected void importContact(DHTTransportUDPContactImpl contact,
                             boolean is_bootstrap)

exportContact

public void exportContact(DHTTransportContact contact,
                          java.io.DataOutputStream os)
                   throws java.io.IOException,
                          DHTTransportException
Throws:
java.io.IOException
DHTTransportException

exportContactToMap

public java.util.Map<java.lang.String,java.lang.Object> exportContactToMap(DHTTransportContact contact)

importContact

public DHTTransportUDPContact importContact(java.util.Map<java.lang.String,java.lang.Object> map)
Specified by:
importContact in interface DHTTransportUDP

removeContact

public void removeContact(DHTTransportContact contact)

setRequestHandler

public void setRequestHandler(DHTTransportRequestHandler _request_handler)
Description copied from interface: DHTTransport
Set the handler for incoming requests

Specified by:
setRequestHandler in interface DHTTransport

getStats

public DHTTransportStats getStats()
Specified by:
getStats in interface DHTTransport

checkAddress

protected void checkAddress(DHTTransportUDPContactImpl contact)
                     throws DHTUDPPacketHandlerException
Throws:
DHTUDPPacketHandlerException

sendPing

protected void sendPing(DHTTransportUDPContactImpl contact,
                        DHTTransportReplyHandler handler,
                        long timeout,
                        int priority)

sendPing

protected void sendPing(DHTTransportUDPContactImpl contact,
                        DHTTransportReplyHandler handler)

sendImmediatePing

protected void sendImmediatePing(DHTTransportUDPContactImpl contact,
                                 DHTTransportReplyHandler handler,
                                 long timeout)

sendKeyBlockRequest

protected void sendKeyBlockRequest(DHTTransportUDPContactImpl contact,
                                   DHTTransportReplyHandler handler,
                                   byte[] block_request,
                                   byte[] block_signature)

sendStats

protected void sendStats(DHTTransportUDPContactImpl contact,
                         DHTTransportReplyHandler handler)

askContactForExternalAddress

protected java.net.InetSocketAddress askContactForExternalAddress(DHTTransportUDPContactImpl contact)

sendStore

public void sendStore(DHTTransportUDPContactImpl contact,
                      DHTTransportReplyHandler handler,
                      byte[][] keys,
                      DHTTransportValue[][] value_sets,
                      int priority)

sendQueryStore

public void sendQueryStore(DHTTransportUDPContactImpl contact,
                           DHTTransportReplyHandler handler,
                           int header_size,
                           java.util.List<java.lang.Object[]> key_details)

sendFindNode

public void sendFindNode(DHTTransportUDPContactImpl contact,
                         DHTTransportReplyHandler handler,
                         byte[] nid)

sendFindValue

public void sendFindValue(DHTTransportUDPContactImpl contact,
                          DHTTransportReplyHandler handler,
                          byte[] key,
                          int max_values,
                          short flags)

getFullStats

protected DHTTransportFullStats getFullStats(DHTTransportUDPContactImpl contact)

registerTransferHandler

public void registerTransferHandler(byte[] handler_key,
                                    DHTTransportTransferHandler handler)
Specified by:
registerTransferHandler in interface DHTTransport

registerTransferHandler

public void registerTransferHandler(byte[] handler_key,
                                    DHTTransportTransferHandler handler,
                                    java.util.Map<java.lang.String,java.lang.Object> options)
Specified by:
registerTransferHandler in interface DHTTransport

unregisterTransferHandler

public void unregisterTransferHandler(byte[] handler_key,
                                      DHTTransportTransferHandler handler)
Specified by:
unregisterTransferHandler in interface DHTTransport

readTransfer

public byte[] readTransfer(DHTTransportProgressListener listener,
                           DHTTransportContact target,
                           byte[] handler_key,
                           byte[] key,
                           long timeout)
                    throws DHTTransportException
Specified by:
readTransfer in interface DHTTransport
Throws:
DHTTransportException

writeTransfer

public void writeTransfer(DHTTransportProgressListener listener,
                          DHTTransportContact target,
                          byte[] handler_key,
                          byte[] key,
                          byte[] data,
                          long timeout)
                   throws DHTTransportException
Specified by:
writeTransfer in interface DHTTransport
Throws:
DHTTransportException

writeReadTransfer

public byte[] writeReadTransfer(DHTTransportProgressListener listener,
                                DHTTransportContact target,
                                byte[] handler_key,
                                byte[] data,
                                long timeout)
                         throws DHTTransportException
Specified by:
writeReadTransfer in interface DHTTransport
Throws:
DHTTransportException

dataRequest

protected void dataRequest(DHTTransportUDPContactImpl originator,
                           DHTUDPPacketData req)

process

public void process(DHTUDPPacketRequest request,
                    boolean alien)
Specified by:
process in interface DHTUDPRequestHandler

process

public void process(DHTUDPPacketHandlerStub packet_handler_stub,
                    DHTUDPPacketRequest request,
                    boolean alien)
Specified by:
process in interface DHTUDPRequestHandler

getAlternativeNetwork

public DHTTransportAlternativeNetwork getAlternativeNetwork(int network_type)
Specified by:
getAlternativeNetwork in interface DHTTransportUDP

registerAlternativeNetwork

public void registerAlternativeNetwork(DHTTransportAlternativeNetwork network)
Specified by:
registerAlternativeNetwork in interface DHTTransportUDP

unregisterAlternativeNetwork

public void unregisterAlternativeNetwork(DHTTransportAlternativeNetwork network)
Specified by:
unregisterAlternativeNetwork in interface DHTTransportUDP

requestReceiveRequestProcessor

protected void requestReceiveRequestProcessor(DHTTransportUDPContactImpl contact,
                                              DHTUDPPacketRequest request)

requestReceiveReplyProcessor

protected void requestReceiveReplyProcessor(DHTTransportUDPContactImpl contact,
                                            DHTUDPPacketReply reply)

requestSendRequestProcessor

protected void requestSendRequestProcessor(DHTTransportUDPContactImpl contact,
                                           DHTUDPPacketRequest request)

requestSendReplyProcessor

protected void requestSendReplyProcessor(DHTTransportUDPContactImpl remote_contact,
                                         DHTTransportReplyHandler handler,
                                         DHTUDPPacketReply reply,
                                         long elapsed_time)
                                  throws DHTUDPPacketHandlerException
Returns false if this isn't an error reply, true if it is and a retry can be performed, throws an exception otherwise

Parameters:
reply -
Throws:
DHTUDPPacketHandlerException

getConnectionID

protected long getConnectionID()

supportsStorage

public boolean supportsStorage()
Specified by:
supportsStorage in interface DHTTransport

addListener

public void addListener(DHTTransportListener l)
Specified by:
addListener in interface DHTTransport

removeListener

public void removeListener(DHTTransportListener l)
Specified by:
removeListener in interface DHTTransport