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 2009/10/02 23:04:32 UTC

svn commit: r821167 - in /james/server/trunk: avalon-socket-library/src/main/java/org/apache/james/socket/ pop3server-function/src/main/java/org/apache/james/pop3server/ pop3server-function/src/main/java/org/apache/james/pop3server/core/ smtpserver-fun...

Author: norman
Date: Fri Oct  2 21:04:31 2009
New Revision: 821167

URL: http://svn.apache.org/viewvc?rev=821167&view=rev
Log:
Move shared code to AbstractProtocolHandler
Add getState() method to POP3Session to store temporary data
Remove POP3Handler dependency from CommandHandlers

Added:
    james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractProtocolHandler.java
Modified:
    james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/TLSSupportedSession.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Session.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/DeleCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/NoopCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StatCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StlsCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java
    james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UserCmdHandler.java
    james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandler.java
    james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java
    james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java

Added: james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractProtocolHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractProtocolHandler.java?rev=821167&view=auto
==============================================================================
--- james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractProtocolHandler.java (added)
+++ james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractProtocolHandler.java Fri Oct  2 21:04:31 2009
@@ -0,0 +1,120 @@
+/****************************************************************
+ * 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.socket;
+
+import java.io.IOException;
+
+import org.apache.commons.logging.Log;
+
+/**
+ * Abstract base class for ProtocolHandler
+ * 
+ *
+ */
+public abstract class AbstractProtocolHandler implements ProtocolHandler, TLSSupportedSession{
+
+    private ProtocolContext context;
+    private String user;
+
+    /**
+     * @see org.apache.james.socket.ProtocolHandler#resetHandler()
+     */
+    public void resetHandler() {
+        user = null;
+        resetHandlerInternal();
+    }
+
+    /**
+     * @see org.apache.james.socket.ProtocolHandler#handleProtocol(org.apache.james.socket.ProtocolContext)
+     */
+    public void handleProtocol(ProtocolContext context) throws IOException {
+        this.context = context;
+        handleProtocolInternal(context);
+    }
+
+    /**
+     * @see org.apache.james.socket.TLSSupportedSession#getRemoteHost()
+     */
+    public String getRemoteHost() {
+        return context.getRemoteHost();
+    }
+
+    /**
+     * @see org.apache.james.socket.TLSSupportedSession#getRemoteIPAddress()
+     */
+    public String getRemoteIPAddress() {
+        return context.getRemoteIP();
+    }
+
+    /**
+     * @see org.apache.james.socket.TLSSupportedSession#getUser()
+     */
+    public String getUser() {
+        return user;
+    }
+
+    /**
+     * @see org.apache.james.socket.TLSSupportedSession#isTLSStarted()
+     */
+    public boolean isTLSStarted() {
+        return context.isSecure();
+    }
+
+    /**
+     * @see org.apache.james.socket.TLSSupportedSession#setUser(java.lang.String)
+     */
+    public void setUser(String user) {
+        this.user = user;
+    }
+
+    /**
+     * @see org.apache.james.socket.TLSSupportedSession#startTLS()
+     */
+    public void startTLS() throws IOException {
+        context.secure();
+    }
+    
+    
+    /**
+     * @see org.apache.james.socket.TLSSupportedSession#getLogger()
+     */
+    public Log getLogger() {
+        return context.getLogger();
+    }
+
+    /**
+     * @see org.apache.james.socket.ProtocolHandler#fatalFailure(java.lang.RuntimeException, org.apache.james.socket.ProtocolContext)
+     */
+    public void fatalFailure(RuntimeException e, ProtocolContext context) {
+    }
+    
+    /**
+     * @see #handleProtocol(ProtocolContext)
+     */
+    protected abstract void handleProtocolInternal(ProtocolContext context) throws IOException;
+    
+    /**
+     * @see #resetHandler()
+     */
+    protected abstract void resetHandlerInternal();
+
+}

Modified: james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/TLSSupportedSession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/TLSSupportedSession.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/TLSSupportedSession.java (original)
+++ james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/TLSSupportedSession.java Fri Oct  2 21:04:31 2009
@@ -1,55 +1,87 @@
-/****************************************************************
- * 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.socket;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-
-public interface TLSSupportedSession {
-    
-	/**
-	 * Return true if StartTLS is supported by the configuration
-	 * 
-	 * @return supported
-	 */
-    boolean isStartTLSSupported();
-    
-    /**
-     * Return true if the starttls was started
-     * 
-     * @return true
-     */
-    boolean isTLSStarted();
-
-    /**
-     * Starttls
-     * 
-     * @throws IOException
-     */
-    void startTLS() throws IOException;
-    
-    /**
-     * Gets the context sensitive log for this session.
-     * @return log, not null
-     */
-    Log getLogger();
-}
+/****************************************************************
+ * 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.socket;
+
+import java.io.IOException;
+
+import org.apache.commons.logging.Log;
+
+/**
+ * Session which supports TLS 
+ * 
+ *
+ */
+public interface TLSSupportedSession {
+    /**
+     * Returns the user name associated with this interaction.
+     *
+     * @return the user name
+     */
+    String getUser();
+
+    /**
+     * Sets the user name associated with this interaction.
+     *
+     * @param user the user name
+     */
+    void setUser(String user);
+    
+
+    /**
+     * Returns host name of the client
+     *
+     * @return hostname of the client
+     */
+    String getRemoteHost();
+
+    /**
+     * Returns host ip address of the client
+     *
+     * @return host ip address of the client
+     */
+    String getRemoteIPAddress();
+	/**
+	 * Return true if StartTLS is supported by the configuration
+	 * 
+	 * @return supported
+	 */
+    boolean isStartTLSSupported();
+    
+    /**
+     * Return true if the starttls was started
+     * 
+     * @return true
+     */
+    boolean isTLSStarted();
+
+    /**
+     * Starttls
+     * 
+     * @throws IOException
+     */
+    void startTLS() throws IOException;
+    
+    /**
+     * Gets the context sensitive log for this session.
+     * @return log, not null
+     */
+    Log getLogger();
+}

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java Fri Oct  2 21:04:31 2009
@@ -24,17 +24,17 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.avalon.framework.container.ContainerUtil;
-import org.apache.commons.logging.Log;
-import org.apache.james.core.MailImpl;
 import org.apache.james.services.MailRepository;
+import org.apache.james.socket.AbstractProtocolHandler;
 import org.apache.james.socket.CRLFTerminatedReader;
 import org.apache.james.socket.ProtocolContext;
-import org.apache.james.socket.ProtocolHandler;
 import org.apache.james.socket.Watchdog;
 import org.apache.mailet.Mail;
 
@@ -42,34 +42,15 @@
  * The handler class for POP3 connections.
  *
  */
-public class POP3Handler implements POP3Session, ProtocolHandler {
+public class POP3Handler extends AbstractProtocolHandler implements POP3Session {
 
     private ProtocolContext context;
     
     private final static byte COMMAND_MODE = 1;
     private final static byte RESPONSE_MODE = 2;
-
+    private Map<Object,Object> stateMap = new HashMap<Object,Object>();
    
 
-    // Authentication states for the POP3 interaction
-    /** Waiting for user id */
-    public final static int AUTHENTICATION_READY = 0;
-    /** User id provided, waiting for password */
-    public final static int AUTHENTICATION_USERSET = 1;  
-    /**
-     * A valid user id/password combination has been provided.
-     * In this state the client can access the mailbox
-     * of the specified user.
-     */
-    public final static int TRANSACTION = 2;              
-
-    /**
-     * A placeholder for emails deleted during the course of the POP3 transaction.  
-     * This Mail instance is used to enable fast checks as to whether an email has been
-     * deleted from the inbox.
-     */
-    public final static Mail DELETED = new MailImpl();    
-
     /**
      * The per-service configuration data that applies to all handlers
      */
@@ -112,11 +93,6 @@
 
 
     /**
-     * The user name of the authenticated user associated with this POP3 transaction.
-     */
-    private String authenticatedUser;
-
-    /**
      * The mode of the current session
      */
     private byte mode;
@@ -139,14 +115,13 @@
         lineHandlers = handlerChain.getHandlers(LineHandler.class);
     }
     
+
     /**
-     * @see org.apache.james.socket.AbstractJamesHandler#handleProtocol(ProtocolContext)
+     * @see org.apache.james.socket.AbstractProtocolHandler#handleProtocolInternal(org.apache.james.socket.ProtocolContext)
      */
-    public void handleProtocol(ProtocolContext context) throws IOException {
+    public void handleProtocolInternal(ProtocolContext context) throws IOException {
         this.context = context;
         handlerState = AUTHENTICATION_READY;
-        authenticatedUser = "unknown";
-
         sessionEnded = false;
 
 
@@ -218,9 +193,9 @@
     /**
      * Resets the handler data to a basic state.
      */
-    public void resetHandler() {
-        // Clear user data
-        authenticatedUser = null;
+    public void resetHandlerInternal() {
+
+        stateMap.clear();
         userInbox = null;
         if (userMailbox != null) {
             Iterator<Mail> i = userMailbox.iterator();
@@ -245,58 +220,6 @@
         lineHandlers = handlerChain.getHandlers(LineHandler.class);
     }
 
-
-    /**
-     * This method parses POP3 commands read off the wire in handleConnection.
-     * Actual processing of the command (possibly including additional back and
-     * forth communication with the client) is delegated to one of a number of
-     * command specific handler methods.  The primary purpose of this method is
-     * to parse the raw command string to determine exactly which handler should
-     * be called.  It returns true if expecting additional commands, false otherwise.
-     */
-    
-    /**
-     * @see org.apache.james.pop3server.POP3Session#getRemoteHost()
-     */
-    public String getRemoteHost() {
-        return context.getRemoteHost();
-    }
-
-    /**
-     * @see org.apache.james.pop3server.POP3Session#getRemoteIPAddress()
-     */
-    public String getRemoteIPAddress() {
-        return context.getRemoteIP();
-    }
-
-    /**
-     * @see org.apache.james.pop3server.POP3Session#endSession()
-     */
-    public void endSession() {
-        sessionEnded = true;
-    }
-
-    /**
-     * @see org.apache.james.pop3server.POP3Session#isSessionEnded()
-     */
-    public boolean isSessionEnded() {
-        return sessionEnded;
-    }
-
-    /**
-     * @see org.apache.james.pop3server.POP3Session#getUser()
-     */
-    public String getUser() {
-        return authenticatedUser;
-    }
-
-    /**
-     * @see org.apache.james.pop3server.POP3Session#setUser(java.lang.String)
-     */
-    public void setUser(String userID) {
-        authenticatedUser = userID;
-    }
-
     /**
      * @see org.apache.james.pop3server.POP3Session#getWatchdog()
      */
@@ -386,19 +309,6 @@
         return context.getOutputStream();
     }
 
-    /**
-     * @see org.apache.james.pop3server.POP3Session#getLogger()
-     */
-    public Log getLogger() {
-        return context.getLogger();
-    }
-
-    /**
-     * @see org.apache.james.socket.TLSSupportedSession#startTLS()
-     */
-	public void startTLS() throws IOException {
-		context.secure();
-	}
 
 	/**
 	 * @see org.apache.james.socket.TLSSupportedSession#isStartTLSSupported()
@@ -408,13 +318,6 @@
 	}
 
 	/**
-	 * @see org.apache.james.socket.TLSSupportedSession#isTLSStarted()
-	 */
-	public boolean isTLSStarted() {
-		return context.isSecure();
-	}
-
-	/**
 	 * @see org.apache.james.pop3server.POP3Session#writePOP3Response(org.apache.james.pop3server.POP3Response)
 	 */
     public void writePOP3Response(POP3Response response) {
@@ -437,5 +340,11 @@
             }
         }
     }
+
+
+    @Override
+    public Map<Object, Object> getState() {
+        return stateMap;
+    }
 	
 }

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Session.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Session.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Session.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Session.java Fri Oct  2 21:04:31 2009
@@ -24,6 +24,7 @@
 
 import java.io.OutputStream;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.james.services.MailRepository;
 import org.apache.james.socket.TLSSupportedSession;
@@ -35,28 +36,26 @@
  * POP3Handler object
  */
 
-public interface POP3Session extends TLSSupportedSession{
+public interface POP3Session extends TLSSupportedSession {
 
     /**
-     * Returns host name of the client
-     *
-     * @return hostname of the client
-     */
-    String getRemoteHost();
-
-    /**
-     * Returns host ip address of the client
-     *
-     * @return host ip address of the client
+     * A placeholder for emails deleted during the course of the POP3 transaction.  
+     * This Mail instance is used to enable fast checks as to whether an email has been
+     * deleted from the inbox.
+     */
+    public final static String DELETED ="DELETED_MAIL";
+   
+    // Authentication states for the POP3 interaction
+    /** Waiting for user id */
+    public final static int AUTHENTICATION_READY = 0;
+    /** User id provided, waiting for password */
+    public final static int AUTHENTICATION_USERSET = 1;  
+    /**
+     * A valid user id/password combination has been provided.
+     * In this state the client can access the mailbox
+     * of the specified user.
      */
-    String getRemoteIPAddress();
-
-    /**
-     * Returns the session status
-     *
-     * @return if the session is open or closed
-     */
-    boolean isSessionEnded();
+    public final static int TRANSACTION = 2;              
 
     /**
      * Returns POP3Handler service wide configuration
@@ -66,20 +65,6 @@
     POP3HandlerConfigurationData getConfigurationData();
 
     /**
-     * Returns the user name associated with this POP3 interaction.
-     *
-     * @return the user name
-     */
-    String getUser();
-
-    /**
-     * Sets the user name associated with this POP3 interaction.
-     *
-     * @param user the user name
-     */
-    void setUser(String user);
-
-    /**
      * Returns Watchdog object used for handling timeout
      *
      * @return Watchdog object
@@ -157,13 +142,19 @@
      */
     void writePOP3Response(POP3Response response);
 
-
     /**
      * Write the response to the client
      * 
      * @param string
      */
     void writeResponse(String string);
+    
+    /**
+     * Map which can be used to store temporary data during the session
+     * 
+     * @return sessionMap
+     */
+    public Map<Object,Object> getState();
 
 }
 

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/DeleCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/DeleCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/DeleCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/DeleCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -27,7 +27,6 @@
 
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 import org.apache.mailet.Mail;
@@ -47,7 +46,7 @@
 	 */
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
-        if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+        if (session.getHandlerState() == POP3Session.TRANSACTION) {
             int num = 0;
             try {
                 num = Integer.parseInt(parameters);
@@ -57,7 +56,8 @@
             }
             try {
                 Mail mc = session.getUserMailbox().get(num);
-                if (mc == POP3Handler.DELETED) {
+                Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
+                if (mc == dm) {
                     StringBuilder responseBuffer =
                         new StringBuilder(64)
                                 .append("Message (")
@@ -65,7 +65,7 @@
                                 .append(") already deleted.");
                     response = new POP3Response(POP3Response.ERR_RESPONSE,responseBuffer.toString());
                 } else {
-                    session.getUserMailbox().set(num, POP3Handler.DELETED);
+                    session.getUserMailbox().set(num, dm);
                     // we are replacing our reference with "DELETED", so we have
                     // to dispose the no-more-referenced mail object.
                     ContainerUtil.dispose(mc);

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -52,12 +52,17 @@
             String parameters) {
         POP3Response response = null;
         if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+            Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
+
             if (parameters == null) {
+
                 long size = 0;
                 int count = 0;
+
                 try {
+
                     for (Mail mc:session.getUserMailbox()) {
-                        if (mc != POP3Handler.DELETED) {
+                        if (mc != dm) {
                             size += mc.getMessageSize();
                             count++;
                         }
@@ -70,7 +75,7 @@
                     response = new POP3Response(POP3Response.OK_RESPONSE, responseBuffer.toString());
                     count = 0;
                     for (Mail mc:session.getUserMailbox()) {
-                        if (mc != POP3Handler.DELETED) {
+                        if (mc != dm) {
                             responseBuffer =
                                 new StringBuilder(16)
                                         .append(count)
@@ -89,7 +94,7 @@
                 try {
                     num = Integer.parseInt(parameters);
                     Mail mc = session.getUserMailbox().get(num);
-                    if (mc != POP3Handler.DELETED) {
+                    if (mc != dm) {
                         StringBuilder responseBuffer =
                             new StringBuilder(64)
                                     .append(num)

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/NoopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/NoopCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/NoopCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/NoopCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -26,7 +26,6 @@
 import java.util.List;
 
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 
@@ -44,7 +43,7 @@
 	 */
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
-        if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+        if (session.getHandlerState() == POP3Session.TRANSACTION) {
             response = new POP3Response(POP3Response.OK_RESPONSE);
         } else {
             response = new POP3Response(POP3Response.ERR_RESPONSE);

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -29,7 +29,6 @@
 
 import org.apache.james.api.user.UsersRepository;
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 import org.apache.james.services.MailRepository;
@@ -73,7 +72,7 @@
 	 */
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
-        if (session.getHandlerState() == POP3Handler.AUTHENTICATION_USERSET && parameters != null) {
+        if (session.getHandlerState() == POP3Session.AUTHENTICATION_USERSET && parameters != null) {
             String passArg = parameters;
             if (users.test(session.getUser(), passArg)) {
                 try {
@@ -92,16 +91,16 @@
                                 .append("Welcome ")
                                 .append(session.getUser());
                     response = new POP3Response(POP3Response.OK_RESPONSE,responseBuffer.toString());
-                    session.setHandlerState(POP3Handler.TRANSACTION);
+                    session.setHandlerState(POP3Session.TRANSACTION);
                 } catch (RuntimeException e) {
                     session.getLogger().error("Unexpected error accessing mailbox for "+session.getUser(),e);
                     response = new POP3Response(POP3Response.ERR_RESPONSE,"Unexpected error accessing mailbox");
-                    session.setHandlerState(POP3Handler.AUTHENTICATION_READY);
+                    session.setHandlerState(POP3Session.AUTHENTICATION_READY);
                 }
             } else {
                 response = new POP3Response(POP3Response.ERR_RESPONSE, "Authentication failed.");
 
-                session.setHandlerState(POP3Handler.AUTHENTICATION_READY);
+                session.setHandlerState(POP3Session.AUTHENTICATION_READY);
             }
         } else {
             response = new POP3Response(POP3Response.ERR_RESPONSE);

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -27,7 +27,6 @@
 
 import org.apache.commons.collections.ListUtils;
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 import org.apache.mailet.Mail;
@@ -48,7 +47,7 @@
     @SuppressWarnings("unchecked")
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
-        if (session.getHandlerState() == POP3Handler.AUTHENTICATION_READY ||  session.getHandlerState() == POP3Handler.AUTHENTICATION_USERSET) {
+        if (session.getHandlerState() == POP3Session.AUTHENTICATION_READY ||  session.getHandlerState() == POP3Session.AUTHENTICATION_USERSET) {
             response = new POP3Response(POP3Response.OK_RESPONSE,"Apache James POP3 Server signing off.");
             response.setEndSession(true);
             return response;

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -22,7 +22,6 @@
 package org.apache.james.pop3server.core;
 
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 import org.apache.james.socket.BytesWrittenResetOutputStream;
@@ -54,7 +53,7 @@
 	 */
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
-        if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+        if (session.getHandlerState() == POP3Session.TRANSACTION) {
             int num = 0;
             try {
                 num = Integer.parseInt(parameters.trim());
@@ -64,7 +63,9 @@
             }
             try {
                 Mail mc = session.getUserMailbox().get(num);
-                if (mc != POP3Handler.DELETED) {
+                Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
+
+                if (mc != dm) {
                     response = new POP3Response(POP3Response.OK_RESPONSE, "Message follows");
                     session.writePOP3Response(response);
                     try {

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -29,7 +29,6 @@
 import javax.mail.MessagingException;
 
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 import org.apache.mailet.Mail;
@@ -49,7 +48,7 @@
 	 */
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
-        if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+        if (session.getHandlerState() == POP3Session.TRANSACTION) {
             stat(session);
             response = new POP3Response(POP3Response.OK_RESPONSE);
         } else {
@@ -72,7 +71,9 @@
     @SuppressWarnings("unchecked")
     public static void stat(POP3Session session) {
         ArrayList<Mail> userMailbox = new ArrayList<Mail>();
-        userMailbox.add(POP3Handler.DELETED);
+        Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
+
+        userMailbox.add(dm);
         try {
             for (Iterator it = session.getUserInbox().list(); it.hasNext(); ) {
                 String key = (String) it.next();

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StatCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StatCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StatCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StatCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -28,7 +28,6 @@
 import javax.mail.MessagingException;
 
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 import org.apache.mailet.Mail;
@@ -48,12 +47,14 @@
 	 */
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
-        if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+        if (session.getHandlerState() == POP3Session.TRANSACTION) {
             long size = 0;
             int count = 0;
             try {
+                Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
+
                 for (Mail mc: session.getUserMailbox()) {
-                    if (mc != POP3Handler.DELETED) {
+                    if (mc != dm) {
                         size += mc.getMessageSize();
                         count++;
                     }

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StlsCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StlsCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StlsCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/StlsCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -25,7 +25,6 @@
 import java.util.List;
 
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 
@@ -46,7 +45,7 @@
         POP3Response response;
         // check if starttls is supported, the state is the right one and it was
         // not started before
-        if (session.isStartTLSSupported() && session.getHandlerState() == POP3Handler.AUTHENTICATION_READY
+        if (session.isStartTLSSupported() && session.getHandlerState() == POP3Session.AUTHENTICATION_READY
                 && session.isTLSStarted() == false) {
             response = new POP3Response(POP3Response.OK_RESPONSE,"Begin TLS negotiation");
             session.writePOP3Response(response);
@@ -74,7 +73,7 @@
      */
     public List<String> getImplementedCapabilities(POP3Session session) {
         List<String> caps = new ArrayList<String>();
-        if (session.isStartTLSSupported() && session.getHandlerState() == POP3Handler.AUTHENTICATION_READY) {
+        if (session.isStartTLSSupported() && session.getHandlerState() == POP3Session.AUTHENTICATION_READY) {
             caps.add(COMMAND_NAME);
             return caps;
         }

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -58,6 +58,7 @@
      *
 	 * @see org.apache.james.pop3server.CommandHandler#onCommand(org.apache.james.pop3server.POP3Session, java.lang.String, java.lang.String)
 	 */
+    @SuppressWarnings("unchecked")
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
         
@@ -86,7 +87,9 @@
             }
             try {
                 Mail mc = session.getUserMailbox().get(num);
-                if (mc != POP3Handler.DELETED) {
+                Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
+
+                if (mc != dm) {
                     response = new POP3Response(POP3Response.OK_RESPONSE, "Message follows");
                     session.writePOP3Response(response);
                     try {

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -46,11 +46,13 @@
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
         if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+            Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
+
             if (parameters == null) {
                 response = new POP3Response(POP3Response.OK_RESPONSE,"unique-id listing follows");
                 int count = 0;
                 for (Mail mc:session.getUserMailbox()) {
-                    if (mc != POP3Handler.DELETED) {
+                    if (mc != dm) {
                         StringBuilder responseBuffer =
                             new StringBuilder(64)
                                     .append(count)
@@ -66,7 +68,7 @@
                 try {
                     num = Integer.parseInt(parameters);
                     Mail mc = (Mail) session.getUserMailbox().get(num);
-                    if (mc != POP3Handler.DELETED) {
+                    if (mc != dm) {
                         StringBuilder responseBuffer =
                             new StringBuilder(64)
                                     .append(num)

Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UserCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UserCmdHandler.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UserCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UserCmdHandler.java Fri Oct  2 21:04:31 2009
@@ -26,7 +26,6 @@
 import java.util.List;
 
 import org.apache.james.pop3server.CommandHandler;
-import org.apache.james.pop3server.POP3Handler;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.pop3server.POP3Session;
 
@@ -46,9 +45,9 @@
 	 */
     public POP3Response onCommand(POP3Session session, String command, String parameters) {
         POP3Response response = null;
-        if (session.getHandlerState() == POP3Handler.AUTHENTICATION_READY && parameters != null) {
+        if (session.getHandlerState() == POP3Session.AUTHENTICATION_READY && parameters != null) {
             session.setUser(parameters);
-            session.setHandlerState(POP3Handler.AUTHENTICATION_USERSET);
+            session.setHandlerState(POP3Session.AUTHENTICATION_USERSET);
             response = new POP3Response(POP3Response.OK_RESPONSE);
         } else {
             response = new POP3Response(POP3Response.ERR_RESPONSE);

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=821167&r1=821166&r2=821167&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 Fri Oct  2 21:04:31 2009
@@ -28,16 +28,15 @@
 import java.util.Map;
 import java.util.Random;
 
-import org.apache.commons.logging.Log;
+import org.apache.james.socket.AbstractProtocolHandler;
 import org.apache.james.socket.CRLFDelimitedByteBuffer;
-import org.apache.james.socket.ProtocolHandler;
 import org.apache.james.socket.ProtocolContext;
 
 /**
  * Provides SMTP functionality by carrying out the server side of the SMTP
  * interaction.
  */
-public class SMTPHandler implements ProtocolHandler, SMTPSession {
+public class SMTPHandler extends AbstractProtocolHandler implements SMTPSession {
 
 	private ProtocolContext context;
 
@@ -82,8 +81,6 @@
 
 	private final SMTPHandlerChain handlerChain;
 
-	private String authenticatedUser;
-
 	private String smtpID;
 
 	public SMTPHandler(SMTPHandlerChain handlerChain, final SMTPConfiguration theConfigData) {
@@ -93,10 +90,10 @@
         this.theConfigData = theConfigData;
 	}
     
-    /**
-     * @see org.apache.james.socket.ProtocolHandler#handleProtocol(ProtocolContext)
-     */
-    public void handleProtocol(ProtocolContext context) throws IOException {
+	/**
+	 * @see org.apache.james.socket.AbstractProtocolHandler#handleProtocolInternal(org.apache.james.socket.ProtocolContext)
+	 */
+    public void handleProtocolInternal(ProtocolContext context) throws IOException {
         this.context = context;
         smtpID = Integer.toString(random.nextInt(1024));
         relayingAllowed = theConfigData.isRelayingAllowed(context.getRemoteIP());
@@ -206,7 +203,7 @@
     /**
      * Resets the handler data to a basic state.
      */
-    public void resetHandler() {
+    public void resetHandlerInternal() {
         // not needed anymore because state is inside the connection state
         // resetState();
         resetConnectionState();
@@ -215,26 +212,11 @@
         // as the default.
         lineHandlers = handlerChain.getHandlers(LineHandler.class);
 
-        authenticatedUser = null;
         smtpID = null;
         sessionEnded = false;
     }
 
     /**
-     * @see org.apache.james.smtpserver.SMTPSession#getRemoteHost()
-     */
-    public String getRemoteHost() {
-        return context.getRemoteHost();
-    }
-
-    /**
-     * @see org.apache.james.smtpserver.SMTPSession#getRemoteIPAddress()
-     */
-    public String getRemoteIPAddress() {
-        return context.getRemoteIP();
-    }
-
-    /**
      * @see org.apache.james.smtpserver.SMTPSession#resetState()
      */
     public void resetState() {
@@ -296,20 +278,6 @@
     }
 
     /**
-     * @see org.apache.james.smtpserver.SMTPSession#getUser()
-     */
-    public String getUser() {
-        return authenticatedUser;
-    }
-
-    /**
-     * @see org.apache.james.smtpserver.SMTPSession#setUser(String)
-     */
-    public void setUser(String userID) {
-        authenticatedUser = userID;
-    }
-
-    /**
      * @see org.apache.james.smtpserver.SMTPSession#getSessionID()
      */
     public String getSessionID() {
@@ -372,12 +340,7 @@
         }
     }
 
-    /**
-     * @see org.apache.james.socket.ProtocolHandler#fatalFailure(java.lang.RuntimeException, org.apache.james.socket.ProtocolContext)
-     */
-	public void fatalFailure(RuntimeException e, ProtocolContext context) {
-	}
-	
+   
 	/**
 	 * @see org.apache.james.smtpserver.SMTPSession#getHelloName()
 	 */
@@ -413,27 +376,7 @@
         return getConfigurationData().useAddressBracketsEnforcement();
     }
 
-    /**
-     * @see org.apache.james.smtpserver.SMTPSession#getLogger()
-     */
-    public Log getLogger() {
-        return context.getLogger();
-    }
-
-    /**
-     * @see org.apache.james.socket.TLSSupportedSession#isTLSStarted()
-     */
-	public boolean isTLSStarted() {
-		return context.isSecure();
-	}
-
-	/**
-	 * @see org.apache.james.socket.TLSSupportedSession#startTLS()
-	 */
-	public void startTLS() throws IOException {
-		context.secure();
-	}
-
+ 
 	/**
 	 * @see org.apache.james.socket.TLSSupportedSession#isStartTLSSupported()
 	 */

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java Fri Oct  2 21:04:31 2009
@@ -352,7 +352,9 @@
 
     }
 
-    @Override
+    /**
+     * @see org.apache.james.socket.AbstractProtocolServer#newProtocolHandlerInstance()
+     */
     public ProtocolHandler newProtocolHandlerInstance() {
         final SMTPHandler theHandler = new SMTPHandler(handlerChain, theConfigData);
         return theHandler;

Modified: james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java?rev=821167&r1=821166&r2=821167&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java (original)
+++ james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPSession.java Fri Oct  2 21:04:31 2009
@@ -41,19 +41,6 @@
     /** the Session state */
     public final static String SESSION_STATE_MAP = "SESSION_STATE_MAP";
 
-    /**
-     * Returns host name of the client
-     *
-     * @return hostname of the client
-     */
-    String getRemoteHost();
-
-    /**
-     * Returns host ip address of the client
-     *
-     * @return host ip address of the client
-     */
-    String getRemoteIPAddress();
 
     /**
      * Returns Map that consists of the state of the SMTPSession per mail
@@ -124,20 +111,7 @@
      * @return authentication required or not
      */
     boolean isAuthSupported();
-
-    /**
-     * Returns the user name associated with this SMTP interaction.
-     *
-     * @return the user name
-     */
-    String getUser();
-
-    /**
-     * Sets the user name associated with this SMTP interaction.
-     *
-     * @param user the user name
-     */
-    void setUser(String user);
+;
 
     /**
      * Returns the SMTP session id



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