Update of /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28798/com/aelitis/azureus/core/dht/transport/udp/impl
Modified Files:
DHTTransportUDPImpl.java DHTUDPPacket.java
DHTUDPPacketRequestStore.java DHTUDPUtils.java
DHTTransportUDPContactImpl.java DHTUDPPacketReply.java
DHTUDPPacketRequestFindValue.java DHTUDPPacketRequest.java
DHTUDPPacketRequestFindNode.java
Log Message:
Index: DHTUDPPacket.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTUDPPacket.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- DHTUDPPacket.java 27 Jan 2005 22:53:27 -0000 1.4
+++ DHTUDPPacket.java 30 Jan 2005 14:28:58 -0000 1.5
@@ -25,9 +25,10 @@
import java.io.*;
import java.util.*;
-import org.gudy.azureus2.core3.logging.LGLogger;
+import org.gudy.azureus2.plugins.logging.LoggerChannel;
+import com.aelitis.azureus.core.dht.transport.udp.DHTTransportUDP;
import com.aelitis.net.udp.*;
@@ -39,7 +40,7 @@
public class
DHTUDPPacket
{
- public static final int VERSION = 2;
+ public static final byte VERSION = DHTTransportUDP.PROTOCOL_VERSION;
// these actions have to co-exist with the tracker ones when the connection
// is shared, hence 1024
@@ -58,8 +59,11 @@
private static boolean registered = false;
private static boolean version_fail_reported = false;
+ private static LoggerChannel logger;
+
protected static void
- registerCodecs()
+ registerCodecs(
+ LoggerChannel _logger )
{
if ( registered ){
@@ -67,6 +71,8 @@
}
registered = true;
+
+ logger = _logger;
PRUDPPacketRequestDecoder request_decoder =
new PRUDPPacketRequestDecoder()
@@ -190,11 +196,7 @@
version_fail_reported = true;
- // TODO: some idiot could annoy users by sending high version
- // packets - consider removing
-
- LGLogger.logUnrepeatableAlert(
- LGLogger.AT_ERROR,
+ logger.log(
"DHT protocol version is too old, please update Azureus" );
}
}
Index: DHTUDPUtils.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTUDPUtils.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- DHTUDPUtils.java 27 Jan 2005 22:53:27 -0000 1.9
+++ DHTUDPUtils.java 30 Jan 2005 14:28:58 -0000 1.10
@@ -73,13 +73,27 @@
protected static byte[]
deserialiseByteArray(
- DataInputStream is )
+ DataInputStream is,
+ int max_length )
throws IOException
{
- int len = is.readInt();
+ int len;
- if ( len > 1024 ){
+ if ( max_length < 256 ){
+
+ len = is.readByte()&0xff;
+
+ }else if ( max_length < 65536 ){
+
+ len = is.readShort()&0xffff;
+
+ }else{
+
+ len = is.readInt();
+ }
+
+ if ( len > max_length ){
throw( new IOException( "Invalid data length" ));
}
@@ -94,11 +108,30 @@
protected static void
serialiseByteArray(
DataOutputStream os,
- byte[] data )
+ byte[] data,
+ int max_length )
throws IOException
{
- os.writeInt( data.length );
+ int len = data.length;
+
+ if ( len > max_length ){
+
+ throw( new IOException( "Invalid data length" ));
+ }
+
+ if ( max_length < 256 ){
+
+ os.writeByte( len );
+
+ }else if ( max_length < 65536 ){
+
+ os.writeShort( len );
+
+ }else{
+
+ os.writeInt( len );
+ }
os.write( data );
}
@@ -110,7 +143,7 @@
throws IOException
{
- int len = is.readInt();
+ short len = is.readShort();
if ( len > 1024 ){
@@ -137,6 +170,22 @@
return( res );
}
+
+ protected static void
+ serialiseTransportValues(
+ DataOutputStream os,
+ DHTTransportValue[] values )
+
+ throws IOException, DHTTransportException
+ {
+ os.writeShort( values.length );
+
+ for (int i=0;i<values.length;i++){
+
+
+ serialiseTransportValue( os, values[i] );
+ }
+ }
protected static DHTTransportValue
deserialiseTransportValue(
@@ -149,7 +198,7 @@
final long created = is.readLong();
- final byte[] value_bytes = deserialiseByteArray( is );
+ final byte[] value_bytes = deserialiseByteArray( is, 256 );
final DHTTransportContact originator = deserialiseContact( transport, is );
@@ -199,22 +248,6 @@
}
protected static void
- serialiseTransportValues(
- DataOutputStream os,
- DHTTransportValue[] values )
-
- throws IOException, DHTTransportException
- {
- os.writeInt( values.length );
-
- for (int i=0;i<values.length;i++){
-
-
- serialiseTransportValue( os, values[i] );
- }
- }
-
- protected static void
serialiseTransportValue(
DataOutputStream os,
DHTTransportValue value )
@@ -225,7 +258,7 @@
os.writeLong( value.getCreationTime());
- serialiseByteArray( os, value.getValue());
+ serialiseByteArray( os, value.getValue(), 256 );
serialiseContact( os, value.getOriginator());
@@ -239,7 +272,7 @@
throws IOException
{
- os.writeInt( contacts.length );
+ os.writeShort( contacts.length );
for (int i=0;i<contacts.length;i++){
@@ -264,7 +297,7 @@
throws IOException
{
- int len = is.readInt();
+ short len = is.readShort();
if ( len > 1024 ){
@@ -303,6 +336,8 @@
os.writeByte( CT_UDP );
+ os.writeByte( contact.getProtocolVersion());
+
DHTTransportUDPContactImpl c = (DHTTransportUDPContactImpl)contact;
serialiseAddress( os, c.getExternalAddress() );
@@ -327,12 +362,14 @@
throw( new IOException( "Unsupported contact type:" + ct ));
}
+ byte version = is.readByte();
+
// we don't transport instance ids around via this route as they are just
// cached versions and not useful
InetSocketAddress external_address = deserialiseAddress( is );
- return( new DHTTransportUDPContactImpl( transport, external_address, external_address, 0 ));
+ return( new DHTTransportUDPContactImpl( transport, external_address, external_address, version, 0 ));
}
@@ -352,7 +389,7 @@
throw( new DHTTransportException( "Address '" + address + "' is unresolved" ));
}
- serialiseByteArray( os, ia.getAddress());
+ serialiseByteArray( os, ia.getAddress(), 16);
os.writeShort( address.getPort());
}
@@ -363,7 +400,7 @@
throws IOException
{
- byte[] bytes = deserialiseByteArray( is );
+ byte[] bytes = deserialiseByteArray( is, 16 );
int port = is.readShort()&0xffff;
Index: DHTTransportUDPImpl.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- DHTTransportUDPImpl.java 29 Jan 2005 21:03:28 -0000 1.17
+++ DHTTransportUDPImpl.java 30 Jan 2005 14:28:58 -0000 1.18
@@ -55,12 +55,7 @@
implements DHTTransportUDP, PRUDPRequestHandler
{
public static boolean TEST_EXTERNAL_IP = false;
-
- static{
- DHTUDPPacket.registerCodecs();
- }
-
private static String external_address;
@@ -118,6 +113,8 @@
request_timeout = _timeout;
logger = _logger;
+ DHTUDPPacket.registerCodecs( logger );
+
// DHTPRUDPPacket relies on the request-handler being an instanceof THIS so watch out
// if you change it :)
@@ -134,7 +131,7 @@
logger.log( "Initial external address: " + address );
- local_contact = new DHTTransportUDPContactImpl( this, address, address, random.nextInt());
+ local_contact = new DHTTransportUDPContactImpl( this, address, address, DHTUDPPacket.VERSION, random.nextInt());
}
public void
@@ -142,7 +139,7 @@
throws DHTTransportException
{
- local_contact = new DHTTransportUDPContactImpl( this, local_contact.getTransportAddress(), local_contact.getExternalAddress(), random.nextInt());
+ local_contact = new DHTTransportUDPContactImpl( this, local_contact.getTransportAddress(), local_contact.getExternalAddress(), DHTUDPPacket.VERSION, random.nextInt());
}
public void
@@ -160,7 +157,7 @@
InetSocketAddress address = new InetSocketAddress( external_address, port );
- local_contact = new DHTTransportUDPContactImpl( this, address, address, local_contact.getInstanceID());
+ local_contact = new DHTTransportUDPContactImpl( this, address, address, DHTUDPPacket.VERSION, local_contact.getInstanceID());
for (int i=0;i<listeners.size();i++){
@@ -472,7 +469,7 @@
logger.log( "External address changed: " + s_address );
- local_contact = new DHTTransportUDPContactImpl( this, s_address, s_address, random.nextInt());
+ local_contact = new DHTTransportUDPContactImpl( this, s_address, s_address, DHTUDPPacket.VERSION, random.nextInt());
for (int i=0;i<listeners.size();i++){
@@ -533,13 +530,14 @@
public DHTTransportContact
importContact(
- InetSocketAddress address )
+ InetSocketAddress address,
+ byte protocol_version )
throws DHTTransportException
{
// instance id of 0 means "unknown"
- DHTTransportContact contact = new DHTTransportUDPContactImpl( this, address, address, 0 );
+ DHTTransportContact contact = new DHTTransportUDPContactImpl( this, address, address, protocol_version, 0 );
request_handler.contactImported( contact );
@@ -1167,7 +1165,13 @@
InetSocketAddress transport_address = request.getAddress();
- DHTTransportUDPContactImpl originating_contact = new DHTTransportUDPContactImpl( this, transport_address, request.getOriginatorAddress(), request.getOriginatorInstanceID());
+ DHTTransportUDPContactImpl originating_contact =
+ new DHTTransportUDPContactImpl(
+ this,
+ transport_address,
+ request.getOriginatorAddress(),
+ request.getVersion(),
+ request.getOriginatorInstanceID());
try{
checkAddress( originating_contact );
Index: DHTUDPPacketReply.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTUDPPacketReply.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- DHTUDPPacketReply.java 27 Jan 2005 22:53:27 -0000 1.3
+++ DHTUDPPacketReply.java 30 Jan 2005 14:28:58 -0000 1.4
@@ -39,7 +39,7 @@
extends PRUDPPacketReply
{
private long connection_id;
- private int version;
+ private byte version;
private int target_instance_id;
public
@@ -70,7 +70,7 @@
connection_id = _is.readLong();
- version = _is.readShort();
+ version = _is.readByte();
DHTUDPPacket.checkVersion( version );
@@ -89,7 +89,7 @@
return( connection_id );
}
- public int
+ public byte
getVersion()
{
return( version );
@@ -105,7 +105,7 @@
os.writeLong( connection_id );
- os.writeShort( version );
+ os.writeByte( version );
os.writeInt( target_instance_id );
}
Index: DHTUDPPacketRequestStore.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTUDPPacketRequestStore.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- DHTUDPPacketRequestStore.java 27 Jan 2005 22:53:27 -0000 1.5
+++ DHTUDPPacketRequestStore.java 30 Jan 2005 14:28:58 -0000 1.6
@@ -40,7 +40,7 @@
extends DHTUDPPacketRequest
{
private byte[] key;
- private DHTTransportValue value;
+ private DHTTransportValue[] values;
public
DHTUDPPacketRequestStore(
@@ -61,15 +61,9 @@
{
super( is, DHTUDPPacket.ACT_REQUEST_STORE, con_id, trans_id );
- key = DHTUDPUtils.deserialiseByteArray( is );
+ key = DHTUDPUtils.deserialiseByteArray( is, 64 );
- try{
- value = DHTUDPUtils.deserialiseTransportValue( transport, is );
-
- }catch( DHTTransportException e ){
-
- throw( new IOException( e.getMessage()));
- }
+ values = DHTUDPUtils.deserialiseTransportValues( transport, is );
}
public void
@@ -80,10 +74,10 @@
{
super.serialise(os);
- DHTUDPUtils.serialiseByteArray( os, key );
+ DHTUDPUtils.serialiseByteArray( os, key, 64 );
try{
- DHTUDPUtils.serialiseTransportValue( os, value );
+ DHTUDPUtils.serialiseTransportValues( os, values );
}catch( DHTTransportException e ){
@@ -95,13 +89,18 @@
setValue(
DHTTransportValue _value )
{
- value = _value;
+ values = new DHTTransportValue[]{ _value };
}
protected DHTTransportValue
getValue()
{
- return( value );
+ if ( values == null || values.length == 0 ){
+
+ return( null );
+ }
+
+ return( values[0] );
}
protected void
Index: DHTTransportUDPContactImpl.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPContactImpl.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- DHTTransportUDPContactImpl.java 29 Jan 2005 21:03:28 -0000 1.9
+++ DHTTransportUDPContactImpl.java 30 Jan 2005 14:28:58 -0000 1.10
@@ -27,6 +27,7 @@
import java.net.InetSocketAddress;
+import com.aelitis.azureus.core.dht.impl.DHTLog;
import com.aelitis.azureus.core.dht.transport.*;
import com.aelitis.azureus.core.dht.transport.udp.*;
@@ -44,6 +45,7 @@
private InetSocketAddress transport_address;
private byte[] id;
+ private byte protocol_version;
private int instance_id;
protected
@@ -51,6 +53,7 @@
DHTTransportUDPImpl _transport,
InetSocketAddress _transport_address,
InetSocketAddress _external_address,
+ byte _protocol_version,
int _instance_id )
throws DHTTransportException
@@ -58,6 +61,7 @@
transport = _transport;
transport_address = _transport_address;
external_address = _external_address;
+ protocol_version = _protocol_version;
if ( transport_address.equals( external_address )){
@@ -73,6 +77,12 @@
}
}
+ public byte
+ getProtocolVersion()
+ {
+ return( protocol_version );
+ }
+
protected boolean
isValid()
{
@@ -173,9 +183,9 @@
{
if ( transport_address.equals( external_address )){
- return( transport_address.toString());
+ return( DHTLog.getString2(id) + "["+transport_address.toString()+"]");
}
- return( "tran="+transport_address.toString()+",ext="+external_address);
+ return( DHTLog.getString2(id) + "[tran="+transport_address.toString()+",ext="+external_address+"]");
}
}
Index: DHTUDPPacketRequestFindNode.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTUDPPacketRequestFindNode.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- DHTUDPPacketRequestFindNode.java 27 Jan 2005 22:53:27 -0000 1.5
+++ DHTUDPPacketRequestFindNode.java 30 Jan 2005 14:28:58 -0000 1.6
@@ -56,7 +56,7 @@
{
super( is, DHTUDPPacket.ACT_REQUEST_FIND_NODE, con_id, trans_id );
- id = DHTUDPUtils.deserialiseByteArray( is );
+ id = DHTUDPUtils.deserialiseByteArray( is, 64 );
}
public void
@@ -67,7 +67,7 @@
{
super.serialise(os);
- DHTUDPUtils.serialiseByteArray( os, id );
+ DHTUDPUtils.serialiseByteArray( os, id, 64 );
}
protected void
Index: DHTUDPPacketRequest.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTUDPPacketRequest.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- DHTUDPPacketRequest.java 27 Jan 2005 22:53:27 -0000 1.5
+++ DHTUDPPacketRequest.java 30 Jan 2005 14:28:58 -0000 1.6
@@ -27,6 +27,8 @@
import java.io.IOException;
import java.net.InetSocketAddress;
+import org.gudy.azureus2.core3.util.SystemTime;
+
import com.aelitis.azureus.core.dht.transport.DHTTransportException;
import com.aelitis.net.udp.PRUDPPacketRequest;
@@ -39,7 +41,8 @@
DHTUDPPacketRequest
extends PRUDPPacketRequest
{
- private short version;
+ private byte version;
+ private long originator_time;
private InetSocketAddress originator_address;
private int originator_instance_id;
@@ -55,6 +58,7 @@
originator_address = _contact.getExternalAddress();
originator_instance_id = _contact.getInstanceID();
+ originator_time = SystemTime.getCurrentTime();
}
protected
@@ -68,16 +72,18 @@
{
super( type, con_id, trans_id );
- version = is.readShort();
+ version = is.readByte();
DHTUDPPacket.checkVersion( version );
originator_address = DHTUDPUtils.deserialiseAddress( is );
originator_instance_id = is.readInt();
+
+ originator_time = is.readLong();
}
- protected int
+ protected byte
getVersion()
{
return( version );
@@ -110,7 +116,7 @@
{
super.serialise(os);
- os.writeShort( version );
+ os.writeByte( version );
try{
DHTUDPUtils.serialiseAddress( os, originator_address );
@@ -121,5 +127,7 @@
}
os.writeInt( originator_instance_id );
+
+ os.writeLong( originator_time );
}
}
Index: DHTUDPPacketRequestFindValue.java
===================================================================
RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTUDPPacketRequestFindValue.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- DHTUDPPacketRequestFindValue.java 27 Jan 2005 22:53:27 -0000 1.5
+++ DHTUDPPacketRequestFindValue.java 30 Jan 2005 14:28:58 -0000 1.6
@@ -57,7 +57,7 @@
{
super( is, DHTUDPPacket.ACT_REQUEST_FIND_VALUE, con_id, trans_id );
- id = DHTUDPUtils.deserialiseByteArray( is );
+ id = DHTUDPUtils.deserialiseByteArray( is, 64 );
flags = is.readByte();
}
@@ -70,7 +70,7 @@
{
super.serialise(os);
- DHTUDPUtils.serialiseByteArray( os, id );
+ DHTUDPUtils.serialiseByteArray( os, id, 64 );
os.writeByte( flags );
}
|