Author: norman
Date: Wed Oct 14 11:12:39 2009
New Revision: 825085
URL: http://svn.apache.org/viewvc?rev=825085&view=rev
Log:
Refactor code to keep things as generic as possible. This will allow us to
provide a Avalon Socket implementation of SMTPServer and one which use MINA (in
the long term)
Added:
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java
- copied, changed from r825071,
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPCommandDispatcherIoHandler.java
Removed:
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPCommandDispatcherIoHandler.java
Modified:
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
Modified:
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java?rev=825085&r1=825084&r2=825085&view=diff
==============================================================================
---
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java
(original)
+++
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java
Wed Oct 14 11:12:39 2009
@@ -45,7 +45,7 @@
import org.apache.james.services.FileSystem;
import org.apache.james.services.MailServer;
import org.apache.james.smtpserver.mina.RequestValidationFilter;
-import org.apache.james.smtpserver.mina.SMTPCommandDispatcherIoHandler;
+import org.apache.james.smtpserver.mina.SMTPIoHandler;
import org.apache.james.smtpserver.mina.SMTPResponseFilter;
import org.apache.james.smtpserver.mina.filter.ConnectionFilter;
import org.apache.james.socket.configuration.JamesConfiguration;
@@ -585,10 +585,7 @@
Log logger = new AvalonLogger(getLogger());
ProtocolCodecFilter codecFactory = new ProtocolCodecFilter(new
TextLineCodecFactory());
SocketAcceptor acceptor = new NioSocketAcceptor();
- SMTPCommandDispatcherIoHandler ioHandler = new
SMTPCommandDispatcherIoHandler(handlerChain,
theConfigData,logger,buildSSLContextFactory());
- // init the handler
- ioHandler.init();
- acceptor.setHandler(ioHandler);
+ acceptor.setHandler(new SMTPIoHandler(handlerChain,
theConfigData,logger,buildSSLContextFactory()));
acceptor.getFilterChain().addLast("protocolCodecFactory",
codecFactory);
acceptor.getFilterChain().addLast("connectionFilter", new
ConnectionFilter(logger, connectionLimit, connPerIP));
Modified:
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java?rev=825085&r1=825084&r2=825085&view=diff
==============================================================================
---
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java
(original)
+++
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java
Wed Oct 14 11:12:39 2009
@@ -111,7 +111,7 @@
* @return authentication required or not
*/
boolean isAuthSupported();
-;
+
/**
* Returns the SMTP session id
Modified:
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java?rev=825085&r1=825084&r2=825085&view=diff
==============================================================================
---
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java
(original)
+++
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/CoreCmdHandlerLoader.java
Wed Oct 14 11:12:39 2009
@@ -25,7 +25,6 @@
import org.apache.james.smtpserver.core.esmtp.EhloCmdHandler;
import org.apache.james.smtpserver.core.esmtp.MailSizeEsmtpExtension;
import org.apache.james.smtpserver.core.esmtp.StartTlsCmdHandler;
-import org.apache.james.smtpserver.mina.SMTPCommandDispatcherIoHandler;
import org.apache.james.socket.shared.HandlersPackage;
import java.util.LinkedList;
@@ -36,6 +35,7 @@
*/
public class CoreCmdHandlerLoader implements HandlersPackage {
+ private final String COMMANDDISPATCHER =
SMTPCommandDispatcherLineHandler.class.getName();
private final String AUTHCMDHANDLER = AuthCmdHandler.class.getName();
private final String DATACMDHANDLER = DataCmdHandler.class.getName();
private final String EHLOCMDHANDLER = EhloCmdHandler.class.getName();
@@ -61,6 +61,7 @@
public CoreCmdHandlerLoader() {
// Insert the base commands in the Map
commands.add(WELCOMEMESSAGEHANDLER);
+ commands.add(COMMANDDISPATCHER);
commands.add(AUTHCMDHANDLER);
commands.add(DATACMDHANDLER);
commands.add(EHLOCMDHANDLER);
Copied:
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java
(from r825071,
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPCommandDispatcherIoHandler.java)
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java?p2=james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java&p1=james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPCommandDispatcherIoHandler.java&r1=825071&r2=825085&rev=825085&view=diff
==============================================================================
---
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPCommandDispatcherIoHandler.java
(original)
+++
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java
Wed Oct 14 11:12:39 2009
@@ -19,45 +19,40 @@
package org.apache.james.smtpserver.mina;
-import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.logging.Log;
-import org.apache.james.smtpserver.CommandHandler;
import org.apache.james.smtpserver.ConnectHandler;
+import org.apache.james.smtpserver.LineHandler;
import org.apache.james.smtpserver.SMTPConfiguration;
import org.apache.james.smtpserver.SMTPHandlerChain;
import org.apache.james.smtpserver.SMTPRequest;
-import org.apache.james.smtpserver.SMTPResponse;
-import org.apache.james.smtpserver.SMTPRetCode;
import org.apache.james.smtpserver.SMTPSession;
-import org.apache.james.smtpserver.core.UnknownCmdHandler;
-import org.apache.james.socket.shared.AbstractCommandDispatcher;
-import org.apache.james.socket.shared.ExtensibleHandler;
-import org.apache.james.socket.shared.WiringException;
-import org.apache.mina.core.service.IoHandler;
+import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.ssl.SslContextFactory;
-public class SMTPCommandDispatcherIoHandler extends
- AbstractCommandDispatcher<CommandHandler> implements ExtensibleHandler,
- IoHandler {
- private final static String SMTP_SESSION =
"com.googlecode.asyncmail.smtpserver.SMTPCommandDispatcherIoHandler.SMTP_SESSION";
- private final UnknownCmdHandler unknownCmdHandler = new
UnknownCmdHandler();
- private final static String[] mandatoryCommands = { "MAIL", "RCPT", "QUIT"
};
+/**
+ * This IoHandler handling the calling of ConnectHandler and LineHandlers
+ *
+ *
+ */
+public class SMTPIoHandler extends IoHandlerAdapter{
+ private final static String SMTP_SESSION =
"org.apache.james.smtpserver.mina.SMTPIoHandler.SMTP_SESSION";
+
private Log logger;
private SMTPHandlerChain chain;
private SMTPConfiguration conf;
private SslContextFactory contextFactory;
- public SMTPCommandDispatcherIoHandler(SMTPHandlerChain chain,
+ public SMTPIoHandler(SMTPHandlerChain chain,
SMTPConfiguration conf, Log logger) {
this(chain,conf,logger,null);
}
- public SMTPCommandDispatcherIoHandler(SMTPHandlerChain chain,
+ public SMTPIoHandler(SMTPHandlerChain chain,
SMTPConfiguration conf, Log logger, SslContextFactory
contextFactory) {
this.chain = chain;
this.conf = conf;
@@ -65,10 +60,6 @@
this.contextFactory = contextFactory;
}
-
- public void init() throws Exception {
- wireCommandHandler();
- }
/**
* @see org.apache.james.socket.shared.AbstractCommandDispatcher#getLog()
@@ -77,43 +68,23 @@
return logger;
}
- @Override
- protected List<String> getMandatoryCommands() {
- return Arrays.asList(mandatoryCommands);
- }
- /**
- * @see
org.apache.james.socket.shared.AbstractCommandDispatcher#getUnknownCommandHandler()
- */
- protected CommandHandler getUnknownCommandHandler() {
- return unknownCmdHandler;
- }
/**
- * @see
org.apache.james.socket.shared.AbstractCommandDispatcher#getUnknownCommandHandlerIdentifier()
+ * @see
org.apache.mina.core.service.IoHandlerAdapter#messageReceived(org.apache.mina.core.session.IoSession,
java.lang.Object)
*/
- protected String getUnknownCommandHandlerIdentifier() {
- return UnknownCmdHandler.UNKNOWN_COMMAND;
- }
-
- /**
- * @see
org.apache.james.socket.shared.ExtensibleHandler#getMarkerInterfaces()
- */
- public List<Class<?>> getMarkerInterfaces() {
- List<Class<?>> res = new LinkedList<Class<?>>();
- res.add(CommandHandler.class);
- res.add(ConnectHandler.class);
- return res;
- }
-
-
- protected void wireCommandHandler() throws WiringException {
- List<CommandHandler> chandlers =
chain.getHandlers(CommandHandler.class);
- List<Class<?>> markerInterfaces = getMarkerInterfaces();
- for (int i = 0; i < markerInterfaces.size(); i++) {
- wireExtensions(markerInterfaces.get(i), chandlers);
+ public void messageReceived(IoSession session, Object message)
+ throws Exception {
+ SMTPSession smtpSession = (SMTPSession)
session.getAttribute(SMTP_SESSION);
+ LinkedList<LineHandler> lineHandlers =
chain.getHandlers(LineHandler.class);
+ if (lineHandlers.size() > 0) {
+ // thats not really optimal but it allow us to keep things as
generic as possible
+ // Will prolly get refactored later
+ byte[] line = ((SMTPRequest)
message).toString().getBytes("US-ASCII");
+ ((LineHandler) lineHandlers.getLast()).onLine(smtpSession, line);
}
}
+
/**
* @see
org.apache.mina.core.service.IoHandler#exceptionCaught(org.apache.mina.core.session.IoSession,
* java.lang.Throwable)
@@ -128,68 +99,6 @@
}
/**
- * @see
org.apache.mina.core.service.IoHandler#messageReceived(org.apache.mina.core.session.IoSession,
- * java.lang.Object)
- */
- public void messageReceived(IoSession session, Object message)
- throws Exception {
- if (message instanceof SMTPRequest) {
- SMTPRequest request = (SMTPRequest) message;
- SMTPSession smtpSession = (SMTPSession) session
- .getAttribute(SMTP_SESSION);
- List<CommandHandler> commandHandlers = getCommandHandlers(request
- .getCommand(), smtpSession);
- // fetch the command handlers registered to the command
- if (commandHandlers == null) {
- // end the session
- SMTPResponse resp = new SMTPResponse(SMTPRetCode.LOCAL_ERROR,
- "Local configuration error: unable to find a command
handler.");
- resp.setEndSession(true);
- session.write(resp);
- } else {
- int count = commandHandlers.size();
- for (int i = 0; i < count; i++) {
- SMTPResponse response = commandHandlers.get(i).onCommand(
- smtpSession, request);
-
- // if the response is received, stop processing of command
- // handlers
- if (response != null) {
- session.write(response);
- break;
- }
-
- // NOTE we should never hit this line, otherwise we ended
- // the
- // CommandHandlers with
- // no responses.
- // (The note is valid for i == count-1)
- }
-
- }
-
- } else {
- logger.error("Invalid message object");
- }
-
- }
-
- /**
- * Not implemented
- */
- public void messageSent(IoSession session, Object message) throws
Exception {
- // Nothing todo here
- }
-
- /**
- * Not implemented
- */
- public void sessionClosed(IoSession session) throws Exception {
- // Nothing todo here
-
- }
-
- /**
* @see
org.apache.mina.core.service.IoHandler#sessionCreated(org.apache.mina.core.session.IoSession)
*/
public void sessionCreated(IoSession session) throws Exception {
Modified:
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java?rev=825085&r1=825084&r2=825085&view=diff
==============================================================================
---
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
(original)
+++
james/server/sandbox/active/mina_experiments/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
Wed Oct 14 11:12:39 2009
@@ -287,8 +287,7 @@
session.suspendRead();
SslFilter filter = new SslFilter(context);
resetState();
- session.getFilterChain()
- .addFirst("sslFilter", filter);
+ session.getFilterChain().addFirst("sslFilter", filter);
session.resumeRead();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]