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/08/15 22:41:19 UTC
svn commit: r686360 [1/2] - in /mina/ftpserver/trunk:
core/src/main/java/org/apache/ftpserver/
core/src/main/java/org/apache/ftpserver/command/
core/src/main/java/org/apache/ftpserver/ftplet/
core/src/test/java/org/apache/ftpserver/ core/src/test/java/...
Author: ngn
Date: Fri Aug 15 13:41:18 2008
New Revision: 686360
URL: http://svn.apache.org/viewvc?rev=686360&view=rev
Log:
Generalized Ftplets, now support beforeCommand anf afterCommand (FTPSERVER-138 and FTPSERVER-82)
DefaultFtplet supports the same interface as the old Ftplet, users who previously implemented Ftplet can now extend DefaultFtplet
Added:
mina/ftpserver/trunk/ftplet-api/src/test/java/org/apache/ftpserver/ftplet/Foo.java (with props)
Modified:
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpHandler.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.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/RETR.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/DefaultFtpReplyTest.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/FeatTest.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LoginTest.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtpletCallback.java
mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java
mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpSession.java
mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpHandler.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpHandler.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpHandler.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpHandler.java Fri Aug 15 13:41:18 2008
@@ -23,6 +23,8 @@
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
+import org.apache.ftpserver.ftplet.FtpletContainer;
+import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.Command;
import org.apache.ftpserver.interfaces.CommandFactory;
import org.apache.ftpserver.interfaces.FtpIoSession;
@@ -38,6 +40,12 @@
private final Logger LOG = LoggerFactory.getLogger(DefaultFtpHandler.class);
+ private final static String[] NON_AUTHENTICATED_COMMANDS = new String[] {
+ "USER",
+ "PASS",
+ "AUTH"
+ };
+
private FtpServerContext context;
private Listener listener;
@@ -76,21 +84,64 @@
session.closeOnFlush().awaitUninterruptibly(10000);
}
+ private boolean isCommandOkWithoutAuthentication(String command) {
+ boolean okay = false;
+ for(String allowed : NON_AUTHENTICATED_COMMANDS) {
+ if(allowed.equals(command)) {
+ okay = true;
+ break;
+ }
+ }
+ return okay;
+ }
+
public void messageReceived( final FtpIoSession session, final FtpRequest request ) throws Exception {
try {
String commandName = request.getCommand();
CommandFactory commandFactory = context.getCommandFactory();
Command command = commandFactory.getCommand(commandName);
+ // make sure the user is authenticated before he issues commands
+ if(!session.isLoggedIn() && !isCommandOkWithoutAuthentication(commandName)) {
+ session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_530_NOT_LOGGED_IN, "permission", null));
+ return;
+ }
- if(command != null) {
- synchronized (session) {
- command.execute(session, context, request);
- }
+ FtpletContainer ftplets = context.getFtpletContainer();
+
+ FtpletEnum ftpletRet;
+ try {
+ ftpletRet = ftplets.beforeCommand(session.getFtpletSession(), request);
+ } catch(Exception e) {
+ LOG.debug("Ftplet container threw exception", e);
+ ftpletRet = FtpletEnum.RET_DISCONNECT;
+ }
+ if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
+ session.closeOnFlush().awaitUninterruptibly(10000);
+ return;
+ } else if(ftpletRet != FtpletEnum.RET_SKIP) {
+
+ if(command != null) {
+ synchronized (session) {
+ command.execute(session, context, request);
+ }
+ }
+ else {
+ session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED, "not.implemented", null));
+ }
}
- else {
- session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED, "not.implemented", null));
+
+ try {
+ ftpletRet = ftplets.afterCommand(session.getFtpletSession(), request);
+ } catch(Exception e) {
+ LOG.debug("Ftplet container threw exception", e);
+ ftpletRet = FtpletEnum.RET_DISCONNECT;
+ }
+ if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
+ session.closeOnFlush().awaitUninterruptibly(10000);
+ return;
}
+
}
catch(Exception ex) {
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java Fri Aug 15 13:41:18 2008
@@ -32,8 +32,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
@@ -86,23 +84,6 @@
}
}
- // call Ftplet.onAppendStart() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try {
- ftpletRet = ftpletContainer.onAppendStart(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
// get filenames
FileObject file = null;
try {
@@ -183,20 +164,7 @@
// if data transfer ok - send transfer complete message
if(!failure) {
- session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_226_CLOSING_DATA_CONNECTION, "APPE", fileName));
-
- // call Ftplet.onAppendEnd() method
- try {
- ftpletRet = ftpletContainer.onAppendEnd(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
+ session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_226_CLOSING_DATA_CONNECTION, "APPE", fileName));
}
}
finally {
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java Fri Aug 15 13:41:18 2008
@@ -25,8 +25,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
@@ -62,24 +60,6 @@
return;
}
- // call Ftplet.onDeleteStart() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try {
- ftpletRet = ftpletContainer.onDeleteStart(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN, "DELE", fileName));
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
// get file object
FileObject file = null;
@@ -114,21 +94,7 @@
// notify statistics object
ServerFtpStatistics ftpStat = (ServerFtpStatistics)context.getFtpStatistics();
ftpStat.setDelete(session, file);
-
- // call Ftplet.onDeleteEnd() method
- try{
- ftpletRet = ftpletContainer.onDeleteEnd(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
- }
- else {
+ } else {
session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN, "DELE", fileName));
}
}
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java Fri Aug 15 13:41:18 2008
@@ -26,8 +26,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
@@ -64,24 +62,7 @@
session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_501_SYNTAX_ERROR_IN_PARAMETERS_OR_ARGUMENTS, "MKD", null));
return;
}
-
- // call Ftplet.onMkdirStart() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try{
- ftpletRet = ftpletContainer.onMkdirStart(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
+
// get file object
FileObject file = null;
try {
@@ -120,20 +101,7 @@
ServerFtpStatistics ftpStat = (ServerFtpStatistics)context.getFtpStatistics();
ftpStat.setMkdir(session, file);
- // call Ftplet.onMkdirEnd() method
- try{
- ftpletRet = ftpletContainer.onMkdirEnd(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
- }
- else {
+ } else {
session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN, "MKD", fileName));
}
}
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=686360&r1=686359&r2=686360&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 Fri Aug 15 13:41:18 2008
@@ -29,8 +29,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.ftplet.User;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.interfaces.FtpIoSession;
@@ -129,6 +127,7 @@
else {
auth = new UsernamePasswordAuthentication(userName, password, userMetadata);
}
+
authenticatedUser = userManager.authenticate(auth);
} catch(AuthenticationFailedException e) {
authenticatedUser = null;
@@ -139,8 +138,6 @@
LOG.warn("PASS.execute()", e);
}
- // set the user so that the Ftplets will be able to verify it
-
// first save old values so that we can reset them if Ftplets
// tell us to fail
User oldUser = session.getUser();
@@ -156,24 +153,6 @@
session.setUser(null);
}
- // call Ftplet.onLogin() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- if(ftpletContainer != null) {
- FtpletEnum ftpletRet;
- try{
- ftpletRet = ftpletContainer.onLogin(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- } else if(ftpletRet == FtpletEnum.RET_SKIP) {
- success = false;
- }
- }
-
if(!success) {
// reset due to failure
session.setUser(oldUser);
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java Fri Aug 15 13:41:18 2008
@@ -34,8 +34,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
@@ -76,23 +74,6 @@
return;
}
- // call Ftplet.onDownloadStart() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try {
- ftpletRet = ftpletContainer.onDownloadStart(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
// get file object
FileObject file = null;
try {
@@ -188,21 +169,8 @@
if(!failure) {
session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_226_CLOSING_DATA_CONNECTION, "RETR", fileName));
- // call Ftplet.onDownloadEnd() method
- try {
- ftpletRet = ftpletContainer.onDownloadEnd(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
}
- }
- finally {
+ } finally {
session.resetState();
session.getDataConnection().closeDataConnection();
}
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java Fri Aug 15 13:41:18 2008
@@ -25,8 +25,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
@@ -64,23 +62,6 @@
return;
}
- // call Ftplet.onRmdirStart() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try{
- ftpletRet = ftpletContainer.onRmdirStart(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
// get file object
FileObject file = null;
try {
@@ -119,20 +100,7 @@
ServerFtpStatistics ftpStat = (ServerFtpStatistics)context.getFtpStatistics();
ftpStat.setRmdir(session, file);
- // call Ftplet.onRmdirEnd() method
- try{
- ftpletRet = ftpletContainer.onRmdirEnd(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
- }
- else {
+ } else {
session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN, "RMD", fileName));
}
}
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java Fri Aug 15 13:41:18 2008
@@ -25,8 +25,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.util.FtpReplyUtil;
@@ -61,23 +59,6 @@
return;
}
- // call Ftplet.onRenameStart() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try {
- ftpletRet = ftpletContainer.onRenameStart(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
// get the "rename from" file object
FileObject frFile = session.getRenameFrom();
if( frFile == null ) {
@@ -118,24 +99,11 @@
LOG.info("File rename (" + session.getUser().getName() + ") "
+ frFile.getFullName() + " -> " + toFile.getFullName());
- // call Ftplet.onRenameEnd() method
- try {
- ftpletRet = ftpletContainer.onRenameEnd(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
- }
- else {
+ } else {
session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_553_REQUESTED_ACTION_NOT_TAKEN_FILE_NAME_NOT_ALLOWED, "RNTO", toFileStr));
}
- }
- finally {
+ } finally {
session.resetState();
}
}
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java Fri Aug 15 13:41:18 2008
@@ -25,8 +25,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.Command;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
@@ -53,23 +51,6 @@
final FtpServerContext context,
final FtpRequest request) throws IOException, FtpException {
- // call Ftplet.onSite method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try {
- ftpletRet = ftpletContainer.onSite(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
// get request name
String argument = request.getArgument();
if(argument != null) {
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java Fri Aug 15 13:41:18 2008
@@ -32,8 +32,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
@@ -87,23 +85,6 @@
}
}
- // call Ftplet.onUploadStart() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try {
- ftpletRet = ftpletContainer.onUploadStart(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
// get filename
FileObject file = null;
try {
@@ -169,18 +150,6 @@
if(!failure) {
session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_226_CLOSING_DATA_CONNECTION, "STOR", fileName));
- // call Ftplet.onUploadEnd() method
- try {
- ftpletRet = ftpletContainer.onUploadEnd(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
}
}
finally {
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java Fri Aug 15 13:41:18 2008
@@ -33,8 +33,6 @@
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpReply;
import org.apache.ftpserver.ftplet.FtpRequest;
-import org.apache.ftpserver.ftplet.Ftplet;
-import org.apache.ftpserver.ftplet.FtpletEnum;
import org.apache.ftpserver.interfaces.FtpIoSession;
import org.apache.ftpserver.interfaces.FtpServerContext;
import org.apache.ftpserver.interfaces.ServerFtpStatistics;
@@ -77,23 +75,6 @@
// reset state variables
session.resetState();
- // call Ftplet.onUploadUniqueStart() method
- Ftplet ftpletContainer = context.getFtpletContainer();
- FtpletEnum ftpletRet;
- try {
- ftpletRet = ftpletContainer.onUploadUniqueStart(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_SKIP) {
- return;
- }
- else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
String pathName = request.getArgument();
// get filenames
@@ -184,21 +165,8 @@
if(!failure) {
session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_226_CLOSING_DATA_CONNECTION, "STOU", fileName));
- // call Ftplet.onUploadUniqueEnd() method
- try {
- ftpletRet = ftpletContainer.onUploadUniqueEnd(session.getFtpletSession(), request);
- } catch(Exception e) {
- LOG.debug("Ftplet container threw exception", e);
- ftpletRet = FtpletEnum.RET_DISCONNECT;
- }
- if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
- session.closeOnFlush().awaitUninterruptibly(10000);
- return;
- }
-
}
- }
- finally {
+ } finally {
session.getDataConnection().closeDataConnection();
}
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java Fri Aug 15 13:41:18 2008
@@ -78,302 +78,41 @@
return ftplets.get(name);
}
-
- /**
- * Destroy all ftplets.
- */
- public void destroy() {
- dispose();
- }
-
- /**
- * Call ftplet onConnect.
- */
- public FtpletEnum onConnect(FtpSession session) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
- retVal = entry.getValue().onConnect(session);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onDisconnect.
- */
- public FtpletEnum onDisconnect(FtpSession session) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onDisconnect(session);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onLogin.
- */
- public FtpletEnum onLogin(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
- retVal = entry.getValue().onLogin(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onDeleteStart.
- */
- public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onDeleteStart(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
-
- /**
- * Call ftplet onDeleteEnd.
- */
- public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onDeleteEnd(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onUploadStart.
- */
- public FtpletEnum onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onUploadStart(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onUploadEnd.
- */
- public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onUploadEnd(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onDownloadStart.
- */
- public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onDownloadStart(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onDownloadEnd.
- */
- public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onDownloadEnd(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onRmdirStart.
- */
- public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onRmdirStart(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
+ public void init(FtpletContext ftpletContext) throws FtpException {
+ // dummy, forced by Ftplet API
}
/**
- * Call ftplet onRmdirEnd.
+ * @see FtpletContainer#getFtplets()
*/
- public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onRmdirEnd(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
+ public Map<String, Ftplet> getFtplets() {
+ return ftplets;
}
/**
- * Call ftplet onMkdirStart.
+ * @see FtpletContainer#setFtplets(Map)
*/
- public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onMkdirStart(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
+ public void setFtplets(Map<String, Ftplet> ftplets) {
+ this.ftplets = ftplets;
}
- /**
- * Call ftplet onMkdirEnd.
- */
- public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
- retVal = entry.getValue().onMkdirEnd(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
/**
- * Call ftplet onAppendStart.
+ * Destroy all ftplets.
*/
- public FtpletEnum onAppendStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onAppendStart(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
+ public void destroy() {
+ dispose();
}
-
+
/**
- * Call ftplet onAppendEnd.
+ * Call ftplet onConnect.
*/
- public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ public FtpletEnum onConnect(FtpSession session) throws FtpException, IOException {
FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
-
- retVal = entry.getValue().onAppendEnd(session, request);
+ retVal = entry.getValue().onConnect(session);
if(retVal == null) {
retVal = FtpletEnum.RET_DEFAULT;
}
@@ -387,13 +126,13 @@
}
/**
- * Call ftplet onUploadUniqueStart.
+ * Call ftplet onDisconnect.
*/
- public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ public FtpletEnum onDisconnect(FtpSession session) throws FtpException, IOException {
FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
- retVal = entry.getValue().onUploadUniqueStart(session, request);
+ retVal = entry.getValue().onDisconnect(session);
if(retVal == null) {
retVal = FtpletEnum.RET_DEFAULT;
}
@@ -406,34 +145,12 @@
return retVal;
}
- /**
- * Call ftplet onUploadUniqueEnd.
- */
- public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
- retVal = entry.getValue().onUploadUniqueEnd(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onRenameStart.
- */
- public FtpletEnum onRenameStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ public FtpletEnum afterCommand(FtpSession session, FtpRequest request) throws FtpException, IOException {
FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
- retVal = entry.getValue().onRenameStart(session, request);
+ retVal = entry.getValue().afterCommand(session, request);
if(retVal == null) {
retVal = FtpletEnum.RET_DEFAULT;
}
@@ -443,37 +160,14 @@
break;
}
}
- return retVal;
+ return retVal;
}
-
- /**
- * Call ftplet onRenameEnd.
- */
- public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
- FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
- for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
- retVal = entry.getValue().onRenameEnd(session, request);
- if(retVal == null) {
- retVal = FtpletEnum.RET_DEFAULT;
- }
-
- // proceed only if the return value is FtpletEnum.RET_DEFAULT
- if(retVal != FtpletEnum.RET_DEFAULT) {
- break;
- }
- }
- return retVal;
- }
-
- /**
- * Call ftplet onSite.
- */
- public FtpletEnum onSite(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ public FtpletEnum beforeCommand(FtpSession session, FtpRequest request) throws FtpException, IOException {
FtpletEnum retVal = FtpletEnum.RET_DEFAULT;
for(Entry<String, Ftplet> entry : ftplets.entrySet()) {
- retVal = entry.getValue().onSite(session, request);
+ retVal = entry.getValue().beforeCommand(session, request);
if(retVal == null) {
retVal = FtpletEnum.RET_DEFAULT;
}
@@ -486,23 +180,5 @@
return retVal;
}
- public void init(FtpletContext ftpletContext) throws FtpException {
- // dummy, forced by Ftplet API
- }
-
- /**
- * @see FtpletContainer#getFtplets()
- */
- public Map<String, Ftplet> getFtplets() {
- return ftplets;
- }
-
- /**
- * @see FtpletContainer#setFtplets(Map)
- */
- public void setFtplets(Map<String, Ftplet> ftplets) {
- this.ftplets = ftplets;
- }
-
}
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/DefaultFtpReplyTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/DefaultFtpReplyTest.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/DefaultFtpReplyTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/DefaultFtpReplyTest.java Fri Aug 15 13:41:18 2008
@@ -19,10 +19,10 @@
package org.apache.ftpserver;
-import org.apache.ftpserver.ftplet.DefaultFtpReply;
-
import junit.framework.TestCase;
+import org.apache.ftpserver.ftplet.DefaultFtpReply;
+
public class DefaultFtpReplyTest extends TestCase {
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/FeatTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/FeatTest.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/FeatTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/FeatTest.java Fri Aug 15 13:41:18 2008
@@ -26,6 +26,8 @@
public void test() throws Exception {
+ client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
+
client.sendCommand("FEAT");
String[] featReplies = client.getReplyString().split("\r\n");
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LoginTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LoginTest.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LoginTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LoginTest.java Fri Aug 15 13:41:18 2008
@@ -19,6 +19,8 @@
package org.apache.ftpserver.clienttests;
+import java.io.ByteArrayInputStream;
+
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPConnectionClosedException;
import org.apache.commons.net.ftp.FTPReply;
@@ -31,6 +33,9 @@
assertTrue(client.login(ADMIN_USERNAME, ADMIN_PASSWORD));
}
+ public void testCommandWithoutLogin() throws Exception {
+ assertFalse(client.storeFile("foo", new ByteArrayInputStream("foo".getBytes())));
+ }
public void testLoginNoUser() throws Exception {
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java Fri Aug 15 13:41:18 2008
@@ -156,7 +156,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onLogin(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("PASS"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -180,7 +180,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onDeleteStart(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("DELE"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -204,7 +204,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onDeleteEnd(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("DELE"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -227,8 +227,8 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
-
- container.onUploadStart(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("STOR"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -251,8 +251,8 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
-
- container.onUploadEnd(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("STOR"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -276,7 +276,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onDownloadStart(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("RETR"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -300,7 +300,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onDownloadEnd(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("RETR"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -324,7 +324,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onRmdirStart(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("RMD"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -348,7 +348,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onRmdirEnd(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("RMD"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -372,7 +372,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onMkdirStart(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("MKD"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -396,7 +396,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onMkdirEnd(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("MKD"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -420,7 +420,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onAppendStart(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("APPE"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -444,7 +444,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onAppendEnd(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("APPE"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -468,7 +468,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onUploadUniqueStart(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("STOU"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -492,7 +492,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onUploadUniqueEnd(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("STOU"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -516,7 +516,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onRenameStart(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.beforeCommand(new FtpSessionImpl(null), new FtpRequestImpl("RNTO"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -540,7 +540,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onRenameEnd(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("RNTO"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
@@ -564,7 +564,7 @@
container.addFtplet("ftplet1", ftplet1);
container.addFtplet("ftplet2", ftplet2);
- container.onSite(new FtpSessionImpl(null), new FtpRequestImpl("foo"));
+ container.afterCommand(new FtpSessionImpl(null), new FtpRequestImpl("SITE"));
assertEquals(2, calls.size());
assertEquals("ftplet1", calls.get(0));
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java Fri Aug 15 13:41:18 2008
@@ -63,7 +63,7 @@
public void testLogin() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onLogin(FtpSession session, FtpRequest request) throws FtpException, IOException {
- assertNotNull(session.getUser());
+ assertNotNull(session.getUserArgument());
return super.onLogin(session, request);
}
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java Fri Aug 15 13:41:18 2008
@@ -61,23 +61,6 @@
return server;
}
-
-/* public void testExceptionDuringInit() throws Exception {
- MockFtplet.callback = new MockFtpletCallback() {
- public void init(FtpletContext ftpConfig, Configuration config)
- throws FtpException {
- throw new RuntimeException();
- }
- };
-
- try {
- initServer();
- fail("Must throw FtpException");
- } catch (FtpException e) {
- // OK
- }
- }*/
-
public void testExceptionDuringLogin() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onLogin(FtpSession session, FtpRequest request)
@@ -248,6 +231,7 @@
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
try {
client.site("HELP");
+ client.completePendingCommand();
fail("Must throw FTPConnectionClosedException");
} catch (FTPConnectionClosedException e) {
// OK
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java Fri Aug 15 13:41:18 2008
@@ -24,7 +24,7 @@
import java.io.File;
import java.io.IOException;
-import org.apache.commons.net.ftp.FTPConnectionClosedException;
+import org.apache.commons.net.ftp.FTPReply;
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.clienttests.ClientTestTemplate;
import org.apache.ftpserver.test.TestUtil;
@@ -36,7 +36,7 @@
private static final File TEST_FILE2 = new File(ROOT_DIR, "test2.txt");
private static final File TEST_DIR1 = new File(ROOT_DIR, "dir1");;
- protected FtpletEnum mockReturnValue = FtpletEnum.RET_DISCONNECT;
+ protected FtpletEnum mockReturnValue = FtpletEnum.RET_SKIP;
/*
* (non-Javadoc)
@@ -63,7 +63,10 @@
public void testLogin() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onLogin(FtpSession session, FtpRequest request) throws FtpException, IOException {
- return FtpletEnum.RET_SKIP;
+ session.write(new DefaultFtpReply(FtpReply.REPLY_530_NOT_LOGGED_IN, "foo"));
+
+ throwException();
+ return mockReturnValue;
}
};
@@ -73,7 +76,10 @@
public void testExceptionDuringDeleteStart() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
- return FtpletEnum.RET_SKIP;
+
+ session.write(new DefaultFtpReply(FtpReply.REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN, "foo"));
+ throwException();
+ return mockReturnValue;
}
};
@@ -96,32 +102,23 @@
TestUtil.writeDataToFile(TEST_FILE1, TESTDATA);
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.deleteFile(TEST_FILE1.getName());
- client.completePendingCommand();
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
-
+ assertTrue(client.deleteFile(TEST_FILE1.getName()));
+
assertFalse(TEST_FILE1.exists());
}
public void testExceptionDuringMkdirStart() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+
+ session.write(new DefaultFtpReply(FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN, "foo"));
throwException();
return mockReturnValue;
}
};
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.makeDirectory(TEST_DIR1.getName());
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertFalse(client.makeDirectory(TEST_DIR1.getName()));
assertFalse(TEST_DIR1.exists());
}
@@ -135,13 +132,7 @@
};
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.makeDirectory(TEST_DIR1.getName());
- client.completePendingCommand();
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertTrue(client.makeDirectory(TEST_DIR1.getName()));
assertTrue(TEST_DIR1.exists());
}
@@ -149,6 +140,8 @@
public void testExceptionDuringRmdirStart() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ session.write(new DefaultFtpReply(FtpReply.REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN, "foo"));
+
throwException();
return mockReturnValue;
}
@@ -157,12 +150,7 @@
TEST_DIR1.mkdirs();
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.removeDirectory(TEST_DIR1.getName());
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertFalse(client.removeDirectory(TEST_DIR1.getName()));
assertTrue(TEST_DIR1.exists());
}
@@ -178,13 +166,7 @@
TEST_DIR1.mkdirs();
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.removeDirectory(TEST_DIR1.getName());
- client.completePendingCommand();
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertTrue(client.removeDirectory(TEST_DIR1.getName()));
assertFalse(TEST_DIR1.exists());
}
@@ -198,17 +180,15 @@
};
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.site("HELP");
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+
+ client.site("HELP");
}
public void testExceptionDuringRenameStart() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onRenameStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ session.write(new DefaultFtpReply(FtpReply.REPLY_553_REQUESTED_ACTION_NOT_TAKEN_FILE_NAME_NOT_ALLOWED, "foo"));
+
throwException();
return mockReturnValue;
}
@@ -217,12 +197,7 @@
TestUtil.writeDataToFile(TEST_FILE1, TESTDATA);
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.rename(TEST_FILE1.getName(), TEST_FILE2.getName());
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertFalse(client.rename(TEST_FILE1.getName(), TEST_FILE2.getName()));
assertTrue(TEST_FILE1.exists());
assertFalse(TEST_FILE2.exists());
@@ -239,13 +214,7 @@
TestUtil.writeDataToFile(TEST_FILE1, TESTDATA);
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.rename(TEST_FILE1.getName(), TEST_FILE2.getName());
- client.completePendingCommand();
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertTrue(client.rename(TEST_FILE1.getName(), TEST_FILE2.getName()));
assertFalse(TEST_FILE1.exists());
assertTrue(TEST_FILE2.exists());
@@ -255,6 +224,8 @@
public void testExceptionDuringDownloadStart() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ session.write(new DefaultFtpReply(FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN, "foo"));
+
throwException();
return mockReturnValue;
}
@@ -263,12 +234,9 @@
TestUtil.writeDataToFile(TEST_FILE1, TESTDATA);
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.retrieveFileStream(TEST_FILE1.getName());
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ client.retrieveFileStream(TEST_FILE1.getName());
+
+ assertTrue(FTPReply.isNegativePermanent(client.getReplyCode()));
}
public void testExceptionDuringDownloadEnd() throws Exception {
@@ -283,13 +251,7 @@
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try {
- client.retrieveFile(TEST_FILE1.getName(), baos);
- client.completePendingCommand();
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertTrue(client.retrieveFile(TEST_FILE1.getName(), baos));
TestUtil.assertArraysEqual(TESTDATA, baos.toByteArray());
}
@@ -297,6 +259,8 @@
public void testExceptionDuringAppendStart() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onAppendStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ session.write(new DefaultFtpReply(FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN, "foo"));
+
throwException();
return mockReturnValue;
}
@@ -305,12 +269,7 @@
TestUtil.writeDataToFile(TEST_FILE1, TESTDATA);
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.appendFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA));
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertFalse(client.appendFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA)));
TestUtil.assertFileEqual(TESTDATA, TEST_FILE1);
}
@@ -326,13 +285,7 @@
TestUtil.writeDataToFile(TEST_FILE1, TESTDATA);
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.appendFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA));
- client.completePendingCommand();
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertTrue(client.appendFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA)));
TestUtil.assertFileEqual(DOUBLE_TESTDATA, TEST_FILE1);
}
@@ -340,18 +293,15 @@
public void testExceptionDuringUploadStart() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ session.write(new DefaultFtpReply(FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN, "foo"));
+
throwException();
return mockReturnValue;
}
};
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.storeFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA));
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertFalse(client.storeFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA)));
assertFalse(TEST_FILE1.exists());
}
@@ -365,13 +315,7 @@
};
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.storeFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA));
- client.completePendingCommand();
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertTrue(client.storeFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA)));
TestUtil.assertFileEqual(TESTDATA, TEST_FILE1);
}
@@ -379,18 +323,14 @@
public void testExceptionDuringUploadUniqueStart() throws Exception {
MockFtplet.callback = new MockFtpletCallback() {
public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ session.write(new DefaultFtpReply(FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN, "foo"));
throwException();
return mockReturnValue;
}
};
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.storeUniqueFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA));
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertFalse(client.storeUniqueFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA)));
assertEquals(ROOT_DIR.listFiles().length, 0);
}
@@ -405,13 +345,7 @@
};
client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
- try {
- client.storeUniqueFile(new ByteArrayInputStream(TESTDATA));
- client.completePendingCommand();
- fail("Must throw FTPConnectionClosedException");
- } catch (FTPConnectionClosedException e) {
- // OK
- }
+ assertTrue(client.storeUniqueFile(new ByteArrayInputStream(TESTDATA)));
TestUtil.assertFileEqual(TESTDATA, ROOT_DIR.listFiles()[0]);
}
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtplet.java Fri Aug 15 13:41:18 2008
@@ -21,7 +21,7 @@
import java.io.IOException;
-public class MockFtplet implements Ftplet {
+public class MockFtplet extends DefaultFtplet {
protected static MockFtpletCallback callback = new MockFtpletCallback();
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtpletCallback.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtpletCallback.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtpletCallback.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/MockFtpletCallback.java Fri Aug 15 13:41:18 2008
@@ -21,7 +21,7 @@
import java.io.IOException;
-public class MockFtpletCallback implements Ftplet {
+public class MockFtpletCallback extends DefaultFtplet {
public static FtpletEnum returnValue;
Modified: mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java (original)
+++ mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/DefaultFtplet.java Fri Aug 15 13:41:18 2008
@@ -31,9 +31,65 @@
public void init(FtpletContext ftpletContext) throws FtpException {}
public void destroy() {}
-
+
public FtpletEnum onConnect(FtpSession session) throws FtpException, IOException {return null;}
public FtpletEnum onDisconnect(FtpSession session) throws FtpException, IOException {return null;}
+
+ public FtpletEnum beforeCommand(FtpSession session, FtpRequest request) throws FtpException, IOException {
+ String command = request.getCommand().toUpperCase();
+
+ if("PASS".equals(command)) {
+ return onLogin(session, request);
+ } else if("DELE".equals(command)) {
+ return onDeleteStart(session, request);
+ } else if("STOR".equals(command)) {
+ return onUploadStart(session, request);
+ } else if("RETR".equals(command)) {
+ return onDownloadStart(session, request);
+ } else if("RMD".equals(command)) {
+ return onRmdirStart(session, request);
+ } else if("MKD".equals(command)) {
+ return onMkdirStart(session, request);
+ } else if("APPE".equals(command)) {
+ return onAppendStart(session, request);
+ } else if("STOU".equals(command)) {
+ return onUploadUniqueStart(session, request);
+ } else if("RNTO".equals(command)) {
+ return onRenameStart(session, request);
+ } else {
+ // TODO should we call a catch all?
+ return null;
+ }
+ }
+
+ public FtpletEnum afterCommand(FtpSession session, FtpRequest request) throws FtpException, IOException {
+
+ String command = request.getCommand().toUpperCase();
+
+ if("DELE".equals(command)) {
+ return onDeleteEnd(session, request);
+ } else if("STOR".equals(command)) {
+ return onUploadEnd(session, request);
+ } else if("RETR".equals(command)) {
+ return onDownloadEnd(session, request);
+ } else if("RMD".equals(command)) {
+ return onRmdirEnd(session, request);
+ } else if("MKD".equals(command)) {
+ return onMkdirEnd(session, request);
+ } else if("APPE".equals(command)) {
+ return onAppendEnd(session, request);
+ } else if("STOU".equals(command)) {
+ return onUploadUniqueEnd(session, request);
+ } else if("RNTO".equals(command)) {
+ return onRenameEnd(session, request);
+ } else if("SITE".equals(command)) {
+ return onSite(session, request);
+ } else {
+ // TODO should we call a catch all?
+ return null;
+ }
+ }
+
public FtpletEnum onLogin(FtpSession session, FtpRequest request) throws FtpException, IOException {return null;}
public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request) throws FtpException, IOException {return null;}
@@ -61,4 +117,4 @@
public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {return null;}
public FtpletEnum onSite(FtpSession session, FtpRequest request) throws FtpException, IOException {return null;}
-}
+}
\ No newline at end of file
Modified: mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpSession.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpSession.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpSession.java (original)
+++ mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/FtpSession.java Fri Aug 15 13:41:18 2008
@@ -31,8 +31,7 @@
* So the attributes set by <code>setAttribute()</code> will be always
* available later unless that attribute is removed or the client disconnects.
*/
-public
-interface FtpSession {
+public interface FtpSession {
/**
* Returns the IP address of the client that sent the request.
Modified: mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java?rev=686360&r1=686359&r2=686360&view=diff
==============================================================================
--- mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java (original)
+++ mina/ftpserver/trunk/ftplet-api/src/main/java/org/apache/ftpserver/ftplet/Ftplet.java Fri Aug 15 13:41:18 2008
@@ -56,7 +56,7 @@
void init(FtpletContext ftpletContext) throws FtpException;
/**
- * Called by the servlet container to indicate to a ftplet that the ftplet is
+ * Called by the Ftplet container to indicate to a ftplet that the ftplet is
* being taken out of service. This method is only called once all threads within
* the ftplet's service method have exited. After the ftplet container calls this
* method, callback methods will not be executed. If the ftplet initialization
@@ -65,105 +65,51 @@
void destroy();
/**
- * Client connect notification method.
- */
- FtpletEnum onConnect(FtpSession session) throws FtpException, IOException;
-
- /**
- * Client disconnect notification method. This is the last callback method.
- */
- FtpletEnum onDisconnect(FtpSession session) throws FtpException, IOException;
-
- /**
- * Client successful login notification method.
- * If the user has successfully authenticated, the
- * {@link FtpSession#getUser()} method will return the user,
- * otherwise it will return null.
+ * Called by the ftplet container before a command is executed by the server.
+ * The implementation should return based on the desired action to be taken by the server:
+ * <ul>
+ * <li>{@link FtpletEnum#RET_DEFAULT}: The server continues as normal and executes the command</li>
+ * <li>{@link FtpletEnum#RET_NO_FTPLET}: The server does not call any more Ftplets before this command
+ * but continues execution of the command as usual</li>
+ * <li>{@link FtpletEnum#RET_SKIP}: The server skips over execution of the command. Note that the Ftplet is
+ * responsible for returning the appropriate reply to the client, or the client might deadlock.</li>
+ * <li>{@link FtpletEnum#RET_DISCONNECT}: The server will immediately disconnect the client.</li>
+ * <li>Ftplet throws exception: Same as {@link FtpletEnum#RET_DISCONNECT}</li>
+ * </ul>
+ * @param session The current session
+ * @param request The current request
+ * @return The desired action to be performed by the server
+ * @throws FtpException
+ * @throws IOException
*/
- FtpletEnum onLogin(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * File delete request notification method.
- */
- FtpletEnum onDeleteStart(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * File delete success notification method.
- */
- FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * File upload request notification method.
- */
- FtpletEnum onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException;
+ FtpletEnum beforeCommand(FtpSession session, FtpRequest request) throws FtpException, IOException;
/**
- * File upload success notification method.
- */
- FtpletEnum onUploadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * File download request notification method.
- */
- FtpletEnum onDownloadStart(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * File download success notification method.
- */
- FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * Remove directory request notification method.
+ * Called by the ftplet container after a command has been executed by the server.
+ * The implementation should return based on the desired action to be taken by the server:
+ * <ul>
+ * <li>{@link FtpletEnum#RET_DEFAULT}: The server continues as normal</li>
+ * <li>{@link FtpletEnum#RET_NO_FTPLET}: The server does not call any more Ftplets before this command
+ * but continues as normal</li>
+ * <li>{@link FtpletEnum#RET_SKIP}: Same as {@link FtpletEnum#RET_DEFAULT}</li>
+ * <li>{@link FtpletEnum#RET_DISCONNECT}: The server will immediately disconnect the client.</li>
+ * <li>Ftplet throws exception: Same as {@link FtpletEnum#RET_DISCONNECT}</li>
+ * </ul>
+ * @param session The current session
+ * @param request The current request
+ * @return The desired action to be performed by the server
+ * @throws FtpException
+ * @throws IOException
*/
- FtpletEnum onRmdirStart(FtpSession session, FtpRequest request) throws FtpException, IOException;
+ FtpletEnum afterCommand(FtpSession session, FtpRequest request) throws FtpException, IOException;
/**
- * Directory removal success notification method.
- */
- FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * Directory creation request notification method.
- */
- FtpletEnum onMkdirStart(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * Directory creation success notification method.
- */
- FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * File append request notification method.
- */
- FtpletEnum onAppendStart(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * File append success notification method.
- */
- FtpletEnum onAppendEnd(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * Unique file create request notification method.
- */
- FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * Unique file create success notification method.
- */
- FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * Rename start notification method.
- */
- FtpletEnum onRenameStart(FtpSession session, FtpRequest request) throws FtpException, IOException;
-
- /**
- * Rename end notification method.
+ * Client connect notification method.
*/
- FtpletEnum onRenameEnd(FtpSession session, FtpRequest request) throws FtpException, IOException;
+ FtpletEnum onConnect(FtpSession session) throws FtpException, IOException;
/**
- * SITE command notification method.
+ * Client disconnect notification method. This is the last callback method.
*/
- FtpletEnum onSite(FtpSession session, FtpRequest request) throws FtpException, IOException;
-}
+ FtpletEnum onDisconnect(FtpSession session) throws FtpException, IOException;
+}
\ No newline at end of file