You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/07/09 06:04:58 UTC

svn commit: r554521 - in /mina/branches: 1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/ 1.1/core/src/main/java/org/apache/mina/common/ 1.1/core/src/main/java/org/apache/mina/filter/codec/ 1.1/core/src/main/java/org/apache/mina/tra...

Author: trustin
Date: Sun Jul  8 21:04:55 2007
New Revision: 554521

URL: http://svn.apache.org/viewvc?view=rev&rev=554521
Log:
Fixed issue: DIRMINA-395 (DatagramSessionImpl getLocalAddress doesn't return the local address)
* Applied Adam's patch.  It seems like trunk is OK from this bug.


Modified:
    mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
    mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
    mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBuffer.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBufferProxy.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
    mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java Sun Jul  8 21:04:55 2007
@@ -226,10 +226,16 @@
             }
 
             // If a new session needs to be created.
+            // Note that the local address is the service address in the
+            // acceptor side, and I didn't call getLocalSocketAddress().
+            // This avoids strange cases where getLocalSocketAddress() on the
+            // underlying socket would return an IPv6 address while the
+            // specified service address is an IPv4 address.
             DatagramSessionImpl datagramSession = new DatagramSessionImpl(
-                    wrapper, this,
-                    req.config, ch, req.handler,
-                    req.address );
+                wrapper, this,
+                req.config, ch, req.handler,
+                req.address,
+                req.address );
             datagramSession.setRemoteAddress( remoteAddress );
             datagramSession.setSelectionKey( key );
             

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Sun Jul  8 21:04:55 2007
@@ -585,7 +585,8 @@
                     wrapper, this,
                     req.config,
                     req.channel, req.handler,
-                    req.channel.socket().getRemoteSocketAddress() );
+                    req.channel.socket().getRemoteSocketAddress(),
+                    req.channel.socket().getLocalSocketAddress());
             
             // AbstractIoFilterChain will notify the connect future.
             session.setAttribute( AbstractIoFilterChain.CONNECT_FUTURE, req );

Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Sun Jul  8 21:04:55 2007
@@ -69,7 +69,8 @@
                          DatagramService managerDelegate,
                          IoServiceConfig serviceConfig,
                          DatagramChannel ch, IoHandler defaultHandler,
-                         SocketAddress serviceAddress )
+                         SocketAddress serviceAddress,
+                         SocketAddress localAddress)
     {
         this.wrapperManager = wrapperManager;
         this.managerDelegate = managerDelegate;
@@ -79,10 +80,8 @@
         this.handler = defaultHandler;
         this.remoteAddress = ch.socket().getRemoteSocketAddress();
 
-        // We didn't set the localhost by calling getLocalSocketAddress() to avoid
-        // the case that getLocalSocketAddress() returns IPv6 address while
-        // serviceAddress represents the same address in IPv4.
-        this.localAddress = this.serviceAddress = serviceAddress;
+        this.serviceAddress = serviceAddress;
+        this.localAddress = localAddress;
         this.serviceConfig = serviceConfig;
 
         // Apply the initial session settings

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBuffer.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBuffer.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBuffer.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBuffer.java Sun Jul  8 21:04:55 2007
@@ -152,7 +152,7 @@
  * @noinspection StaticNonFinalField
  * @see ByteBufferAllocator
  */
-public abstract class ByteBuffer implements Comparable
+public abstract class ByteBuffer implements Comparable<ByteBuffer>
 {
     private static ByteBufferAllocator allocator = new PooledByteBufferAllocator();
 
@@ -614,9 +614,8 @@
         return true;
     }
 
-    public int compareTo( Object o )
+    public int compareTo( ByteBuffer that )
     {
-        ByteBuffer that = (ByteBuffer)o;
         int n = this.position() + Math.min( this.remaining(), that.remaining() );
         for( int i = this.position(), j = that.position(); i < n; i ++, j ++ )
         {
@@ -1644,7 +1643,7 @@
                 protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException
                 {
                     String className = readUTF();
-                    Class clazz = Class.forName( className, true, classLoader );
+                    Class<?> clazz = Class.forName( className, true, classLoader );
                     return ObjectStreamClass.lookup( clazz );
                 }
             };

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBufferProxy.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBufferProxy.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBufferProxy.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/common/ByteBufferProxy.java Sun Jul  8 21:04:55 2007
@@ -252,9 +252,9 @@
         return buf.equals( ob );
     }
 
-    public int compareTo( Object o )
+    public int compareTo( ByteBuffer that )
     {
-        return buf.compareTo( o );
+        return buf.compareTo( that );
     }
 
     public ByteOrder order()

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Sun Jul  8 21:04:55 2007
@@ -46,7 +46,7 @@
     
     private static final String DECODER_LOCK = ProtocolCodecFilter.class.getName() + ".decoderLock";
     
-    private static final Class[] EMPTY_PARAMS = new Class[0];
+    private static final Class<?>[] EMPTY_PARAMS = new Class[0];
     private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.wrap( new byte[0] );
 
     private final ProtocolCodecFactory factory;

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java Sun Jul  8 21:04:55 2007
@@ -217,9 +217,15 @@
             }
 
             // If a new session needs to be created.
+            // Note that the local address is the service address in the
+            // acceptor side, and I didn't call getLocalSocketAddress().
+            // This avoids strange cases where getLocalSocketAddress() on the
+            // underlying socket would return an IPv6 address while the
+            // specified service address is an IPv4 address.
             DatagramSessionImpl datagramSession = new DatagramSessionImpl(
                 wrapper, this,
                 req.config, ch, req.handler,
+                req.address,
                 req.address );
             datagramSession.setRemoteAddress( remoteAddress );
             datagramSession.setSelectionKey( key );

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Sun Jul  8 21:04:55 2007
@@ -545,7 +545,8 @@
                 wrapper, this,
                 req.config,
                 req.channel, req.handler,
-                req.channel.socket().getRemoteSocketAddress() );
+                req.channel.socket().getRemoteSocketAddress(),
+                req.channel.socket().getLocalSocketAddress());
 
             // AbstractIoFilterChain will notify the connect future.
             session.setAttribute( AbstractIoFilterChain.CONNECT_FUTURE, req );

Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?view=diff&rev=554521&r1=554520&r2=554521
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Sun Jul  8 21:04:55 2007
@@ -71,7 +71,8 @@
                          DatagramService managerDelegate,
                          IoServiceConfig serviceConfig,
                          DatagramChannel ch, IoHandler defaultHandler,
-                         SocketAddress serviceAddress )
+                         SocketAddress serviceAddress,
+                         SocketAddress localAddress)
     {
         this.wrapperManager = wrapperManager;
         this.managerDelegate = managerDelegate;
@@ -81,10 +82,8 @@
         this.handler = defaultHandler;
         this.remoteAddress = ch.socket().getRemoteSocketAddress();
 
-        // We didn't set the localhost by calling getLocalSocketAddress() to avoid
-        // the case that getLocalSocketAddress() returns IPv6 address while
-        // serviceAddress represents the same address in IPv4.
-        this.localAddress = this.serviceAddress = serviceAddress;
+        this.serviceAddress = serviceAddress;
+        this.localAddress = localAddress;
         this.serviceConfig = serviceConfig;
 
         // Apply the initial session settings