Index: com/aelitis/azureus/core/dht/transport/udp/impl/packethandler/DHTUDPPacketNetworkHandler.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/packethandler/DHTUDPPacketNetworkHandler.java,v retrieving revision 1.4 diff -u -r1.4 DHTUDPPacketNetworkHandler.java --- com/aelitis/azureus/core/dht/transport/udp/impl/packethandler/DHTUDPPacketNetworkHandler.java 10 Feb 2006 03:42:44 -0000 1.4 +++ com/aelitis/azureus/core/dht/transport/udp/impl/packethandler/DHTUDPPacketNetworkHandler.java 23 Jun 2008 14:40:25 -0000 @@ -37,14 +37,17 @@ { private DHTUDPPacketHandlerFactory factory; private int port; + private boolean v6; protected DHTUDPPacketNetworkHandler( DHTUDPPacketHandlerFactory _factory, - int _port ) + int _port, + boolean _v6) { factory = _factory; port = _port; + v6 = _v6; } @@ -56,11 +59,11 @@ { if ( packet instanceof DHTUDPPacketRequest ){ - return( factory.getTransport( port, ((DHTUDPPacketRequest)packet).getNetwork())); + return( factory.getTransport( port, v6, ((DHTUDPPacketRequest)packet).getNetwork())); }else{ - return( factory.getTransport( port, ((DHTUDPPacketReply)packet).getNetwork())); + return( factory.getTransport( port, v6, ((DHTUDPPacketReply)packet).getNetwork())); } } @@ -70,6 +73,6 @@ { DHTUDPPacketRequest request = (DHTUDPPacketRequest)_request; - factory.process( port, request ); + factory.process( port, v6, request ); } } Index: com/aelitis/azureus/core/dht/transport/udp/impl/packethandler/DHTUDPPacketHandlerFactory.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/packethandler/DHTUDPPacketHandlerFactory.java,v retrieving revision 1.9 diff -u -r1.9 DHTUDPPacketHandlerFactory.java --- com/aelitis/azureus/core/dht/transport/udp/impl/packethandler/DHTUDPPacketHandlerFactory.java 11 Jan 2007 15:45:38 -0000 1.9 +++ com/aelitis/azureus/core/dht/transport/udp/impl/packethandler/DHTUDPPacketHandlerFactory.java 23 Jun 2008 14:40:25 -0000 @@ -30,6 +30,7 @@ import com.aelitis.azureus.core.dht.transport.udp.impl.DHTTransportUDPImpl; import com.aelitis.azureus.core.dht.transport.udp.impl.DHTUDPPacketRequest; +import com.aelitis.net.udp.uc.IntegerBoolean; import com.aelitis.net.udp.uc.PRUDPPacketHandler; import com.aelitis.net.udp.uc.PRUDPPacketHandlerFactory; @@ -65,21 +66,23 @@ this_mon.enter(); int port = transport.getPort(); + boolean v6 = transport.getV6(); int network = transport.getNetwork(); - Object[] port_details = (Object[])port_map.get( new Integer( port )); + Object[] port_details = (Object[])port_map.get( new IntegerBoolean( port, v6 )); if ( port_details == null ){ PRUDPPacketHandler packet_handler = PRUDPPacketHandlerFactory.getHandler( port, - new DHTUDPPacketNetworkHandler( this, port )); + v6, + new DHTUDPPacketNetworkHandler( this, port, v6 )); port_details = new Object[]{ packet_handler, new HashMap()}; - port_map.put( new Integer( port ), port_details ); + port_map.put( new IntegerBoolean( port, v6 ), port_details ); } Map network_map = (Map)port_details[1]; @@ -118,12 +121,13 @@ } int port = packet_handler.getPort(); + boolean v6 = packet_handler.getV6(); int network = handler.getNetwork(); try{ this_mon.enter(); - Object[] port_details = (Object[])port_map.remove( new Integer( port )); + Object[] port_details = (Object[])port_map.remove( new IntegerBoolean( port, v6 )); if ( port_details == null ){ @@ -143,6 +147,7 @@ protected void process( int port, + boolean v6, DHTUDPPacketRequest request ) { try{ @@ -155,11 +160,11 @@ } */ - Object[] port_details = (Object[])port_map.get( new Integer( port )); + Object[] port_details = (Object[])port_map.get( new IntegerBoolean( port, v6 )); if ( port_details == null ){ - throw( new IOException( "Port '" + port + "' not registered" )); + throw( new IOException( "Port '" + port + "'/" + v6 + " not registered" )); } Map network_map = (Map)port_details[1]; @@ -184,15 +189,16 @@ public DHTTransportUDPImpl getTransport( int port, + boolean v6, int network ) throws IOException { - Object[] port_details = (Object[])port_map.get( new Integer( port )); + Object[] port_details = (Object[])port_map.get( new IntegerBoolean( port, v6 )); if ( port_details == null ){ - throw( new IOException( "Port '" + port + "' not registered" )); + throw( new IOException( "Port '" + port + "'/" + v6 + " not registered" )); } Map network_map = (Map)port_details[1]; Index: com/aelitis/net/udp/uc/impl/PRUDPPacketHandlerImpl.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/net/udp/uc/impl/PRUDPPacketHandlerImpl.java,v retrieving revision 1.26 diff -u -r1.26 PRUDPPacketHandlerImpl.java --- com/aelitis/net/udp/uc/impl/PRUDPPacketHandlerImpl.java 20 Apr 2008 17:37:50 -0000 1.26 +++ com/aelitis/net/udp/uc/impl/PRUDPPacketHandlerImpl.java 23 Jun 2008 14:40:33 -0000 @@ -59,6 +59,7 @@ private static final long MAX_RECV_QUEUE_DATA_SIZE = 1*1024*1024; private int port; + private boolean v6; private DatagramSocket socket; private PRUDPPrimordialHandler primordial_handler; @@ -109,12 +110,14 @@ protected PRUDPPacketHandlerImpl( int _port, + boolean _v6, InetAddress _bind_ip ) { port = _port; + v6 = _v6; explicit_bind_ip = _bind_ip; - default_bind_ip = NetworkAdmin.getSingleton().getSingleHomedServiceBindAddress(); + default_bind_ip = NetworkAdmin.getSingleton().getSingleHomedServiceBindAddress(v6); calcBind(); @@ -201,6 +204,12 @@ return( port ); } + public boolean + getV6() + { + return( v6 ); + } + protected void setDefaultBindAddress( InetAddress address ) @@ -314,7 +323,7 @@ if ( target_bind_ip == null ){ - address = new InetSocketAddress("127.0.0.1",port); + address = new InetSocketAddress(v6?"::1":"127.0.0.1",port); new_socket = new DatagramSocket( port ); Index: com/aelitis/net/udp/uc/impl/PRUDPPacketHandlerFactoryImpl.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/net/udp/uc/impl/PRUDPPacketHandlerFactoryImpl.java,v retrieving revision 1.6 diff -u -r1.6 PRUDPPacketHandlerFactoryImpl.java --- com/aelitis/net/udp/uc/impl/PRUDPPacketHandlerFactoryImpl.java 29 Nov 2006 02:55:36 -0000 1.6 +++ com/aelitis/net/udp/uc/impl/PRUDPPacketHandlerFactoryImpl.java 23 Jun 2008 14:40:31 -0000 @@ -32,6 +32,7 @@ import org.gudy.azureus2.core3.util.AEMonitor; import org.gudy.azureus2.core3.util.Debug; +import com.aelitis.net.udp.uc.IntegerBoolean; import com.aelitis.net.udp.uc.PRUDPPacketHandler; import com.aelitis.net.udp.uc.PRUDPReleasablePacketHandler; import com.aelitis.net.udp.uc.PRUDPRequestHandler; @@ -48,10 +49,11 @@ public static PRUDPPacketHandler getHandler( int port, + boolean v6, InetAddress bind_ip, PRUDPRequestHandler request_handler) { - final Integer f_port = new Integer( port ); + final IntegerBoolean f_port = new IntegerBoolean( port, v6 ); try{ class_mon.enter(); @@ -62,7 +64,7 @@ if ( receiver == null ){ - receiver = new PRUDPPacketHandlerImpl( port, bind_ip ); + receiver = new PRUDPPacketHandlerImpl( port, v6, bind_ip ); receiver_map.put( f_port, receiver ); } @@ -88,9 +90,10 @@ public static PRUDPReleasablePacketHandler getReleasableHandler( int port, + boolean v6, PRUDPRequestHandler request_handler) { - final Integer f_port = new Integer( port ); + final IntegerBoolean f_port = new IntegerBoolean( port, v6 ); try{ class_mon.enter(); @@ -99,7 +102,7 @@ if ( receiver == null ){ - receiver = new PRUDPPacketHandlerImpl( port, null ); + receiver = new PRUDPPacketHandlerImpl( port, v6, null ); receiver_map.put( f_port, receiver ); } Index: com/aelitis/net/udp/uc/PRUDPPacketHandler.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/net/udp/uc/PRUDPPacketHandler.java,v retrieving revision 1.8 diff -u -r1.8 PRUDPPacketHandler.java --- com/aelitis/net/udp/uc/PRUDPPacketHandler.java 1 Feb 2008 19:32:04 -0000 1.8 +++ com/aelitis/net/udp/uc/PRUDPPacketHandler.java 23 Jun 2008 14:40:31 -0000 @@ -126,6 +126,9 @@ public int getPort(); + public boolean + getV6(); + public void setDelays( int send_delay, Index: com/aelitis/net/udp/uc/PRUDPPacketHandlerFactory.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/net/udp/uc/PRUDPPacketHandlerFactory.java,v retrieving revision 1.3 diff -u -r1.3 PRUDPPacketHandlerFactory.java --- com/aelitis/net/udp/uc/PRUDPPacketHandlerFactory.java 29 Nov 2006 02:55:36 -0000 1.3 +++ com/aelitis/net/udp/uc/PRUDPPacketHandlerFactory.java 23 Jun 2008 14:40:31 -0000 @@ -33,34 +33,52 @@ public class PRUDPPacketHandlerFactory { - public static PRUDPPacketHandler - getHandler( - int port ) - { - return( getHandler( port, null )); - } - - public static PRUDPPacketHandler + public static PRUDPPacketHandler + getHandler( + int port ) + { + return( getHandler( port, false, null )); + } + + public static PRUDPPacketHandler + getHandler( + int port, + boolean v6 ) + { + return( getHandler( port, v6, null )); + } + + public static PRUDPPacketHandler getHandler( int port, + boolean v6, PRUDPRequestHandler handler ) { - return( PRUDPPacketHandlerFactoryImpl.getHandler( port, null, handler )); + return( PRUDPPacketHandlerFactoryImpl.getHandler( port, v6, null, handler )); } public static PRUDPPacketHandler getHandler( int port, + boolean v6, InetAddress bind_ip, PRUDPRequestHandler handler ) { - return( PRUDPPacketHandlerFactoryImpl.getHandler( port, bind_ip, handler )); + return( PRUDPPacketHandlerFactoryImpl.getHandler( port, v6, bind_ip, handler )); } public static PRUDPReleasablePacketHandler getReleasableHandler( int port ) { - return( PRUDPPacketHandlerFactoryImpl.getReleasableHandler( port, null )); + return( getReleasableHandler( port, false )); } + + public static PRUDPReleasablePacketHandler + getReleasableHandler( + int port, + boolean v6 ) + { + return( PRUDPPacketHandlerFactoryImpl.getReleasableHandler( port, v6, null )); + } } Index: com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java,v retrieving revision 1.133 diff -u -r1.133 DHTTransportUDPImpl.java --- com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java 14 May 2008 22:58:17 -0000 1.133 +++ com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java 23 Jun 2008 14:40:24 -0000 @@ -437,7 +437,13 @@ { return( port ); } - + + public boolean + getV6() + { + return( v6 ); + } + public void setPort( int new_port ) Index: com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java,v retrieving revision 1.19 diff -u -r1.19 NetworkAdmin.java --- com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java 8 Feb 2008 20:21:37 -0000 1.19 +++ com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java 23 Jun 2008 14:40:25 -0000 @@ -58,7 +58,10 @@ public abstract InetAddress getSingleHomedServiceBindAddress(); - public abstract InetAddress[] + public abstract InetAddress + getSingleHomedServiceBindAddress(boolean v6); + + public abstract InetAddress[] getMultiHomedServiceBindAddresses(); public abstract InetAddress Index: com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java,v retrieving revision 1.35 diff -u -r1.35 NetworkAdminImpl.java --- com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java 8 Feb 2008 20:21:38 -0000 1.35 +++ com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java 23 Jun 2008 14:40:29 -0000 @@ -273,6 +273,11 @@ return currentBindIPs[0]; } + public InetAddress getSingleHomedServiceBindAddress(boolean v6) + { + return currentBindIPs[v6 && currentBindIPs.length > 1 ? 1 : 0]; + } + public InetAddress[] getAllBindAddresses() { Index: com/aelitis/azureus/core/versioncheck/VersionCheckClient.java =================================================================== RCS file: /cvsroot/azureus/azureus2/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java,v retrieving revision 1.79 diff -u -r1.79 VersionCheckClient.java --- com/aelitis/azureus/core/versioncheck/VersionCheckClient.java 14 Apr 2008 22:22:54 -0000 1.79 +++ com/aelitis/azureus/core/versioncheck/VersionCheckClient.java 23 Jun 2008 14:40:31 -0000 @@ -803,7 +803,7 @@ { String host = v6?UDP_SERVER_ADDRESS_V6:UDP_SERVER_ADDRESS_V4; - PRUDPReleasablePacketHandler handler = PRUDPPacketHandlerFactory.getReleasableHandler( bind_port ); + PRUDPReleasablePacketHandler handler = PRUDPPacketHandlerFactory.getReleasableHandler( bind_port, v6 ); PRUDPPacketHandler packet_handler = handler.getHandler(); Index: com/aelitis/net/udp/uc/IntegerBoolean.java =================================================================== RCS file: com/aelitis/net/udp/uc/IntegerBoolean.java diff -N com/aelitis/net/udp/uc/IntegerBoolean.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ com/aelitis/net/udp/uc/IntegerBoolean.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,43 @@ +package com.aelitis.net.udp.uc; + +import java.util.Map.Entry; + +public class IntegerBoolean implements Entry { + + private boolean b; + private int i; + + public IntegerBoolean(int _i, boolean _b) { + this.i = _i; + this.b = _b; + } + + public Object getKey() { + return new Integer ( i ); + } + + public Object getValue() { + return new Boolean( b ); + } + + public Object setValue(Object arg0) { + throw new UnsupportedOperationException(); + } + + public boolean equals(Object arg0) { + IntegerBoolean e1 = this; + IntegerBoolean e2 = (IntegerBoolean)arg0; + return + (e1.getKey()==null ? + e2.getKey()==null : e1.getKey().equals(e2.getKey())) && + (e1.getValue()==null ? + e2.getValue()==null : e1.getValue().equals(e2.getValue())); + } + + public int hashCode() { + return + (getKey()==null ? 0 : getKey().hashCode()) ^ + (getValue()==null ? 0 : getValue().hashCode()); + } + +}