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