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();