in core/src/main/java/org/apache/ftpserver/impl/DefaultFtpHandler.java [175:252]
public void messageReceived(final FtpIoSession session,
final FtpRequest request) throws Exception {
try {
session.updateLastAccessTime();
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(LocalizedFtpReply.translate(session, request,
context, FtpReply.REPLY_530_NOT_LOGGED_IN,
"permission", null));
return;
}
FtpletContainer ftplets = context.getFtpletContainer();
FtpletResult ftpletRet;
try {
ftpletRet = ftplets.beforeCommand(session.getFtpletSession(),
request);
} catch (Exception e) {
LOG.debug("Ftplet container threw exception", e);
ftpletRet = FtpletResult.DISCONNECT;
}
if (ftpletRet == FtpletResult.DISCONNECT) {
LOG.debug("Ftplet returned DISCONNECT, session will be closed");
session.close(false).awaitUninterruptibly(10000);
return;
} else if (ftpletRet != FtpletResult.SKIP) {
if (command != null) {
synchronized (session) {
command.execute(session, context, request);
}
} else {
session.write(LocalizedFtpReply.translate(session, request,
context,
FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED,
"not.implemented", null));
}
try {
ftpletRet = ftplets.afterCommand(
session.getFtpletSession(), request, session
.getLastReply());
} catch (Exception e) {
LOG.debug("Ftplet container threw exception", e);
ftpletRet = FtpletResult.DISCONNECT;
}
if (ftpletRet == FtpletResult.DISCONNECT) {
LOG.debug("Ftplet returned DISCONNECT, session will be closed");
session.close(false).awaitUninterruptibly(10000);
return;
}
}
} catch (Exception ex) {
// send error reply
try {
session.write(LocalizedFtpReply.translate(session, request,
context, FtpReply.REPLY_550_REQUESTED_ACTION_NOT_TAKEN,
null, null));
} catch (Exception ex1) {
}
if (ex instanceof java.io.IOException) {
throw (IOException) ex;
} else {
LOG.warn("RequestHandler.service()", ex);
}
}
}