You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/01/19 12:35:02 UTC

svn commit: r900731 [3/4] - in /james/server/trunk: mina-socket-library/src/main/java/org/apache/james/socket/mina/ mina-socket-library/src/main/java/org/apache/james/socket/mina/filter/ pop3server-function/src/main/java/org/apache/james/pop3server/ po...

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/RemoteManagerSessionImpl.java Tue Jan 19 11:34:58 2010
@@ -19,13 +19,14 @@
 
 package org.apache.james.remotemanager.mina;
 
+import java.net.InetSocketAddress;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.logging.Log;
-import org.apache.james.remotemanager.LineHandler;
+import org.apache.james.api.protocol.LineHandler;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.remotemanager.RemoteManagerHandlerConfigurationData;
-import org.apache.james.remotemanager.RemoteManagerResponse;
 import org.apache.james.remotemanager.RemoteManagerSession;
 import org.apache.james.remotemanager.mina.filter.FilterLineHandlerAdapter;
 import org.apache.james.remotemanager.mina.filter.RemoteManagerResponseFilter;
@@ -37,6 +38,7 @@
     private Map<String, Object> state = new HashMap<String, Object>();
     private RemoteManagerHandlerConfigurationData config;
     private int lineHandlerCount = 0;
+    private InetSocketAddress socketAddress;
 
     public final static String REMOTEMANAGER_SESSION = "REMOTEMANAGER_SESSION";
 
@@ -45,6 +47,7 @@
         this.logger = logger;
         this.session = session;
         this.config = config;
+        this.socketAddress = (InetSocketAddress) session.getRemoteAddress();
     }
 
     /*
@@ -59,17 +62,6 @@
     /*
      * (non-Javadoc)
      * 
-     * @seeorg.apache.james.remotemanager.RemoteManagerSession#
-     * writeRemoteManagerResponse
-     * (org.apache.james.remotemanager.RemoteManagerResponse)
-     */
-    public void writeRemoteManagerResponse(RemoteManagerResponse response) {
-        session.write(response);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
      * @see org.apache.james.api.protocol.LogEnabledSession#getLogger()
      */
     public Log getLogger() {
@@ -108,8 +100,32 @@
      * (non-Javadoc)
      * @see org.apache.james.remotemanager.RemoteManagerSession#pushLineHandler(org.apache.james.remotemanager.LineHandler)
      */
-    public void pushLineHandler(LineHandler overrideCommandHandler) {
+    public void pushLineHandler(LineHandler<RemoteManagerSession> overrideCommandHandler) {
         lineHandlerCount++;
         session.getFilterChain().addAfter(RemoteManagerResponseFilter.NAME, "lineHandler" + lineHandlerCount, new FilterLineHandlerAdapter(overrideCommandHandler));
     }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.protocol.LogEnabledSession#getRemoteHost()
+     */
+    public String getRemoteHost() {
+        return socketAddress.getHostName();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.protocol.LogEnabledSession#getRemoteIPAddress()
+     */
+    public String getRemoteIPAddress() {
+        return socketAddress.getAddress().getHostAddress();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.protocol.LogEnabledSession#writeResponse(org.apache.james.api.protocol.Response)
+     */
+    public void writeResponse(Response response) {
+        session.write(response);        
+    }
 }

Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/mina/filter/FilterLineHandlerAdapter.java Tue Jan 19 11:34:58 2010
@@ -18,7 +18,7 @@
  ****************************************************************/
 package org.apache.james.remotemanager.mina.filter;
 
-import org.apache.james.remotemanager.LineHandler;
+import org.apache.james.api.protocol.LineHandler;
 import org.apache.james.remotemanager.RemoteManagerSession;
 import org.apache.james.remotemanager.mina.RemoteManagerSessionImpl;
 import org.apache.mina.core.filterchain.IoFilterAdapter;
@@ -31,9 +31,9 @@
  */
 public final class FilterLineHandlerAdapter extends IoFilterAdapter {
 
-    private LineHandler lineHandler;
+    private LineHandler<RemoteManagerSession> lineHandler;
 
-    public FilterLineHandlerAdapter(LineHandler lineHandler) {
+    public FilterLineHandlerAdapter(LineHandler<RemoteManagerSession> lineHandler) {
         this.lineHandler = lineHandler;
     }
 

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java Tue Jan 19 11:34:58 2010
@@ -19,7 +19,9 @@
 
 package org.apache.james.smtpserver.protocol;
 
-public final class SMTPRequest {
+import org.apache.james.api.protocol.Request;
+
+public final class SMTPRequest implements Request{
     private final String command;
 
     private final String argument;

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java Tue Jan 19 11:34:58 2010
@@ -22,21 +22,18 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.james.api.protocol.RetCodeResponse;
+
 /**
  * Contains an SMTP result
  */
-public final class SMTPResponse {
+public final class SMTPResponse implements RetCodeResponse {
 
     private String retCode = null;
     private List<CharSequence> lines = null;
     private String rawLine = null;
     private boolean endSession = false;
     
-
-    public SMTPResponse() {
-        //TODO: Should we remove this constructor to force the developers to specify all needed informations ? 
-    }
-    
     /**
      * Construct a new SMTPResponse. The given code and description can not be null, if null an IllegalArgumentException
      * get thrown

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java Tue Jan 19 11:34:58 2010
@@ -21,6 +21,7 @@
 
 import java.util.Map;
 
+import org.apache.james.api.protocol.LineHandler;
 import org.apache.james.api.protocol.TLSSupportedSession;
 
 /**
@@ -41,20 +42,6 @@
     /** the Session state */
     public final static String SESSION_STATE_MAP = "SESSION_STATE_MAP";
 
-
-    /**
-     * Returns Map that consists of the state of the SMTPSession per mail
-     *
-     * @return map of the current SMTPSession state per mail
-     */
-    Map<String, Object> getState();
-
-    /**
-     * Resets message-specific, but not authenticated user, state.
-     *
-     */
-    void resetState();
-
     /**
      * Returns the service wide hello name
      *
@@ -138,17 +125,12 @@
      * Put a new line handler in the chain
      * @param overrideCommandHandler
      */
-    void pushLineHandler(LineHandler overrideCommandHandler);
+    void pushLineHandler(LineHandler<SMTPSession> overrideCommandHandler);
     
     /**
      * Pop the last command handler 
      */
     void popLineHandler();
-
-    /**
-     * Write an SMTPResponse to the client
-     */
-    void writeSMTPResponse(SMTPResponse response);
     
     /**
      * Sleep for the given ms 

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -22,9 +22,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.james.api.protocol.CommandHandler;
 import org.apache.james.api.protocol.ExtensibleHandler;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -36,7 +37,7 @@
  * Abstract class which Handle hooks.
  * 
  */
-public abstract class AbstractHookableCmdHandler<Hook> implements CommandHandler, ExtensibleHandler {
+public abstract class AbstractHookableCmdHandler<Hook> implements CommandHandler<SMTPSession>, ExtensibleHandler {
 
 
     private List<Hook> hooks;
@@ -48,7 +49,7 @@
      * @see org.apache.james.smtpserver.protocol.CommandHandler#onCommand(org.apache.james.smtpserver.protocol.SMTPSession,
      *      java.lang.String, java.lang.String)
      */
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+    public Response onCommand(SMTPSession session, Request request) {
         String command = request.getCommand();
         String parameters = request.getArgument();
         SMTPResponse response = doFilterChecks(session, command, parameters);

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -23,13 +23,14 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.james.api.protocol.CommandHandler;
 import org.apache.james.api.protocol.ExtensibleHandler;
+import org.apache.james.api.protocol.LineHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.api.protocol.WiringException;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.MailEnvelopeImpl;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -39,9 +40,9 @@
 /**
   * handles DATA command
  */
-public class DataCmdHandler implements CommandHandler, ExtensibleHandler {
+public class DataCmdHandler implements CommandHandler<SMTPSession>, ExtensibleHandler {
 
-    public final class DataConsumerLineHandler implements LineHandler {
+    public final class DataConsumerLineHandler implements LineHandler<SMTPSession> {
         /**
          * @see org.apache.james.smtpserver.protocol.LineHandler#onLine(org.apache.james.smtpserver.protocol.SMTPSession, byte[])
          */
@@ -54,12 +55,12 @@
         }
     }
 
-    public final class DataLineFilterWrapper implements LineHandler {
+    public final class DataLineFilterWrapper implements LineHandler<SMTPSession> {
 
-        private DataLineFilter filter;
-        private LineHandler next;
+        private DataLineFilter<SMTPSession> filter;
+        private LineHandler<SMTPSession> next;
         
-        public DataLineFilterWrapper(DataLineFilter filter, LineHandler next) {
+        public DataLineFilterWrapper(DataLineFilter<SMTPSession> filter, LineHandler<SMTPSession> next) {
             this.filter = filter;
             this.next = next;
         }
@@ -71,14 +72,13 @@
    
     public final static String MAILENV = "MAILENV";
     
-    private LineHandler lineHandler;
+    private LineHandler<SMTPSession> lineHandler;
     
     /**
      * process DATA command
      *
-     * @see org.apache.james.smtpserver.protocol.CommandHandler#onCommand(SMTPSession)
      */
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+    public Response onCommand(SMTPSession session, Request request) {
         String parameters = request.getArgument();
         SMTPResponse response = doDATAFilter(session,parameters);
         
@@ -136,7 +136,7 @@
     public void wireExtensions(Class interfaceName, List extension) throws WiringException {
         if (DataLineFilter.class.equals(interfaceName)) {
 
-            LineHandler lineHandler = new DataConsumerLineHandler();
+            LineHandler<SMTPSession> lineHandler = new DataConsumerLineHandler();
             for (int i = extension.size() - 1; i >= 0; i--) {
                 lineHandler = new DataLineFilterWrapper((DataLineFilter) extension.get(i), lineHandler);
             }
@@ -157,7 +157,7 @@
         return null;
     }
     
-    protected LineHandler getLineHandler() {
+    protected LineHandler<SMTPSession> getLineHandler() {
     	return lineHandler;
     }
 

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineFilter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineFilter.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineFilter.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineFilter.java Tue Jan 19 11:34:58 2010
@@ -21,13 +21,13 @@
 
 package org.apache.james.smtpserver.protocol.core;
 
-import org.apache.james.smtpserver.protocol.LineHandler;
-import org.apache.james.smtpserver.protocol.SMTPSession;
+import org.apache.james.api.protocol.LineHandler;
+import org.apache.james.api.protocol.ProtocolSession;
 
 /**
  * DataLineFilter are used to check the Data stream while the message is
  * being received.
  */
-public interface DataLineFilter {
-    void onLine(SMTPSession session, String line, LineHandler next);
+public interface DataLineFilter<Session extends ProtocolSession> {
+    void onLine(Session session, String line, LineHandler<Session> next);
 }
\ No newline at end of file

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineMessageHookHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineMessageHookHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineMessageHookHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineMessageHookHandler.java Tue Jan 19 11:34:58 2010
@@ -29,10 +29,10 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.james.api.protocol.ExtensibleHandler;
+import org.apache.james.api.protocol.LineHandler;
 import org.apache.james.api.protocol.WiringException;
 import org.apache.james.dsn.DSNStatus;
 import org.apache.james.lifecycle.LogEnabled;
-import org.apache.james.smtpserver.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.MailEnvelopeImpl;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
@@ -42,7 +42,7 @@
 import org.apache.james.smtpserver.protocol.hook.MessageHook;
 import org.apache.mailet.Mail;
 
-public final class DataLineMessageHookHandler implements DataLineFilter, ExtensibleHandler, LogEnabled {
+public final class DataLineMessageHookHandler implements DataLineFilter<SMTPSession>, ExtensibleHandler, LogEnabled {
 
     /** This log is the fall back shared by all instances */
     private static final Log FALLBACK_LOG = LogFactory.getLog(DataLineMessageHookHandler.class);
@@ -54,11 +54,12 @@
     
     private List rHooks;
     
+
     /*
      * (non-Javadoc)
-     * @see org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.smtpserver.protocol.SMTPSession, java.lang.String, org.apache.james.smtpserver.protocol.LineHandler)
+     * @see org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.api.protocol.LogEnabledSession, java.lang.String, org.apache.james.api.protocol.LineHandler)
      */
-    public void onLine(SMTPSession session, String rawLine, LineHandler next) {
+    public void onLine(SMTPSession session, String rawLine, LineHandler<SMTPSession> next) {
         MailEnvelopeImpl env = (MailEnvelopeImpl) session.getState().get(DataCmdHandler.MAILENV);
         OutputStream out = env.getMessageOutputStream();
         byte[] line = rawLine.getBytes();
@@ -90,7 +91,7 @@
             
             session.getLogger().error(
                     "Unknown error occurred while processing DATA.", e);
-            session.writeSMTPResponse(response);
+            session.writeResponse(response);
             return;
         }
     }
@@ -120,7 +121,7 @@
                     
                     //if the response is received, stop processing of command handlers
                     if(response != null) {
-                        session.writeSMTPResponse(response);
+                        session.writeResponse(response);
                         break;
                     }
                 }

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/ExpnCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/ExpnCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/ExpnCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/ExpnCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,9 +24,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.james.api.protocol.CommandHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -34,7 +35,7 @@
 /**
   * Handles EXPN command
   */
-public class ExpnCmdHandler implements CommandHandler {
+public class ExpnCmdHandler implements CommandHandler<SMTPSession> {
 
     /**
      * The name of the command handled by the command handler
@@ -47,7 +48,7 @@
      * not implemented.
      *
      */
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+    public Response onCommand(SMTPSession session, Request request) {
         return new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" EXPN is not supported");
     }
     

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/HelpCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/HelpCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/HelpCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/HelpCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,9 +24,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.james.api.protocol.CommandHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -34,7 +35,7 @@
 /**
   * Handles HELP command
   */
-public class HelpCmdHandler implements CommandHandler {
+public class HelpCmdHandler implements CommandHandler<SMTPSession> {
     /**
      * The name of the command handled by the command handler
      */
@@ -45,7 +46,7 @@
      * handles HELP command
      *
     **/
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request){
+    public Response onCommand(SMTPSession session, Request request){
         return new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" " + COMMAND_NAME + " is not supported");
     }
 

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/MailCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/MailCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/MailCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/MailCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -28,8 +28,10 @@
 import java.util.Map;
 import java.util.StringTokenizer;
 
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
+import org.apache.james.api.protocol.RetCodeResponse;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -48,13 +50,15 @@
      */
     private Map<String, MailParametersHook> paramHooks;
 
-    /**
-     * @see org.apache.james.smtpserver.protocol.core.AbstractHookableCmdHandler#onCommand(org.apache.james.smtpserver.protocol.SMTPSession, org.apache.james.smtpserver.protocol.SMTPRequest)
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.smtpserver.protocol.core.AbstractHookableCmdHandler#onCommand(org.apache.james.smtpserver.protocol.SMTPSession, org.apache.james.api.protocol.Request)
      */
-	public SMTPResponse onCommand(SMTPSession session,SMTPRequest request) {
-	    SMTPResponse response =  super.onCommand(session, request);
+	public Response onCommand(SMTPSession session, Request request) {
+	    Response response =  super.onCommand(session, request);
 		// Check if the response was not ok 
-		if (response.getRetCode().equals(SMTPRetCode.MAIL_OK) == false) {
+		if (((RetCodeResponse)response).getRetCode().equals(SMTPRetCode.MAIL_OK) == false) {
 			// cleanup the session
 			session.getState().remove(SMTPSession.SENDER);
 		}

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/NoopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/NoopCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/NoopCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/NoopCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,9 +24,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.james.api.protocol.CommandHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -34,7 +35,7 @@
 /**
   * Handles NOOP command
   */
-public class NoopCmdHandler implements CommandHandler {
+public class NoopCmdHandler implements CommandHandler<SMTPSession> {
 
     /**
      * The name of the command handled by the command handler
@@ -46,7 +47,7 @@
      * Just sends back an OK and logs the command.
      *
      */
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+    public Response onCommand(SMTPSession session, Request request) {
         return new SMTPResponse(SMTPRetCode.MAIL_OK, DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.UNDEFINED_STATUS)+" OK");
     }
     
@@ -59,4 +60,5 @@
         
         return implCommands;
     }
+
 }

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/RcptCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/RcptCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/RcptCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/RcptCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,8 +24,8 @@
 import java.util.Locale;
 import java.util.StringTokenizer;
 
+import org.apache.james.api.protocol.CommandHandler;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -37,7 +37,7 @@
  * Handles RCPT command
  */
 public class RcptCmdHandler extends AbstractHookableCmdHandler<RcptHook> implements
-        CommandHandler {
+        CommandHandler<SMTPSession> {
 
     public static final String CURRENT_RECIPIENT = "CURRENT_RECIPIENT"; // Current recipient
 

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/ReceivedDataLineFilter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/ReceivedDataLineFilter.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/ReceivedDataLineFilter.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/ReceivedDataLineFilter.java Tue Jan 19 11:34:58 2010
@@ -22,12 +22,12 @@
 import java.util.Date;
 import java.util.List;
 
-import org.apache.james.smtpserver.protocol.LineHandler;
+import org.apache.james.api.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.SMTPSession;
 import org.apache.mailet.base.RFC2822Headers;
 import org.apache.mailet.base.RFC822DateFormat;
 
-public class ReceivedDataLineFilter implements DataLineFilter {
+public class ReceivedDataLineFilter implements DataLineFilter<SMTPSession> {
 
     private final static String SOFTWARE_TYPE = "JAMES SMTP Server ";
 
@@ -42,9 +42,9 @@
 
     /*
      * (non-Javadoc)
-     * @see org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.smtpserver.protocol.SMTPSession, java.lang.String, org.apache.james.smtpserver.protocol.LineHandler)
+     * @see org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.api.protocol.LogEnabledSession, java.lang.String, org.apache.james.api.protocol.LineHandler)
      */
-    public void onLine(SMTPSession session,  String line, LineHandler next) {
+    public void onLine(SMTPSession session,  String line, LineHandler<SMTPSession> next) {
         if (session.getState().containsKey(HEADERS_WRITTEN) == false) {
             addNewReceivedMailHeaders(session, next);
             session.getState().put(HEADERS_WRITTEN, true);
@@ -52,7 +52,7 @@
         next.onLine(session, line);
     }
 
-    private void addNewReceivedMailHeaders(SMTPSession session, LineHandler next) {
+    private void addNewReceivedMailHeaders(SMTPSession session, LineHandler<SMTPSession> next) {
         StringBuilder headerLineBuffer = new StringBuilder();
 
         String heloMode = (String) session.getConnectionState().get(

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/RsetCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/RsetCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/RsetCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/RsetCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,9 +24,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.james.api.protocol.CommandHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -34,7 +35,7 @@
 /**
   * Handles RSET command
   */
-public class RsetCmdHandler implements CommandHandler {
+public class RsetCmdHandler implements CommandHandler<SMTPSession> {
     /**
      * The name of the command handled by the command handler
      */
@@ -44,7 +45,7 @@
      * handles RSET command
      *
     **/
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+    public Response onCommand(SMTPSession session, Request request) {
         return doRSET(session, request.getArgument());
     }
 

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/SMTPCommandDispatcherLineHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/SMTPCommandDispatcherLineHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/SMTPCommandDispatcherLineHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/SMTPCommandDispatcherLineHandler.java Tue Jan 19 11:34:58 2010
@@ -27,16 +27,17 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.james.api.protocol.AbstractCommandDispatcher;
+import org.apache.james.api.protocol.CommandHandler;
+import org.apache.james.api.protocol.LineHandler;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.lifecycle.LogEnabled;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
 
 
-public class SMTPCommandDispatcherLineHandler extends AbstractCommandDispatcher<CommandHandler> implements LogEnabled, LineHandler {
+public class SMTPCommandDispatcherLineHandler extends AbstractCommandDispatcher<SMTPSession> implements LogEnabled, LineHandler<SMTPSession> {
 
     /** This log is the fall back shared by all instances */
     private static final Log FALLBACK_LOG = LogFactory.getLog(SMTPCommandDispatcherLineHandler.class);
@@ -45,7 +46,7 @@
     private Log serviceLog = FALLBACK_LOG;
     
 
-    private final CommandHandler unknownHandler = new UnknownCmdHandler();
+    private final CommandHandler<SMTPSession> unknownHandler = new UnknownCmdHandler();
 
     private final static String[] mandatoryCommands = { "MAIL" , "RCPT", "DATA"};
 
@@ -70,19 +71,19 @@
         }
         curCommandName = curCommandName.toUpperCase(Locale.US);
 
-        List<CommandHandler> commandHandlers = getCommandHandlers(curCommandName, session);
+        List<CommandHandler<SMTPSession>> commandHandlers = getCommandHandlers(curCommandName, session);
         // 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.writeSMTPResponse(resp);
+            session.writeResponse(resp);
         } else {
             int count = commandHandlers.size();
             for (int i = 0; i < count; i++) {
-                SMTPResponse response = commandHandlers.get(i).onCommand(session, new SMTPRequest(curCommandName, curCommandArgument));
+                Response response = commandHandlers.get(i).onCommand(session, new SMTPRequest(curCommandName, curCommandArgument));
 
-                session.writeSMTPResponse(response);
+                session.writeResponse(response);
 
                 // if the response is received, stop processing of command
                 // handlers
@@ -134,7 +135,7 @@
     /**
      * @see org.apache.james.api.protocol.AbstractCommandDispatcher#getUnknownCommandHandler()
      */
-    protected CommandHandler getUnknownCommandHandler() {
+    protected CommandHandler<SMTPSession> getUnknownCommandHandler() {
         return unknownHandler;
     }
 

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/UnknownCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/UnknownCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/UnknownCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/UnknownCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,9 +24,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.james.api.protocol.CommandHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -34,7 +35,7 @@
 /**
   * Default command handler for handling unknown commands
   */
-public class UnknownCmdHandler implements CommandHandler {
+public class UnknownCmdHandler implements CommandHandler<SMTPSession>{
 
     /**
      * The name of the command handled by the command handler
@@ -46,7 +47,7 @@
      * Returns an error response and logs the command.
      *
     **/
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+    public Response onCommand(SMTPSession session, Request request) {
         StringBuilder result = new StringBuilder();
         result.append(DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_INVALID_CMD))
                       .append(" Command ")

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/VrfyCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/VrfyCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/VrfyCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/VrfyCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,9 +24,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.james.api.protocol.CommandHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -34,7 +35,7 @@
 /**
   * Command handler for handling VRFY command
   */
-public class VrfyCmdHandler implements CommandHandler {
+public class VrfyCmdHandler implements CommandHandler<SMTPSession> {
 
     private final String COMMAND_NAME = "VRFY";
 
@@ -43,9 +44,8 @@
      * This method informs the client that the command is
      * not implemented.
      *
-     * @see org.apache.james.smtpserver.protocol.CommandHandler#onCommand(org.apache.james.smtpserver.protocol.SMTPSession, java.lang.String, java.lang.String) 
-    **/
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+     */
+    public Response onCommand(SMTPSession session, Request request) {
         return new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND, 
                 DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" VRFY is not supported");
     }

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/WelcomeMessageHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/WelcomeMessageHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/WelcomeMessageHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/WelcomeMessageHandler.java Tue Jan 19 11:34:58 2010
@@ -22,7 +22,7 @@
 
 import java.util.Date;
 
-import org.apache.james.smtpserver.protocol.ConnectHandler;
+import org.apache.james.api.protocol.ConnectHandler;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -31,7 +31,7 @@
 /**
  * This ConnectHandler print the greeting on connecting
  */
-public class WelcomeMessageHandler implements ConnectHandler {
+public class WelcomeMessageHandler implements ConnectHandler<SMTPSession> {
 
     /**
      * Static RFC822DateFormat used to generate date headers
@@ -59,7 +59,7 @@
         } else {
             welcomeResponse = new SMTPResponse(SMTPRetCode.SERVICE_READY,smtpGreeting);
         }
-        session.writeSMTPResponse(welcomeResponse);
+        session.writeResponse(welcomeResponse);
     }
     
     protected String getProductName() {

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/AuthCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/AuthCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/AuthCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/AuthCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -29,12 +29,13 @@
 import java.util.StringTokenizer;
 
 import org.apache.commons.codec.binary.Base64;
+import org.apache.james.api.protocol.CommandHandler;
 import org.apache.james.api.protocol.ExtensibleHandler;
+import org.apache.james.api.protocol.LineHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.api.protocol.WiringException;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.LineHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -54,14 +55,14 @@
  * system (simple pluggabilty against external authentication services).
  */
 public class AuthCmdHandler
-    implements CommandHandler, EhloExtension, ExtensibleHandler, MailParametersHook {
+    implements CommandHandler<SMTPSession>, EhloExtension, ExtensibleHandler, MailParametersHook {
 
-    private abstract class AbstractSMTPLineHandler implements LineHandler {
+    private abstract class AbstractSMTPLineHandler implements LineHandler<SMTPSession> {
 
         public void onLine(SMTPSession session, String l) {
             SMTPResponse res = handleCommand(session, l);
             session.popLineHandler();
-            session.writeSMTPResponse(res);
+            session.writeResponse(res);
            
         }
 
@@ -104,7 +105,7 @@
      * handles AUTH command
      *
      */
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+    public Response onCommand(SMTPSession session, Request request) {
         return doAUTH(session, request.getArgument());
     }
 
@@ -254,7 +255,7 @@
 
             private String user;
 
-            public LineHandler setUser(String user) {
+            public LineHandler<SMTPSession> setUser(String user) {
                 this.user = user;
                 return this;
             }

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/EhloCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/EhloCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/EhloCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/EhloCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,7 +24,6 @@
 import java.util.List;
 
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -35,8 +34,7 @@
 /**
  * Handles EHLO command
  */
-public class EhloCmdHandler extends AbstractHookableCmdHandler<HeloHook> implements
-        CommandHandler {
+public class EhloCmdHandler extends AbstractHookableCmdHandler<HeloHook> {
 
     /**
      * The name of the command handled by the command handler
@@ -56,15 +54,12 @@
      *            the argument passed in with the command by the SMTP client
      */
     private SMTPResponse doEHLO(SMTPSession session, String argument) {
-        SMTPResponse resp = new SMTPResponse();
-        resp.setRetCode(SMTPRetCode.MAIL_OK);
-
-        session.getConnectionState().put(SMTPSession.CURRENT_HELO_MODE,
-                COMMAND_NAME);
-
-        resp.appendLine(new StringBuilder(session.getHelloName()).append(" Hello ").append(argument)
+        SMTPResponse resp = new SMTPResponse(SMTPRetCode.MAIL_OK, new StringBuilder(session.getHelloName()).append(" Hello ").append(argument)
                 .append(" (").append(session.getRemoteHost()).append(" [")
                 .append(session.getRemoteIPAddress()).append("])"));
+        
+        session.getConnectionState().put(SMTPSession.CURRENT_HELO_MODE,
+                COMMAND_NAME);
 
         processExtensions(session, resp);
 
@@ -72,6 +67,7 @@
         resp.appendLine("ENHANCEDSTATUSCODES");
         // see http://issues.apache.org/jira/browse/JAMES-419
         resp.appendLine("8BITMIME");
+ 
         return resp;
 
     }

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/MailSizeEsmtpExtension.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/MailSizeEsmtpExtension.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/MailSizeEsmtpExtension.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/MailSizeEsmtpExtension.java Tue Jan 19 11:34:58 2010
@@ -6,8 +6,8 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.james.api.protocol.LineHandler;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.MailEnvelope;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -20,7 +20,7 @@
 /**
  * Handle the ESMTP SIZE extension.
  */
-public class MailSizeEsmtpExtension implements MailParametersHook, EhloExtension, DataLineFilter, MessageHook {
+public class MailSizeEsmtpExtension implements MailParametersHook, EhloExtension, DataLineFilter<SMTPSession>, MessageHook {
 
     private final static String MESG_SIZE = "MESG_SIZE"; // The size of the
     private final static String MESG_FAILED = "MESG_FAILED";   // Message failed flag
@@ -115,11 +115,12 @@
         return null;
     }
 
+
     /*
      * (non-Javadoc)
-     * @see org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.smtpserver.protocol.SMTPSession, java.lang.String, org.apache.james.smtpserver.protocol.LineHandler)
+     * @see org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.api.protocol.LogEnabledSession, java.lang.String, org.apache.james.api.protocol.LineHandler)
      */
-    public void onLine(SMTPSession session, String rawline, LineHandler next) {
+    public void onLine(SMTPSession session, String rawline, LineHandler<SMTPSession> next) {
         Boolean failed = (Boolean) session.getState().get(MESG_FAILED);
         // If we already defined we failed and sent a reply we should simply
         // wait for a CRLF.CRLF to be sent by the client.

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/StartTlsCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/StartTlsCmdHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/StartTlsCmdHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/StartTlsCmdHandler.java Tue Jan 19 11:34:58 2010
@@ -24,9 +24,10 @@
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.james.api.protocol.CommandHandler;
+import org.apache.james.api.protocol.Request;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.dsn.DSNStatus;
-import org.apache.james.smtpserver.protocol.CommandHandler;
-import org.apache.james.smtpserver.protocol.SMTPRequest;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
@@ -34,7 +35,7 @@
 /**
  * Handles STARTTLS command
  */
-public class StartTlsCmdHandler implements CommandHandler, EhloExtension {
+public class StartTlsCmdHandler implements CommandHandler<SMTPSession>, EhloExtension {
 	/**
 	 * The name of the command handled by the command handler
 	 */
@@ -53,10 +54,8 @@
 	 * Handler method called upon receipt of a STARTTLS command. Resets
 	 * message-specific, but not authenticated user, state.
 	 * 
-	 * @see org.apache.james.smtpserver.protocol.CommandHandler#onCommand(org.apache.james.smtpserver.protocol.SMTPSession,
-	 *      java.lang.String, java.lang.String)
 	 */
-    public SMTPResponse onCommand(SMTPSession session, SMTPRequest request) {
+    public Response onCommand(SMTPSession session, Request request) {
 		SMTPResponse response = null;
 		String command = request.getCommand();
 		String parameters = request.getArgument();
@@ -69,7 +68,7 @@
 				} else {
 					response = new SMTPResponse("501 "+ DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_INVALID_ARG) + " Syntax error (no parameters allowed) with STARTTLS command");
 				}
-				session.writeSMTPResponse(response);
+				session.writeResponse(response);
 				try {
 					if (!session.isTLSStarted()) {
 						session.startTLS();

Modified: james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/DNSRBLHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/DNSRBLHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/DNSRBLHandler.java (original)
+++ james/server/trunk/smtp-protocol-library/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/DNSRBLHandler.java Tue Jan 19 11:34:58 2010
@@ -32,9 +32,9 @@
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.james.api.protocol.ConnectHandler;
 import org.apache.james.dsn.DSNStatus;
 import org.apache.james.lifecycle.Configurable;
-import org.apache.james.smtpserver.protocol.ConnectHandler;
 import org.apache.james.smtpserver.protocol.DNSService;
 import org.apache.james.smtpserver.protocol.SMTPSession;
 import org.apache.james.smtpserver.protocol.hook.HookResult;
@@ -45,7 +45,7 @@
 /**
   * Connect handler for DNSRBL processing
   */
-public class DNSRBLHandler implements  ConnectHandler, RcptHook, Configurable{
+public class DNSRBLHandler implements  ConnectHandler<SMTPSession>, RcptHook, Configurable{
     
     /** This log is the fall back shared by all instances */
     private static final Log FALLBACK_LOG = LogFactory.getLog(DNSRBLHandler.class);
@@ -140,7 +140,6 @@
     /**
      * check if the remote Ip address is block listed
      *
-     * @see org.apache.james.smtpserver.protocol.ConnectHandler#onConnect(SMTPSession)
     **/
     public void onConnect(SMTPSession session) {
         checkDNSRBL(session, session.getRemoteIPAddress());

Modified: james/server/trunk/smtp-protocol-library/src/test/java/org/apache/james/smtpserver/protocol/BaseFakeSMTPSession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtp-protocol-library/src/test/java/org/apache/james/smtpserver/protocol/BaseFakeSMTPSession.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtp-protocol-library/src/test/java/org/apache/james/smtpserver/protocol/BaseFakeSMTPSession.java (original)
+++ james/server/trunk/smtp-protocol-library/src/test/java/org/apache/james/smtpserver/protocol/BaseFakeSMTPSession.java Tue Jan 19 11:34:58 2010
@@ -25,9 +25,9 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.james.smtpserver.protocol.LineHandler;
+import org.apache.james.api.protocol.LineHandler;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.smtpserver.protocol.SMTPConfiguration;
-import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPSession;
 
 /**
@@ -136,17 +136,19 @@
         throw new UnsupportedOperationException("Unimplemented Stub Method");
     }
 
-    /**
-     * @see org.apache.james.smtpserver.protocol.SMTPSession#pushLineHandler(org.apache.james.smtpserver.protocol.LineHandler)
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.smtpserver.protocol.SMTPSession#pushLineHandler(org.apache.james.api.protocol.LineHandler)
      */
-    public void pushLineHandler(LineHandler overrideCommandHandler) {
+    public void pushLineHandler(LineHandler<SMTPSession> overrideCommandHandler) {
         throw new UnsupportedOperationException("Unimplemented Stub Method");
     }
 
-    /**
-     * @see org.apache.james.smtpserver.protocol.SMTPSession#writeSMTPResponse(org.apache.james.smtpserver.protocol.SMTPResponse)
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.protocol.LogEnabledSession#writeResponse(org.apache.james.api.protocol.Response)
      */
-    public void writeSMTPResponse(SMTPResponse response) {
+    public void writeResponse(Response response) {
         throw new UnsupportedOperationException("Unimplemented Stub Method");
     }
 

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandler.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandler.java Tue Jan 19 11:34:58 2010
@@ -28,9 +28,11 @@
 import java.util.Map;
 import java.util.Random;
 
+import org.apache.james.api.protocol.ConnectHandler;
+import org.apache.james.api.protocol.LineHandler;
 import org.apache.james.api.protocol.ProtocolHandlerChain;
-import org.apache.james.smtpserver.protocol.ConnectHandler;
-import org.apache.james.smtpserver.protocol.LineHandler;
+import org.apache.james.api.protocol.Response;
+import org.apache.james.api.protocol.RetCodeResponse;
 import org.apache.james.smtpserver.protocol.SMTPConfiguration;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
@@ -73,11 +75,13 @@
      * If not null every line is sent to this command handler instead
      * of the default "command parsing -> dipatching" procedure.
      */
+    @SuppressWarnings("unchecked")
     private LinkedList<LineHandler> lineHandlers;
 
     /**
      * Connect Handlers
      */
+    @SuppressWarnings("unchecked")
     private final LinkedList<ConnectHandler> connectHandlers;
 
 	private final SMTPConfiguration theConfigData;
@@ -100,6 +104,7 @@
 	/**
 	 * @see org.apache.james.socket.shared.AbstractProtocolHandler#handleProtocolInternal(org.apache.james.socket.api.ProtocolContext)
 	 */
+    @SuppressWarnings("unchecked")
     public void handleProtocolInternal(ProtocolContext context) throws IOException {
         this.context = context;
         smtpID = Integer.toString(random.nextInt(1024));
@@ -155,9 +160,9 @@
           try {
               line = bytebufferHandler.read();
           } catch (CRLFDelimitedByteBuffer.TerminationException e) {
-              writeSMTPResponse(new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, "Syntax error at character position " + e.position() + ". CR and LF must be CRLF paired.  See RFC 2821 #2.7.1."));
+              writeResponse(new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, "Syntax error at character position " + e.position() + ". CR and LF must be CRLF paired.  See RFC 2821 #2.7.1."));
           } catch (CRLFDelimitedByteBuffer.LineLengthExceededException e) {
-              writeSMTPResponse(new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, "Line length exceeded. See RFC 2821 #4.5.3.1."));
+              writeResponse(new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, "Line length exceeded. See RFC 2821 #4.5.3.1."));
           }
           if (line == null) {
               break;
@@ -175,32 +180,30 @@
         context.getLogger().debug("Closing socket.");
     }
 
-    /**
-     * @see org.apache.james.smtpserver.protocol.SMTPSession#writeSMTPResponse(org.apache.james.smtpserver.protocol.SMTPResponse)
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.protocol.LogEnabledSession#writeResponse(org.apache.james.api.protocol.Response)
      */
-    public void writeSMTPResponse(SMTPResponse response) {
+    public void writeResponse(Response response) {
         // Write a single-line or multiline response
         if (response != null) {
-            if (response.getRawLine() != null) {
-                context.writeLoggedFlushedResponse(response.getRawLine());
-            } else {
-                // Iterator i = esmtpextensions.iterator();
-                for (int k = 0; k < response.getLines().size(); k++) {
-                    StringBuilder respBuff = new StringBuilder(256);
-                    respBuff.append(response.getRetCode());
-                    final CharSequence line = response.getLines().get(k);
-                    if (k == response.getLines().size() - 1) {
-                        respBuff.append(" ");
-                        respBuff.append(line);
-                        context.writeLoggedFlushedResponse(respBuff.toString());
-                    } else {
-                        respBuff.append("-");
-                        respBuff.append(line);
-                        context.writeLoggedResponse(respBuff.toString());
-                    }
+            // Iterator i = esmtpextensions.iterator();
+            for (int k = 0; k < response.getLines().size(); k++) {
+                StringBuilder respBuff = new StringBuilder(256);
+                respBuff.append(((RetCodeResponse)response).getRetCode());
+                final CharSequence line = response.getLines().get(k);
+                if (k == response.getLines().size() - 1) {
+                    respBuff.append(" ");
+                    respBuff.append(line);
+                    context.writeLoggedFlushedResponse(respBuff.toString());
+                } else {
+                    respBuff.append("-");
+                    respBuff.append(line);
+                    context.writeLoggedResponse(respBuff.toString());
                 }
             }
-            
+                        
             if (response.isEndSession()) {
                 sessionEnded = true;
             }
@@ -306,7 +309,7 @@
         return count;
     }
     
-    public void resetConnectionState() {
+    private void resetConnectionState() {
         connectionState.clear();
     }
     
@@ -329,6 +332,7 @@
     /**
      * @see org.apache.james.smtpserver.protocol.SMTPSession#pushLineHandler(org.apache.james.smtpserver.protocol.LineHandler)
      */
+    @SuppressWarnings("unchecked")
     public void pushLineHandler(LineHandler lineHandler) {
         if (lineHandlers == null) {
             lineHandlers = new LinkedList<LineHandler>();

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/DataLineJamesMessageHookHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/DataLineJamesMessageHookHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/DataLineJamesMessageHookHandler.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/DataLineJamesMessageHookHandler.java Tue Jan 19 11:34:58 2010
@@ -35,6 +35,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.james.api.protocol.ExtensibleHandler;
+import org.apache.james.api.protocol.LineHandler;
 import org.apache.james.api.protocol.WiringException;
 import org.apache.james.core.MailImpl;
 import org.apache.james.core.MimeMessageCopyOnWriteProxy;
@@ -42,7 +43,6 @@
 import org.apache.james.dsn.DSNStatus;
 import org.apache.james.lifecycle.LogEnabled;
 import org.apache.james.services.MailServer;
-import org.apache.james.smtpserver.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.MailEnvelope;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
@@ -60,7 +60,7 @@
  * Handles the calling of JamesMessageHooks
  *
  */
-public final class DataLineJamesMessageHookHandler implements DataLineFilter, ExtensibleHandler, LogEnabled {
+public final class DataLineJamesMessageHookHandler implements DataLineFilter<SMTPSession>, ExtensibleHandler, LogEnabled {
 
     /** This log is the fall back shared by all instances */
     private static final Log FALLBACK_LOG = LogFactory.getLog(DataLineJamesMessageHookHandler.class);
@@ -96,7 +96,7 @@
     /**
      * @see org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.smtpserver.protocol.SMTPSession, byte[], org.apache.james.smtpserver.protocol.LineHandler)
      */
-    public void onLine(SMTPSession session, String rawline, LineHandler next) {
+    public void onLine(SMTPSession session, String rawline, LineHandler<SMTPSession> next) {
         MimeMessageInputStreamSource mmiss = (MimeMessageInputStreamSource) session.getState().get(JamesDataCmdHandler.DATA_MIMEMESSAGE_STREAMSOURCE);
         OutputStream out = (OutputStream)  session.getState().get(JamesDataCmdHandler.DATA_MIMEMESSAGE_OUTPUTSTREAM);
         try {
@@ -125,7 +125,7 @@
                 } catch (MessagingException e) {
                     // TODO probably return a temporary problem
                     session.getLogger().info("Unexpected error handling DATA stream",e);
-                    session.writeSMTPResponse(new SMTPResponse(SMTPRetCode.LOCAL_ERROR, "Unexpected error handling DATA stream."));
+                    session.writeResponse(new SMTPResponse(SMTPRetCode.LOCAL_ERROR, "Unexpected error handling DATA stream."));
                 } finally {
                     ContainerUtil.dispose(mimeMessageCopyOnWriteProxy);
                     ContainerUtil.dispose(mmiss);
@@ -151,7 +151,7 @@
             
             session.getLogger().error(
                     "Unknown error occurred while processing DATA.", e);
-            session.writeSMTPResponse(response);
+            session.writeResponse(response);
             return;
         }
     }
@@ -185,7 +185,7 @@
 					// if the response is received, stop processing of command
 					// handlers
 					if (response != null) {
-						session.writeSMTPResponse(response);
+						session.writeResponse(response);
 						return;
 					}
 				}
@@ -214,7 +214,7 @@
 					// if the response is received, stop processing of command
 					// handlers
 					if (response != null) {
-						session.writeSMTPResponse(response);
+						session.writeResponse(response);
 						break;
 					}
 				}

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/POP3BeforeSMTPHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/POP3BeforeSMTPHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/POP3BeforeSMTPHandler.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/integration/POP3BeforeSMTPHandler.java Tue Jan 19 11:34:58 2010
@@ -20,9 +20,10 @@
 
 package org.apache.james.smtpserver.integration;
 
-import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.smtpserver.protocol.ConnectHandler;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.api.protocol.ConnectHandler;
+import org.apache.james.lifecycle.Configurable;
 import org.apache.james.smtpserver.protocol.SMTPSession;
 import org.apache.james.util.POP3BeforeSMTPHelper;
 import org.apache.james.util.TimeConverter;
@@ -30,7 +31,7 @@
 /**
  * This ConnectHandler can be used to activate pop-before-smtp
  */
-public class POP3BeforeSMTPHandler implements ConnectHandler {
+public class POP3BeforeSMTPHandler implements ConnectHandler<SMTPSession>,Configurable{
 
     /**
      * The time after which ipAddresses should be handled as expired
@@ -38,10 +39,10 @@
     private long expireTime = POP3BeforeSMTPHelper.EXPIRE_TIME;
 
 
-    /**
-     * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.Configuration)
+    /*
+     * 
      */
-    public void configure(Configuration config) throws ConfigurationException {
+    public void configure(HierarchicalConfiguration config) throws ConfigurationException {
         try {
             setExpireTime(config.getString("expireTime",null));
         } catch (NumberFormatException e) {

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java Tue Jan 19 11:34:58 2010
@@ -29,10 +29,11 @@
 import org.apache.james.api.dnsservice.util.NetMatcher;
 import org.apache.james.smtpserver.integration.CoreCmdHandlerLoader;
 import org.apache.james.smtpserver.mina.filter.SMTPResponseFilter;
-import org.apache.james.smtpserver.mina.filter.SMTPValidationFilter;
 import org.apache.james.smtpserver.protocol.SMTPConfiguration;
+import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPServerMBean;
 import org.apache.james.socket.mina.AbstractAsyncServer;
+import org.apache.james.socket.mina.filter.ResponseValidationFilter;
 import org.apache.james.socket.shared.ProtocolHandlerChainImpl;
 import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
 import org.apache.mina.core.service.IoHandler;
@@ -329,7 +330,7 @@
         
         // response and validation filter to the chain
         builder.addLast(SMTPResponseFilter.NAME, new SMTPResponseFilter());
-        builder.addLast("requestValidationFilter", new SMTPValidationFilter(getLogger()));
+        builder.addLast("responseValidationFilter", new ResponseValidationFilter<SMTPResponse>(getLogger(),SMTPResponse.class));
         return builder;
     }
 

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPIoHandler.java Tue Jan 19 11:34:58 2010
@@ -19,19 +19,14 @@
 
 package org.apache.james.smtpserver.mina;
 
-import java.util.LinkedList;
-import java.util.List;
-
 import org.apache.commons.logging.Log;
+import org.apache.james.api.protocol.ProtocolSession;
 import org.apache.james.api.protocol.ProtocolHandlerChain;
-import org.apache.james.smtpserver.protocol.ConnectHandler;
-import org.apache.james.smtpserver.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.SMTPConfiguration;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPRetCode;
 import org.apache.james.smtpserver.protocol.SMTPSession;
-import org.apache.mina.core.service.IoHandlerAdapter;
-import org.apache.mina.core.session.IdleStatus;
+import org.apache.james.socket.mina.AbstractIoHandler;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.filter.ssl.SslContextFactory;
 
@@ -40,9 +35,8 @@
  * 
  *
  */
-public class SMTPIoHandler extends IoHandlerAdapter{    
+public class SMTPIoHandler extends AbstractIoHandler{    
     private Log logger;
-    private ProtocolHandlerChain chain;
     private SMTPConfiguration conf;
     private SslContextFactory contextFactory;
 
@@ -53,25 +47,13 @@
     
     public SMTPIoHandler(ProtocolHandlerChain chain,
             SMTPConfiguration conf, Log logger, SslContextFactory contextFactory) {
-        this.chain = chain;
+        super(chain);
         this.conf = conf;
         this.logger = logger;
         this.contextFactory = contextFactory;
     }
 
     /**
-     * @see org.apache.mina.core.service.IoHandlerAdapter#messageReceived(org.apache.mina.core.session.IoSession, java.lang.Object)
-     */
-    public void messageReceived(IoSession session, Object message)
-            throws Exception {
-        SMTPSession smtpSession = (SMTPSession) session.getAttribute(SMTPSessionImpl.SMTP_SESSION);
-        LinkedList<LineHandler> lineHandlers = chain.getHandlers(LineHandler.class);
-        if (lineHandlers.size() > 0) {
-            ((LineHandler) lineHandlers.getLast()).onLine(smtpSession, (String) message);
-        }
-    }
-
-    /**
      * @see org.apache.mina.core.service.IoHandler#exceptionCaught(org.apache.mina.core.session.IoSession,
      *      java.lang.Throwable)
      */
@@ -80,47 +62,22 @@
         logger.error("Caught exception: " + session.getCurrentWriteMessage(),
                 exception);
         
-        // write an error to the client if the session is stil connected
-        if (session.isConnected()) session.write(new SMTPResponse(SMTPRetCode.LOCAL_ERROR, "Unable to process smtp request"));
+        session.write(new SMTPResponse(SMTPRetCode.LOCAL_ERROR, "Unable to process smtp request"));
     }
 
-    /**
-     * @see org.apache.mina.core.service.IoHandler#sessionCreated(org.apache.mina.core.session.IoSession)
-     */
-    public void sessionCreated(IoSession session) throws Exception {
+    @Override
+    protected ProtocolSession createSession(IoSession session) throws Exception{
         SMTPSession smtpSession;
         if (contextFactory == null) {
             smtpSession= new SMTPSessionImpl(conf, logger, session);
         } else {
             smtpSession= new SMTPSessionImpl(conf, logger, session, contextFactory.newInstance());
-        }
-        
-        // Add attribute
-        session.setAttribute(SMTPSessionImpl.SMTP_SESSION,smtpSession);
-    }
-
-    /**
-     * @see org.apache.mina.core.service.IoHandler#sessionIdle(org.apache.mina.core.session.IoSession,
-     *      org.apache.mina.core.session.IdleStatus)
-     */
-    public void sessionIdle(IoSession session, IdleStatus status)
-            throws Exception {
-        logger.debug("Connection timed out");
-        //session.write("Connection timeout");
+        }        
+        return smtpSession;
     }
 
-    /**
-     * @see org.apache.mina.core.service.IoHandler#sessionOpened(org.apache.mina.core.session.IoSession)
-     */
-    public void sessionOpened(IoSession session) throws Exception {
-        List<ConnectHandler> connectHandlers = chain
-                .getHandlers(ConnectHandler.class);
-      
-        if (connectHandlers != null) {
-            for (int i = 0; i < connectHandlers.size(); i++) {
-                connectHandlers.get(i).onConnect(
-                        (SMTPSession) session.getAttribute(SMTPSessionImpl.SMTP_SESSION));
-            }
-        }    
+    @Override
+    protected String getSessionKey() {
+        return SMTPSessionImpl.SMTP_SESSION;
     }
 }

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java Tue Jan 19 11:34:58 2010
@@ -27,12 +27,12 @@
 import javax.net.ssl.SSLContext;
 
 import org.apache.commons.logging.Log;
+import org.apache.james.api.protocol.LineHandler;
+import org.apache.james.api.protocol.Response;
 import org.apache.james.smtpserver.mina.filter.FilterLineHandlerAdapter;
 import org.apache.james.smtpserver.mina.filter.SMTPResponseFilter;
 import org.apache.james.smtpserver.mina.filter.TarpitFilter;
-import org.apache.james.smtpserver.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.SMTPConfiguration;
-import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.smtpserver.protocol.SMTPSession;
 import org.apache.james.socket.mina.AbstractMINASession;
 import org.apache.mina.core.session.IoSession;
@@ -128,17 +128,18 @@
         /**
          * @see org.apache.james.smtpserver.protocol.SMTPSession#pushLineHandler(org.apache.james.smtpserver.protocol.LineHandler)
          */
-        public void pushLineHandler(LineHandler overrideCommandHandler) {
+        public void pushLineHandler(LineHandler<SMTPSession> overrideCommandHandler) {
             lineHandlerCount++;
             getIoSession().getFilterChain().addAfter(SMTPResponseFilter.NAME,
                     "lineHandler" + lineHandlerCount,
                     new FilterLineHandlerAdapter(overrideCommandHandler));
         }
 
-        /**
-         * @see org.apache.james.smtpserver.protocol.SMTPSession#writeSMTPResponse(org.apache.james.smtpserver.protocol.SMTPResponse)
+        /*
+         * (non-Javadoc)
+         * @see org.apache.james.api.protocol.LogEnabledSession#writeResponse(org.apache.james.api.protocol.Response)
          */
-        public void writeSMTPResponse(SMTPResponse response) {
+        public void writeResponse(Response response) {
             getIoSession().write(response);
         }
 

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/FilterLineHandlerAdapter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/FilterLineHandlerAdapter.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/FilterLineHandlerAdapter.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/FilterLineHandlerAdapter.java Tue Jan 19 11:34:58 2010
@@ -18,8 +18,8 @@
  ****************************************************************/
 package org.apache.james.smtpserver.mina.filter;
 
+import org.apache.james.api.protocol.LineHandler;
 import org.apache.james.smtpserver.mina.SMTPSessionImpl;
-import org.apache.james.smtpserver.protocol.LineHandler;
 import org.apache.james.smtpserver.protocol.SMTPSession;
 import org.apache.mina.core.filterchain.IoFilterAdapter;
 import org.apache.mina.core.session.IoSession;
@@ -31,9 +31,9 @@
  */
 public final class FilterLineHandlerAdapter extends IoFilterAdapter {
 
-    private LineHandler lineHandler;
+    private LineHandler<SMTPSession> lineHandler;
 
-    public FilterLineHandlerAdapter(LineHandler lineHandler) {
+    public FilterLineHandlerAdapter(LineHandler<SMTPSession> lineHandler) {
         this.lineHandler = lineHandler;
     }
 

Modified: james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java (original)
+++ james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java Tue Jan 19 11:34:58 2010
@@ -204,7 +204,7 @@
         
         
         protoServer = new AvalonProtocolServer();
-        protoServer.setLog(new SimpleLog("MockLog"));
+        protoServer.setLog(smtpLog);
         protoServer.setProtocolHandlerFactory(m_smtpServer);
         protoServer.setSocketManager(socketManager);
         protoServer.setThreadManager(threadManager);

Modified: james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/AbstractCommandDispatcher.java
URL: http://svn.apache.org/viewvc/james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/AbstractCommandDispatcher.java?rev=900731&r1=900730&r2=900731&view=diff
==============================================================================
--- james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/AbstractCommandDispatcher.java (original)
+++ james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/AbstractCommandDispatcher.java Tue Jan 19 11:34:58 2010
@@ -31,13 +31,12 @@
 /**
  * Abstract base class which CommandDispatcher implementations should extend
  *
- * @param <CommandHandler>
  */
-public abstract class AbstractCommandDispatcher<CommandHandler extends CommonCommandHandler> implements ExtensibleHandler {
+public abstract class AbstractCommandDispatcher<Session extends ProtocolSession> implements ExtensibleHandler {
     /**
      * The list of available command handlers
      */
-    private HashMap<String, List<CommandHandler>> commandHandlerMap = new HashMap<String, List<CommandHandler>>();
+    private HashMap<String, List<CommandHandler<Session>>> commandHandlerMap = new HashMap<String, List<CommandHandler<Session>>>();
 
     /**
      * Add it to map (key as command name, value is an array list of CommandHandlers)
@@ -45,10 +44,10 @@
      * @param commandName the command name which will be key
      * @param cmdHandler The CommandHandler object
      */
-    protected void addToMap(String commandName, CommandHandler cmdHandler) {
-        List<CommandHandler> handlers = commandHandlerMap.get(commandName);
+    protected void addToMap(String commandName, CommandHandler<Session> cmdHandler) {
+        List<CommandHandler<Session>> handlers = commandHandlerMap.get(commandName);
         if(handlers == null) {
-            handlers = new ArrayList<CommandHandler>();
+            handlers = new ArrayList<CommandHandler<Session>>();
             commandHandlerMap.put(commandName, handlers);
         }
         handlers.add(cmdHandler);
@@ -62,14 +61,14 @@
      * @param session not null
      * @return List of CommandHandlers
      */
-    protected List<CommandHandler> getCommandHandlers(String command, LogEnabledSession session) {
+    protected List<CommandHandler<Session>> getCommandHandlers(String command, ProtocolSession session) {
         if (command == null) {
             return null;
         }
         if (session.getLogger().isDebugEnabled()) {
             session.getLogger().debug("Lookup command handler for command: " + command);
         }
-        List<CommandHandler> handlers =  commandHandlerMap.get(command);
+        List<CommandHandler<Session>> handlers =  commandHandlerMap.get(command);
         if(handlers == null) {
             handlers = commandHandlerMap.get(getUnknownCommandHandlerIdentifier());
         }
@@ -83,7 +82,7 @@
      */
     @SuppressWarnings("unchecked")
     public void wireExtensions(Class interfaceName, List extension) throws WiringException {
-        this.commandHandlerMap = new HashMap<String, List<CommandHandler>>();
+        this.commandHandlerMap = new HashMap<String, List<CommandHandler<Session>>>();
 
         for (Iterator it = extension.iterator(); it.hasNext(); ) {
             CommandHandler handler = (CommandHandler) it.next();
@@ -159,5 +158,5 @@
      * 
      * @return unknownCmdHandler
      */
-    protected abstract CommandHandler getUnknownCommandHandler();
+    protected abstract CommandHandler<Session> getUnknownCommandHandler();
 }

Added: james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/CommandHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/CommandHandler.java?rev=900731&view=auto
==============================================================================
--- james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/CommandHandler.java (added)
+++ james/server/trunk/socket-api/src/main/java/org/apache/james/api/protocol/CommandHandler.java Tue Jan 19 11:34:58 2010
@@ -0,0 +1,47 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+
+
+package org.apache.james.api.protocol;
+
+
+import java.util.Collection;
+
+
+/**
+ * Custom command handlers must implement this interface
+ * The command handlers will be Server wide common to all the handlers,
+ * therefore the command handlers must store all the state information
+ * in the Session object
+ */
+ public interface CommandHandler<Session extends ProtocolSession> {
+    /**
+     * Handle the command
+    **/
+    Response onCommand(Session session, Request request);
+    
+    /**
+     * Return a Collection of implemented commands
+     * 
+     * @return Collection which contains implemented commands
+     */
+    Collection<String> getImplCommands();
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org