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: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to