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/03/12 09:46:57 UTC
svn commit: r636253 - in /mina/ftpserver/trunk/core/src/main:
java/org/apache/ftpserver/ java/org/apache/ftpserver/command/
java/org/apache/ftpserver/listener/mina/
resources/org/apache/ftpserver/message/
Author: ngn
Date: Wed Mar 12 01:46:53 2008
New Revision: 636253
URL: http://svn.apache.org/viewvc?rev=636253&view=rev
Log:
Serializing commands in a session to fix race conditions in command execution
Fixing broken message
Modified:
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java?rev=636253&r1=636252&r2=636253&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java Wed Mar 12 01:46:53 2008
@@ -76,7 +76,9 @@
if(command != null) {
- command.execute(ftpSession, context, request);
+ synchronized (session) {
+ command.execute(ftpSession, context, request);
+ }
}
else {
session.write(FtpReplyUtil.translate(ftpSession, request, context, FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED, "not.implemented", null));
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java?rev=636253&r1=636252&r2=636253&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java Wed Mar 12 01:46:53 2008
@@ -134,7 +134,7 @@
authenticatedUser = userManager.authenticate(auth);
} catch(AuthenticationFailedException e) {
authenticatedUser = null;
- LOG.warn("User failed to log in", e);
+ LOG.warn("User failed to log in");
}
catch(Exception e) {
authenticatedUser = null;
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java?rev=636253&r1=636252&r2=636253&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java Wed Mar 12 01:46:53 2008
@@ -21,6 +21,9 @@
import java.io.IOException;
import java.net.InetSocketAddress;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
import org.apache.ftpserver.FtpHandler;
import org.apache.ftpserver.interfaces.FtpServerContext;
@@ -30,6 +33,7 @@
import org.apache.ftpserver.ssl.SslConfiguration;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.filter.logging.MdcInjectionFilter;
import org.apache.mina.filter.ssl.SslFilter;
@@ -53,6 +57,8 @@
boolean suspended = false;
+ private ExecutorService filterExecutor = Executors.newCachedThreadPool();
+
/**
* @see Listener#start(FtpServerContext)
*/
@@ -75,11 +81,12 @@
MdcInjectionFilter mdcFilter = new MdcInjectionFilter();
acceptor.getFilterChain().addLast("mdcFilter", mdcFilter);
+ acceptor.getFilterChain().addLast("threadPool", new ExecutorFilter(filterExecutor));
acceptor.getFilterChain().addLast(
- "codec",
- new ProtocolCodecFilter( new FtpServerProtocolCodecFactory() ) );
-
+ "codec",
+ new ProtocolCodecFilter( new FtpServerProtocolCodecFactory() ) );
acceptor.getFilterChain().addLast("logger", new LoggingFilter() );
+
acceptor.getFilterChain().addLast("mdcFilter2", mdcFilter);
@@ -115,6 +122,16 @@
acceptor.dispose();
acceptor = null;
}
+
+ if(filterExecutor != null) {
+ filterExecutor.shutdown();
+ try {
+ filterExecutor.awaitTermination(5000, TimeUnit.MILLISECONDS);
+ } catch (InterruptedException e) {
+ } finally {
+// TODO: how to handle?
+ }
+ }
}
/**
@@ -153,4 +170,22 @@
acceptor.unbind(address);
}
}
+
+ /**
+ * Get the {@link ExecutorService} used for processing requests. The default
+ * value is a cached thread pool.
+ * @return The {@link ExecutorService}
+ */
+ public ExecutorService getFilterExecutor() {
+ return filterExecutor;
+ }
+
+ /**
+ * Set the {@link ExecutorService} used for processing requests
+ * @param filterExecutor The {@link ExecutorService}
+ */
+ public void setFilterExecutor(ExecutorService filterExecutor) {
+ this.filterExecutor = filterExecutor;
+ }
+
}
Modified: mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties?rev=636253&r1=636252&r2=636253&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties (original)
+++ mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties Wed Mar 12 01:46:53 2008
@@ -267,7 +267,7 @@
421.USER.anonymous=Maximum anonymous login limit has been reached.
421.USER.login=Maximum login limit has been reached.
331.USER.anonymous=Guest login okay, send your complete e-mail address as password.
-331.USER=User name okay, need password for {client.login.name}.
+331.USER=User name okay, need password for {output.msg}.
251.MD5={output.msg}
252.MMD5={output.msg}