You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2008/06/25 16:30:47 UTC

svn commit: r671562 - /mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpIoSession.java

Author: ngn
Date: Wed Jun 25 07:30:47 2008
New Revision: 671562

URL: http://svn.apache.org/viewvc?rev=671562&view=rev
Log:
Attempt to cache the peer remote address so that we have it after the socket gets closed

Modified:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpIoSession.java

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpIoSession.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpIoSession.java?rev=671562&r1=671561&r2=671562&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpIoSession.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpIoSession.java Wed Jun 25 07:30:47 2008
@@ -38,17 +38,17 @@
 import org.apache.ftpserver.ftplet.Structure;
 import org.apache.ftpserver.ftplet.User;
 import org.apache.ftpserver.listener.Listener;
-import org.apache.mina.common.future.CloseFuture;
-import org.apache.mina.common.session.IdleStatus;
 import org.apache.mina.common.filterchain.IoFilterChain;
+import org.apache.mina.common.future.CloseFuture;
+import org.apache.mina.common.future.ReadFuture;
+import org.apache.mina.common.future.WriteFuture;
 import org.apache.mina.common.service.IoHandler;
 import org.apache.mina.common.service.IoService;
+import org.apache.mina.common.service.TransportMetadata;
+import org.apache.mina.common.session.IdleStatus;
 import org.apache.mina.common.session.IoSession;
 import org.apache.mina.common.session.IoSessionConfig;
-import org.apache.mina.common.future.ReadFuture;
 import org.apache.mina.common.session.TrafficMask;
-import org.apache.mina.common.service.TransportMetadata;
-import org.apache.mina.common.future.WriteFuture;
 import org.apache.mina.common.write.WriteRequest;
 import org.apache.mina.filter.ssl.SslFilter;
 
@@ -57,21 +57,22 @@
     /**
      * Contains user name between USER and PASS commands
      */
-	public static final  String ATTRIBUTE_PREFIX = "org.apache.ftpserver.";
-	private static final  String ATTRIBUTE_USER_ARGUMENT 		= ATTRIBUTE_PREFIX + "user-argument";
-	private static final  String ATTRIBUTE_USER							= ATTRIBUTE_PREFIX + "user";
-	private static final  String ATTRIBUTE_LANGUAGE			 		= ATTRIBUTE_PREFIX + "language";
-	private static final  String ATTRIBUTE_LOGIN_TIME		 		= ATTRIBUTE_PREFIX + "login-time";
-	private static final  String ATTRIBUTE_DATA_CONNECTION	= ATTRIBUTE_PREFIX + "data-connection";
-	private static final  String ATTRIBUTE_FILE_SYSTEM		 		= ATTRIBUTE_PREFIX + "file-system";
-	private static final  String ATTRIBUTE_RENAME_FROM	 		= ATTRIBUTE_PREFIX + "rename-from";
-	private static final  String ATTRIBUTE_FILE_OFFSET		 		= ATTRIBUTE_PREFIX + "file-offset";
-	private static final  String ATTRIBUTE_DATA_TYPE			 		= ATTRIBUTE_PREFIX + "data-type";
-	private static final  String ATTRIBUTE_STRUCTURE		 		= ATTRIBUTE_PREFIX + "structure";
-	private static final  String ATTRIBUTE_FAILED_LOGINS	 		= ATTRIBUTE_PREFIX + "failed-logins";
-    private static final  String ATTRIBUTE_LISTENER			 		= ATTRIBUTE_PREFIX + "listener";
-    private static final Object ATTRIBUTE_MAX_IDLE_TIME 			= ATTRIBUTE_PREFIX + "max-idle-time";
-	private static final Object ATTRIBUTE_LAST_ACCESS_TIME 	= ATTRIBUTE_PREFIX + "last-access-time";
+	private static final String ATTRIBUTE_PREFIX = "org.apache.ftpserver.";
+	private static final String ATTRIBUTE_USER_ARGUMENT 		= ATTRIBUTE_PREFIX + "user-argument";
+	private static final String ATTRIBUTE_USER							= ATTRIBUTE_PREFIX + "user";
+	private static final String ATTRIBUTE_LANGUAGE			 		= ATTRIBUTE_PREFIX + "language";
+	private static final String ATTRIBUTE_LOGIN_TIME		 		= ATTRIBUTE_PREFIX + "login-time";
+	private static final String ATTRIBUTE_DATA_CONNECTION	= ATTRIBUTE_PREFIX + "data-connection";
+	private static final String ATTRIBUTE_FILE_SYSTEM		 		= ATTRIBUTE_PREFIX + "file-system";
+	private static final String ATTRIBUTE_RENAME_FROM	 		= ATTRIBUTE_PREFIX + "rename-from";
+	private static final String ATTRIBUTE_FILE_OFFSET		 		= ATTRIBUTE_PREFIX + "file-offset";
+	private static final String ATTRIBUTE_DATA_TYPE			 		= ATTRIBUTE_PREFIX + "data-type";
+	private static final String ATTRIBUTE_STRUCTURE		 		= ATTRIBUTE_PREFIX + "structure";
+	private static final String ATTRIBUTE_FAILED_LOGINS	 		= ATTRIBUTE_PREFIX + "failed-logins";
+    private static final String ATTRIBUTE_LISTENER			 		= ATTRIBUTE_PREFIX + "listener";
+    private static final String ATTRIBUTE_MAX_IDLE_TIME 			= ATTRIBUTE_PREFIX + "max-idle-time";
+	private static final String ATTRIBUTE_LAST_ACCESS_TIME 	= ATTRIBUTE_PREFIX + "last-access-time";
+	private static final String ATTRIBUTE_CACHED_REMOTE_ADDRESS     = ATTRIBUTE_PREFIX + "cached-remote-address";
 
 	private IoSession wrappedSession;
 	private FtpServerContext context;
@@ -286,7 +287,16 @@
 	 * @see IoSession#getRemoteAddress()
 	 */
 	public SocketAddress getRemoteAddress() {
-		return wrappedSession.getRemoteAddress();
+	    // when closing a socket, the remote address might be reset to null
+	    // therefore, we attempt to keep a cached copy around
+	    
+	    SocketAddress address = wrappedSession.getRemoteAddress();
+	    if(address == null && containsAttribute(ATTRIBUTE_CACHED_REMOTE_ADDRESS)) {
+	        return (SocketAddress) getAttribute(ATTRIBUTE_CACHED_REMOTE_ADDRESS);
+	    } else {
+	        setAttribute(ATTRIBUTE_CACHED_REMOTE_ADDRESS, address);
+	        return address;
+	    }
 	}
 
 	/**