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/20 21:49:22 UTC

svn commit: r639449 - in /mina/ftpserver/trunk/core/src: main/java/org/apache/ftpserver/ main/java/org/apache/ftpserver/command/ main/java/org/apache/ftpserver/interfaces/ main/java/org/apache/ftpserver/listener/ main/java/org/apache/ftpserver/listener...

Author: ngn
Date: Thu Mar 20 13:49:20 2008
New Revision: 639449

URL: http://svn.apache.org/viewvc?rev=639449&view=rev
Log:
Removing the old Connection related classes, their behavior is now handled by MINA (like idle control).

Added:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultConnectionConfig.java
Removed:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/AbstractConnection.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/Connection.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ConnectionManager.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ConnectionManagerImpl.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/ConnectionManagerObserver.java
Modified:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConfigurableFtpServerContext.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpServerContext.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/listener/mina/MinaListener.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConfigurableFtpServerContext.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConfigurableFtpServerContext.java?rev=639449&r1=639448&r2=639449&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConfigurableFtpServerContext.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConfigurableFtpServerContext.java Thu Mar 20 13:49:20 2008
@@ -40,8 +40,6 @@
 import org.apache.ftpserver.interfaces.IpRestrictor;
 import org.apache.ftpserver.interfaces.MessageResource;
 import org.apache.ftpserver.iprestrictor.FileIpRestrictor;
-import org.apache.ftpserver.listener.ConnectionManager;
-import org.apache.ftpserver.listener.ConnectionManagerImpl;
 import org.apache.ftpserver.listener.Listener;
 import org.apache.ftpserver.listener.mina.MinaListener;
 import org.apache.ftpserver.message.MessageResourceImpl;
@@ -62,15 +60,16 @@
     private final Logger LOG = LoggerFactory.getLogger(ConfigurableFtpServerContext.class);
     
     private Bean messageResourceBean;
-    private Bean connectionManagerBean;
     private Bean ipRestrictorBean;
     private Bean userManagerBean;
     private Bean fileSystemManagerBean;
     private Bean ftpletContainerBean;
     private Bean statisticsBean;
     private Bean commandFactoryBean;
+    private Bean connectionConfigBean;
     
     private Map<String, Bean> listeners = new HashMap<String, Bean>();
+
     
     private static final Authority[] ADMIN_AUTHORITIES = new Authority[]{
         new WritePermission()
@@ -92,12 +91,12 @@
             
             // create all the components
             messageResourceBean   = createComponent(conf, "message",             MessageResourceImpl.class.getName());
-            connectionManagerBean = createComponent(conf, "connection-manager",  ConnectionManagerImpl.class.getName());
             ipRestrictorBean      = createComponent(conf, "ip-restrictor",       FileIpRestrictor.class.getName());
             userManagerBean       = createComponent(conf, "user-manager",        PropertiesUserManager.class.getName());
             fileSystemManagerBean = createComponent(conf, "file-system-manager", NativeFileSystemManager.class.getName());
             statisticsBean        = createComponent(conf, "statistics",          FtpStatisticsImpl.class.getName());
             commandFactoryBean    = createComponent(conf, "command-factory",     DefaultCommandFactory.class.getName());
+            connectionConfigBean    = createComponent(conf, "connection-config", DefaultConnectionConfig.class.getName());
             
             // create user if necessary
             boolean userCreate = conf.getBoolean("create-default-user", true);
@@ -249,13 +248,6 @@
     public IpRestrictor getIpRestrictor() {
         return (IpRestrictor) ipRestrictorBean.getBean();
     }
-     
-    /**
-     * Get connection manager.
-     */
-    public ConnectionManager getConnectionManager() {
-        return (ConnectionManager) connectionManagerBean.getBean();
-    } 
     
     /**
      * Get file system manager.
@@ -310,10 +302,6 @@
             listenerBean.destroyBean();
         }
         
-        if(connectionManagerBean != null && connectionManagerBean.getBean() != null) {
-            connectionManagerBean.destroyBean();
-        }
-        
         if(ftpletContainerBean != null && ftpletContainerBean.getBean() != null) {
             ftpletContainerBean.destroyBean();
         }
@@ -367,4 +355,8 @@
         
         return listenerArray;
     }
+
+	public ConnectionConfig getConnectionConfig() {
+		return (ConnectionConfig) connectionConfigBean.getBean();
+	}
 } 

Added: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java?rev=639449&view=auto
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java (added)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ConnectionConfig.java Thu Mar 20 13:49:20 2008
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */  
+
+package org.apache.ftpserver;
+
+public interface ConnectionConfig {
+
+	int getMaxLoginFailures();
+	
+	int getLoginFailureDelay();
+	
+	int getMaxAnonymousLogins();
+	
+	int getMaxLogins();
+	
+	boolean isAnonymousLoginEnabled();
+}

Added: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultConnectionConfig.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultConnectionConfig.java?rev=639449&view=auto
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultConnectionConfig.java (added)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultConnectionConfig.java Thu Mar 20 13:49:20 2008
@@ -0,0 +1,30 @@
+package org.apache.ftpserver;
+
+public class DefaultConnectionConfig implements ConnectionConfig {
+
+	public int getLoginFailureDelay() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public int getMaxAnonymousLogins() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public int getMaxLoginFailures() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public int getMaxLogins() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public boolean isAnonymousLoginEnabled() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+}

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java?rev=639449&r1=639448&r2=639449&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java Thu Mar 20 13:49:20 2008
@@ -19,7 +19,6 @@
 
 package org.apache.ftpserver;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -40,8 +39,6 @@
 import org.apache.ftpserver.interfaces.IpRestrictor;
 import org.apache.ftpserver.interfaces.MessageResource;
 import org.apache.ftpserver.iprestrictor.FileIpRestrictor;
-import org.apache.ftpserver.listener.ConnectionManager;
-import org.apache.ftpserver.listener.ConnectionManagerImpl;
 import org.apache.ftpserver.listener.Listener;
 import org.apache.ftpserver.listener.mina.MinaListener;
 import org.apache.ftpserver.message.MessageResourceImpl;
@@ -62,13 +59,13 @@
     private final Logger LOG = LoggerFactory.getLogger(DefaultFtpServerContext.class);
     
     private MessageResource messageResource;
-    private ConnectionManager connectionManager;
     private IpRestrictor ipRestrictor;
     private UserManager userManager;
     private FileSystemManager fileSystemManager;
     private FtpletContainer ftpletContainer;
     private FtpStatistics statistics;
     private CommandFactory commandFactory;
+    private ConnectionConfig connectionConfig = new DefaultConnectionConfig();
     
     private Map<String, Listener> listeners = new HashMap<String, Listener>();
     
@@ -97,9 +94,6 @@
             messageResource = new MessageResourceImpl();
             ((MessageResourceImpl)messageResource).configure(EmptyConfiguration.INSTANCE);
             
-            connectionManager = new ConnectionManagerImpl();
-            ((ConnectionManagerImpl)connectionManager).configure(EmptyConfiguration.INSTANCE);
-            
             ipRestrictor = new FileIpRestrictor();
             ((FileIpRestrictor)ipRestrictor).configure(EmptyConfiguration.INSTANCE);
             
@@ -188,13 +182,6 @@
     }
      
     /**
-     * Get connection manager.
-     */
-    public ConnectionManager getConnectionManager() {
-        return connectionManager;
-    } 
-    
-    /**
      * Get file system manager.
      */
     public FileSystemManager getFileSystemManager() {
@@ -258,10 +245,6 @@
 //        }
 
         
-        if(connectionManager != null && connectionManager instanceof Component) {
-            ((Component)connectionManager).dispose();
-        }
-        
         if(ftpletContainer != null && ftpletContainer instanceof Component) {
             ((Component)ftpletContainer).dispose();
         }
@@ -318,9 +301,6 @@
     public void setCommandFactory(CommandFactory commandFactory) {
         this.commandFactory = commandFactory;
     }
-    public void setConnectionManager(ConnectionManager connectionManager) {
-        this.connectionManager = connectionManager;
-    }
     public void setFileSystemManager(FileSystemManager fileSystemManager) {
         this.fileSystemManager = fileSystemManager;
     }
@@ -336,4 +316,12 @@
     public void setUserManager(UserManager userManager) {
         this.userManager = userManager;
     }
+
+	public ConnectionConfig getConnectionConfig() {
+		return connectionConfig;
+	}
+	
+	public void setConnectionConfig(ConnectionConfig connectionConfig) {
+		this.connectionConfig = connectionConfig;
+	}
 } 

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=639449&r1=639448&r2=639449&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 Thu Mar 20 13:49:20 2008
@@ -36,7 +36,6 @@
 import org.apache.ftpserver.interfaces.FtpIoSession;
 import org.apache.ftpserver.interfaces.FtpServerContext;
 import org.apache.ftpserver.interfaces.ServerFtpStatistics;
-import org.apache.ftpserver.listener.ConnectionManager;
 import org.apache.ftpserver.usermanager.AnonymousAuthentication;
 import org.apache.ftpserver.usermanager.UserMetadata;
 import org.apache.ftpserver.usermanager.UsernamePasswordAuthentication;
@@ -65,7 +64,6 @@
     
         boolean success = false;
         
-        ConnectionManager conManager = context.getConnectionManager();
         ServerFtpStatistics stat = (ServerFtpStatistics)context.getFtpStatistics();
         try {
             
@@ -98,7 +96,7 @@
             boolean anonymous = userName != null && userName.equals("anonymous");
             if(anonymous) {
 	            int currAnonLogin = stat.getCurrentAnonymousLoginNumber();
-	            int maxAnonLogin = conManager.getMaxAnonymousLogins();
+	            int maxAnonLogin = context.getConnectionConfig().getMaxAnonymousLogins();
 	            if( currAnonLogin >= maxAnonLogin ) {
 	                session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_421_SERVICE_NOT_AVAILABLE_CLOSING_CONTROL_CONNECTION, "PASS.anonymous", null));
 	                return;
@@ -107,7 +105,7 @@
 	            
             // login limit check
             int currLogin = stat.getCurrentLoginNumber();
-            int maxLogin = conManager.getMaxLogins();
+            int maxLogin = context.getConnectionConfig().getMaxLogins();
             if(maxLogin != 0 && currLogin >= maxLogin) {
                 session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_421_SERVICE_NOT_AVAILABLE_CLOSING_CONTROL_CONNECTION, "PASS.login", null));
                 return;
@@ -182,7 +180,7 @@
                 session.setUserArgument(oldUserArgument);
                 session.setMaxIdleTime(oldMaxIdleTime);
 
-                delayAfterLoginFailure(conManager);
+                delayAfterLoginFailure(context.getConnectionConfig().getLoginFailureDelay());
                 
                 LOG.warn("Login failure - " + userName);
                 session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_530_NOT_LOGGED_IN, "PASS", userName));
@@ -191,7 +189,7 @@
                 session.increaseFailedLogins();
 
                 // kick the user if the max number of failed logins is reached
-                int maxAllowedLoginFailues = conManager.getMaxLoginFailures(); 
+                int maxAllowedLoginFailues = context.getConnectionConfig().getMaxLoginFailures(); 
                 if(maxAllowedLoginFailues != 0 && 
                         session.getFailedLogins() >= maxAllowedLoginFailues) {
                     session.closeOnFlush().awaitUninterruptibly(10000);
@@ -225,8 +223,7 @@
         }
     }
 
-    private void delayAfterLoginFailure(ConnectionManager conManager) {
-        int loginFailureDelay = conManager.getLoginFailureDelay();
+    private void delayAfterLoginFailure(int loginFailureDelay) {
         
         if(loginFailureDelay > 0) {
             LOG.debug("Waiting for " + loginFailureDelay + " milliseconds due to login failure");

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java?rev=639449&r1=639448&r2=639449&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java Thu Mar 20 13:49:20 2008
@@ -30,7 +30,6 @@
 import org.apache.ftpserver.interfaces.FtpIoSession;
 import org.apache.ftpserver.interfaces.FtpServerContext;
 import org.apache.ftpserver.interfaces.ServerFtpStatistics;
-import org.apache.ftpserver.listener.ConnectionManager;
 import org.apache.ftpserver.usermanager.BaseUser;
 import org.apache.ftpserver.usermanager.ConcurrentLoginRequest;
 import org.apache.ftpserver.util.FtpReplyUtil;
@@ -56,7 +55,6 @@
                         FtpRequest request) throws IOException, FtpException {
     
         boolean success = false;
-        ConnectionManager conManager = context.getConnectionManager();
         ServerFtpStatistics stat = (ServerFtpStatistics)context.getFtpStatistics();
         try {
             
@@ -88,14 +86,14 @@
             
             // anonymous login is not enabled
             boolean anonymous = userName.equals("anonymous");
-            if( anonymous && (!conManager.isAnonymousLoginEnabled()) ) {
+            if( anonymous && (!context.getConnectionConfig().isAnonymousLoginEnabled()) ) {
                 session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_530_NOT_LOGGED_IN, "USER.anonymous", null));
                 return;
             }
             
             // anonymous login limit check
             int currAnonLogin = stat.getCurrentAnonymousLoginNumber();
-            int maxAnonLogin = conManager.getMaxAnonymousLogins();
+            int maxAnonLogin = context.getConnectionConfig().getMaxAnonymousLogins();
             if( anonymous && (currAnonLogin >= maxAnonLogin) ) {
                 session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_421_SERVICE_NOT_AVAILABLE_CLOSING_CONTROL_CONNECTION, "USER.anonymous", null));
                 return;
@@ -103,7 +101,7 @@
             
             // login limit check
             int currLogin = stat.getCurrentLoginNumber();
-            int maxLogin = conManager.getMaxLogins();
+            int maxLogin = context.getConnectionConfig().getMaxLogins();
             if(maxLogin != 0 && currLogin >= maxLogin) {
             	session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_421_SERVICE_NOT_AVAILABLE_CLOSING_CONTROL_CONNECTION, "USER.login", null));
                 return;

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpServerContext.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpServerContext.java?rev=639449&r1=639448&r2=639449&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpServerContext.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/interfaces/FtpServerContext.java Thu Mar 20 13:49:20 2008
@@ -19,9 +19,9 @@
 
 package org.apache.ftpserver.interfaces;
 
+import org.apache.ftpserver.ConnectionConfig;
 import org.apache.ftpserver.ftplet.Ftplet;
 import org.apache.ftpserver.ftplet.FtpletContext;
-import org.apache.ftpserver.listener.ConnectionManager;
 import org.apache.ftpserver.listener.Listener;
 
 /**
@@ -31,11 +31,8 @@
 public 
 interface FtpServerContext extends FtpletContext {
 
-    /**
-     * Get connection manager.
-     */
-    ConnectionManager getConnectionManager();
-    
+	ConnectionConfig getConnectionConfig();
+	
     /**
      * Get message resource.
      */

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=639449&r1=639448&r2=639449&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 Thu Mar 20 13:49:20 2008
@@ -61,8 +61,18 @@
     private ExecutorService filterExecutor = Executors.newCachedThreadPool();
 
 	private FtpHandler handler = new DefaultFtpHandler();
+	
+	private int idleTimeout = 60;
 
 
+	public int getIdleTimeout() {
+		return idleTimeout;
+	}
+
+	public void setIdleTimeout(int idleTimeout) {
+		this.idleTimeout = idleTimeout;
+	}
+
 	/**
      * @see Listener#start(FtpServerContext)
      */
@@ -78,7 +88,7 @@
         
         acceptor.setReuseAddress(true);
         acceptor.getSessionConfig().setReadBufferSize( 2048 );
-        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 120 );
+        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, idleTimeout );
         // Decrease the default receiver buffer size
         ((SocketSessionConfig) acceptor.getSessionConfig()).setReceiveBufferSize(512); 
 

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java?rev=639449&r1=639448&r2=639449&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java Thu Mar 20 13:49:20 2008
@@ -19,48 +19,14 @@
 
 package org.apache.ftpserver.interfaces;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.Socket;
 import java.util.Date;
 
 import junit.framework.TestCase;
 
 import org.apache.ftpserver.FtpStatisticsImpl;
-import org.apache.ftpserver.ftplet.FtpSession;
-import org.apache.ftpserver.listener.Connection;
-import org.apache.ftpserver.listener.ConnectionObserver;
 
 public abstract class ServerFtpStatisticsTestTemplate extends TestCase {
 
-    public static class MockConnection implements Connection {
-
-        public void close() {
-        }
-
-        public FtpSession getSession() {
-            return null;
-        }
-
-        public void setObserver(ConnectionObserver observer) {            
-        }
-
-        public void run() {            
-        }
-
-        public Socket getControlSocket() {
-            return null;
-        }
-
-        public FtpServerContext getServerContext() {
-            return null;
-        }
-
-        public long transfer(InputStream bis, OutputStream bos, int maxRate) throws IOException {
-            return 0;
-        }
-    }
     
     public void testConnectionCount() {
         ServerFtpStatistics stats = createStatistics();