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