You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ftpserver-users@mina.apache.org by Pedro Silva <pe...@gmail.com> on 2012/03/20 16:50:35 UTC

Close control and data connection

Hi.

When I stop the server, the control connection is closed but data transfer
don't.
There is a way to close both connections?

I need to stop the server (the control and all the data being transfered).

Thanks.

Re: Close control and data connection

Posted by Niklas Gustavsson <ni...@protocol7.com>.
On Tue, Mar 20, 2012 at 4:50 PM, Pedro Silva <pe...@gmail.com> wrote:
> When I stop the server, the control connection is closed but data transfer
> don't.
> There is a way to close both connections?
>
> I need to stop the server (the control and all the data being transfered).

First, sorry for the slow reply.

Would the following patch work for you?


diff --git a/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java
b/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java
index 680bd19..254c255 100644
--- a/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java
+++ b/core/src/main/java/org/apache/ftpserver/impl/DefaultFtpServer.java
@@ -115,6 +115,11 @@ public class DefaultFtpServer implements FtpServer {
         // stop all listeners
         Map<String, Listener> listeners = serverContext.getListeners();
         for (Listener listener : listeners.values()) {
+            // close all sessions for this listener
+            for(FtpIoSession session : listener.getActiveSessions()) {
+                session.close();
+            }
+
             listener.stop();
         }

diff --git a/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java
b/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java
index 9f79c3a..609ef93 100644
--- a/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java
+++ b/core/src/main/java/org/apache/ftpserver/impl/FtpIoSession.java
@@ -127,6 +127,8 @@ public class FtpIoSession implements IoSession {
         * @see IoSession#close()
         */
        public CloseFuture close() {
+           closeDataConnection();
+
                return wrappedSession.close();
        }

@@ -134,9 +136,17 @@ public class FtpIoSession implements IoSession {
         * @see IoSession#close(boolean)
         */
        public CloseFuture close(boolean immediately) {
+           closeDataConnection();
+
                return wrappedSession.close(immediately);
        }

+       private void closeDataConnection() {
+        if (containsAttribute(ATTRIBUTE_DATA_CONNECTION)) {
+            ((ServerDataConnectionFactory)
getAttribute(ATTRIBUTE_DATA_CONNECTION)).closeDataConnection();
+        }
+       }
+
        /**
         * @see IoSession#containsAttribute(Object)
         */


/niklas