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 2011/12/24 22:17:28 UTC
svn commit: r1223019 [1/2] - in /james/protocols/trunk:
api/src/main/java/org/apache/james/protocols/api/
pop3/src/main/java/org/apache/james/protocols/pop3/
pop3/src/main/java/org/apache/james/protocols/pop3/core/
smtp/src/main/java/org/apache/james/p...
Author: norman
Date: Sat Dec 24 21:17:27 2011
New Revision: 1223019
URL: http://svn.apache.org/viewvc?rev=1223019&view=rev
Log:
Minimize Response creation. See PROTOCOLS-74
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractResponse.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Response.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3SessionImpl.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/PassCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java
james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSessionImpl.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAuthRequiredToRelayRcptHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AcceptRecipientIfRelayingIsAllowed.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ExpnCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HeloCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HelpCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/MailCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/NoopCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/PostmasterAbuseRcptHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/QuitCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RcptCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RsetCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/VrfyCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/StartTlsCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractGreylistHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxRcptHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ReverseEqualsEhloHeloHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/SpamTrapHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/SupressDuplicateRcptHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ValidSenderDomainHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResult.java
Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractResponse.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractResponse.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractResponse.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractResponse.java Sat Dec 24 21:17:27 2011
@@ -105,5 +105,27 @@ public abstract class AbstractResponse i
public final String toString() {
return getLines().toString();
}
+
+ /**
+ * Return a immutable instance of this {@link AbstractResponse}
+ *
+ * @return immutable
+ */
+ public Response immutable() {
+ return new Response() {
+
+ public boolean isEndSession() {
+ return AbstractResponse.this.isEndSession();
+ }
+
+ public String getRetCode() {
+ return AbstractResponse.this.getRetCode();
+ }
+
+ public List<CharSequence> getLines() {
+ return AbstractResponse.this.getLines();
+ }
+ };
+ }
}
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Response.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Response.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Response.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Response.java Sat Dec 24 21:17:27 2011
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.james.protocols.api.AbstractResponse;
+import org.apache.james.protocols.api.Response;
/**
* Contains an POP3 result
@@ -44,12 +45,12 @@ public class POP3Response extends Abstra
/**
* {@link #OK_RESPONSE} with no description
*/
- public static final POP3Response OK = new POP3Response(OK_RESPONSE);
+ public static final Response OK = new POP3Response(OK_RESPONSE).immutable();
/**
* {@link #ERR_RESPONSE} with no description
*/
- public static final POP3Response ERR = new POP3Response(ERR_RESPONSE);
+ public static final Response ERR = new POP3Response(ERR_RESPONSE).immutable();
/**
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3SessionImpl.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3SessionImpl.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3SessionImpl.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/POP3SessionImpl.java Sat Dec 24 21:17:27 2011
@@ -30,6 +30,7 @@ import org.slf4j.Logger;
*/
public class POP3SessionImpl extends ProtocolSessionImpl implements POP3Session {
+ private static final Response LINE_TOO_LONG = new POP3Response(POP3Response.ERR_RESPONSE, "Exceed maximal line length").immutable();
private int handlerState;
private Mailbox mailbox;
@@ -79,11 +80,11 @@ public class POP3SessionImpl extends Pro
@Override
public Response newLineTooLongResponse() {
- return null;
+ return LINE_TOO_LONG;
}
@Override
public Response newFatalErrorResponse() {
- return null;
+ return POP3Response.ERR;
}
}
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -65,7 +65,7 @@ public class CapaCmdHandler implements C
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<Class<?>> getMarkerInterfaces() {
- List<Class<?>> mList = new ArrayList();
+ List<Class<?>> mList = new ArrayList();
mList.add(CapaCapability.class);
return mList;
}
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -38,20 +38,21 @@ import org.apache.james.protocols.pop3.m
public class DeleCmdHandler implements CommandHandler<POP3Session> {
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("DELE"));
+ private static final Response SYNTAX_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: DELE [mail number]").immutable();
+ private static final Response DELETED = new POP3Response(POP3Response.OK_RESPONSE, "Message deleted").immutable();
+
/**
* Handler method called upon receipt of a DELE command. This command
* deletes a particular mail message from the mailbox.
*/
@SuppressWarnings("unchecked")
public Response onCommand(POP3Session session, Request request) {
- POP3Response response = null;
if (session.getHandlerState() == POP3Session.TRANSACTION) {
int num = 0;
try {
num = Integer.parseInt(request.getArgument());
} catch (Exception e) {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: DELE [mail number]");
- return response;
+ return SYNTAX_ERROR;
}
try {
List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
@@ -61,21 +62,20 @@ public class DeleCmdHandler implements C
if (deletedUidList.contains(uid)) {
StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") already deleted.");
- response = new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+ return new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
} else {
deletedUidList.add(uid);
// we are replacing our reference with "DELETED", so we have
// to dispose the no-more-referenced mail object.
- response = new POP3Response(POP3Response.OK_RESPONSE, "Message deleted");
+ return DELETED;
}
} catch (IndexOutOfBoundsException iob) {
StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
- response = new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+ return new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
}
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
- return response;
}
/**
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -52,12 +52,13 @@ public class ListCmdHandler implements C
@SuppressWarnings("unchecked")
public Response onCommand(POP3Session session, Request request) {
- POP3Response response = null;
String parameters = request.getArgument();
List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
List<Long> deletedUidList = (List<Long>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction);
if (session.getHandlerState() == POP3Session.TRANSACTION) {
+ POP3Response response = null;
+
if (parameters == null) {
long size = 0;
@@ -103,10 +104,10 @@ public class ListCmdHandler implements C
response = new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
}
}
+ return response;
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
- return response;
}
/**
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -40,13 +40,11 @@ public class NoopCmdHandler implements C
* NOOPs, does nothing much.
*/
public Response onCommand(POP3Session session, Request request) {
- POP3Response response = null;
if (session.getHandlerState() == POP3Session.TRANSACTION) {
- response = new POP3Response(POP3Response.OK_RESPONSE);
+ return POP3Response.OK;
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
- return response;
}
/**
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/PassCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/PassCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/PassCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/PassCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -37,6 +37,8 @@ import org.apache.james.protocols.pop3.m
*/
public class PassCmdHandler extends RsetCmdHandler {
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("PASS"));
+ private static final Response UNEXPECTED_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Unexpected error accessing mailbox").immutable();
+ private static final Response AUTH_FAILED = new POP3Response(POP3Response.ERR_RESPONSE, "Authentication failed.").immutable();
private MailboxFactory mailboxManager;
@@ -56,25 +58,24 @@ public class PassCmdHandler extends Rset
try {
Mailbox mailbox = mailboxManager.getMailbox(session, passArg);
if (mailbox != null) {
- session.setUserMailbox(mailbox);
- stat(session);
-
- StringBuilder responseBuffer = new StringBuilder(64).append("Welcome ").append(session.getUser());
- response = new POP3Response(POP3Response.OK_RESPONSE, responseBuffer.toString());
- session.setHandlerState(POP3Session.TRANSACTION);
+ session.setUserMailbox(mailbox);
+ stat(session);
+
+ StringBuilder responseBuffer = new StringBuilder(64).append("Welcome ").append(session.getUser());
+ response = new POP3Response(POP3Response.OK_RESPONSE, responseBuffer.toString());
+ session.setHandlerState(POP3Session.TRANSACTION);
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Authentication failed.");
- session.setHandlerState(POP3Session.AUTHENTICATION_READY);
+ session.setHandlerState(POP3Session.AUTHENTICATION_READY);
+ return AUTH_FAILED;
}
} catch (IOException e) {
session.getLogger().error("Unexpected error accessing mailbox for " + session.getUser(), e);
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Unexpected error accessing mailbox");
session.setHandlerState(POP3Session.AUTHENTICATION_READY);
+ return UNEXPECTED_ERROR;
}
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Authentication failed.");
-
session.setHandlerState(POP3Session.AUTHENTICATION_READY);
+ return AUTH_FAILED;
}
return response;
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -38,18 +38,26 @@ import org.apache.james.protocols.pop3.m
*/
public class QuitCmdHandler implements CommandHandler<POP3Session> {
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("QUIT"));
-
+ private static final Response SIGN_OFF;
+ private static final Response SIGN_OFF_NOT_CLEAN;
+ static {
+ POP3Response response = new POP3Response(POP3Response.OK_RESPONSE, "Apache James POP3 Server signing off.");
+ response.setEndSession(true);
+ SIGN_OFF = response.immutable();
+
+ response = new POP3Response(POP3Response.ERR_RESPONSE, "Some deleted messages were not removed");
+ response.setEndSession(true);
+ SIGN_OFF_NOT_CLEAN = response.immutable();
+ }
/**
* Handler method called upon receipt of a QUIT command. This method handles
* cleanup of the POP3Handler state.
*/
@SuppressWarnings("unchecked")
public Response onCommand(POP3Session session, Request request) {
- POP3Response response = null;
+ Response response = null;
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;
+ return SIGN_OFF;
}
List<Long> toBeRemoved = (List<Long>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction);
Mailbox mailbox = session.getUserMailbox();
@@ -60,12 +68,11 @@ public class QuitCmdHandler implements C
uids[i] = toBeRemoved.get(i);
}
mailbox.remove(uids);
- response = new POP3Response(POP3Response.OK_RESPONSE, "Apache James POP3 Server signing off.");
+ response = SIGN_OFF;
} catch (Exception ex) {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Some deleted messages were not removed");
+ response = SIGN_OFF_NOT_CLEAN;
session.getLogger().error("Some deleted messages were not removed", ex);
}
- response.setEndSession(true);
try {
mailbox.close();
} catch (IOException e) {
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -41,6 +41,8 @@ import org.apache.james.protocols.pop3.m
public class RetrCmdHandler implements CommandHandler<POP3Session> {
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("RETR"));
+ private static final Response SYNTAX_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: RETR [mail number]").immutable();
+ private static final Response ERROR_MESSAGE_RETRIEVE = new POP3Response(POP3Response.ERR_RESPONSE, "Error while retrieving message.").immutable();
/**
* Handler method called upon receipt of a RETR command. This command
@@ -55,8 +57,7 @@ public class RetrCmdHandler implements C
try {
num = Integer.parseInt(parameters.trim());
} catch (Exception e) {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: RETR [mail number]");
- return response;
+ return SYNTAX_ERROR;
}
try {
List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
@@ -79,10 +80,10 @@ public class RetrCmdHandler implements C
response = new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
}
} catch (IOException ioe) {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Error while retrieving message.");
+ return ERROR_MESSAGE_RETRIEVE;
}
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
return response;
}
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -46,14 +46,13 @@ public class RsetCmdHandler implements C
* reset the mailbox.
*/
public Response onCommand(POP3Session session, Request request) {
- POP3Response response = null;
if (session.getHandlerState() == POP3Session.TRANSACTION) {
stat(session);
- response = new POP3Response(POP3Response.OK_RESPONSE);
+ return POP3Response.OK;
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
- return response;
+
}
/**
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -45,7 +45,6 @@ public class StatCmdHandler implements C
*/
@SuppressWarnings("unchecked")
public Response onCommand(POP3Session session, Request request) {
- POP3Response response = null;
if (session.getHandlerState() == POP3Session.TRANSACTION) {
List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
@@ -64,12 +63,11 @@ public class StatCmdHandler implements C
}
}
StringBuilder responseBuffer = new StringBuilder(32).append(count).append(" ").append(size);
- response = new POP3Response(POP3Response.OK_RESPONSE, responseBuffer.toString());
+ return new POP3Response(POP3Response.OK_RESPONSE, responseBuffer.toString());
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
- return response;
}
/**
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -39,20 +39,17 @@ public class StlsCmdHandler implements C
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("STLS"));
private static final List<String> CAPS = Collections.unmodifiableList(Arrays.asList("STLS"));
+ private static final Response BEGIN_TLS = new StartTlsPop3Response(POP3Response.OK_RESPONSE, "Begin TLS negotiation").immutable();
/**
* @see CommandHandler#onCommand(org.apache.james.protocols.api.ProtocolSession, Request)
*/
public Response onCommand(POP3Session session, Request request) {
- POP3Response response;
// check if starttls is supported, the state is the right one and it was
// not started before
if (session.isStartTLSSupported() && session.getHandlerState() == POP3Session.AUTHENTICATION_READY && session.isTLSStarted() == false) {
- response = new StartTlsPop3Response(POP3Response.OK_RESPONSE, "Begin TLS negotiation");
- return response;
-
+ return BEGIN_TLS;
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
- return response;
+ return POP3Response.ERR;
}
}
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -42,8 +42,10 @@ import org.apache.james.protocols.pop3.m
public class TopCmdHandler extends RetrCmdHandler implements CapaCapability {
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("TOP"));
private static final List<String> CAPS = Collections.unmodifiableList(Arrays.asList("TOP"));
-
+ private static final Response SYNTAX_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: TOP [mail number] [Line number]").immutable();
+ private static final Response ERROR_MESSAGE_RETR = new POP3Response(POP3Response.ERR_RESPONSE, "Error while retrieving message.").immutable();
+
/**
* Handler method called upon receipt of a TOP command. This command
* retrieves the top N lines of a specified message in the mailbox.
@@ -54,11 +56,9 @@ public class TopCmdHandler extends RetrC
@SuppressWarnings("unchecked")
@Override
public Response onCommand(POP3Session session, Request request) {
- POP3Response response = null;
String parameters = request.getArgument();
if (parameters == null) {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: TOP [mail number] [Line number]");
- return response;
+ return SYNTAX_ERROR;
}
String argument = "";
@@ -76,8 +76,7 @@ public class TopCmdHandler extends RetrC
num = Integer.parseInt(argument);
lines = Integer.parseInt(argument1);
} catch (NumberFormatException nfe) {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: TOP [mail number] [Line number]");
- return response;
+ return SYNTAX_ERROR;
}
try {
List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
@@ -89,31 +88,29 @@ public class TopCmdHandler extends RetrC
InputStream body = new CountingBodyInputStream(new ExtraDotInputStream(new CRLFTerminatedInputStream(session.getUserMailbox().getMessageBody(uid))), lines);
InputStream headers = session.getUserMailbox().getMessageHeaders(uid);
if (body != null && headers != null) {
- response = new POP3StreamResponse(POP3Response.OK_RESPONSE, "Message follows", new SequenceInputStream(headers, body));
- return response;
+ return new POP3StreamResponse(POP3Response.OK_RESPONSE, "Message follows", new SequenceInputStream(headers, body));
} else {
StringBuilder exceptionBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
- response = new POP3Response(POP3Response.ERR_RESPONSE, exceptionBuffer.toString());
+ return new POP3Response(POP3Response.ERR_RESPONSE, exceptionBuffer.toString());
}
} else {
StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") already deleted.");
- response = new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+ return new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
}
} catch (IOException ioe) {
- response = new POP3Response(POP3Response.ERR_RESPONSE, "Error while retrieving message.");
+ return ERROR_MESSAGE_RETR;
} catch (IndexOutOfBoundsException iob) {
StringBuilder exceptionBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
- response = new POP3Response(POP3Response.ERR_RESPONSE, exceptionBuffer.toString());
+ return new POP3Response(POP3Response.ERR_RESPONSE, exceptionBuffer.toString());
} catch (NoSuchElementException iob) {
StringBuilder exceptionBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
- response = new POP3Response(POP3Response.ERR_RESPONSE, exceptionBuffer.toString());
+ return new POP3Response(POP3Response.ERR_RESPONSE, exceptionBuffer.toString());
}
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
- return response;
}
@@ -132,6 +129,7 @@ public class TopCmdHandler extends RetrC
/**
* @see org.apache.james.protocols.api.handler.CommandHandler#getImplCommands()
*/
+ @Override
public Collection<String> getImplCommands() {
return COMMANDS;
}
@@ -139,7 +137,7 @@ public class TopCmdHandler extends RetrC
/**
* This {@link InputStream} implementation can be used to limit the body
* lines which will be read from the wrapped {@link InputStream}
- */ // TODO: Fix me!
+ */
private final class CountingBodyInputStream extends InputStream {
private int count = 0;
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -89,12 +89,11 @@ public class UidlCmdHandler implements C
}
}
} catch (IOException e) {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
- return response;
+ return POP3Response.ERR;
}
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
return response;
}
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -34,6 +34,6 @@ public class UnknownCmdHandler extends U
* error response and logs the command.
*/
public Response onCommand(POP3Session session, Request request) {
- return new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
}
Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -44,16 +44,14 @@ public class UserCmdHandler implements C
* id.
*/
public Response onCommand(POP3Session session, Request request) {
- POP3Response response = null;
String parameters = request.getArgument();
if (session.getHandlerState() == POP3Session.AUTHENTICATION_READY && parameters != null) {
session.setUser(parameters);
session.setHandlerState(POP3Session.AUTHENTICATION_USERSET);
- response = new POP3Response(POP3Response.OK_RESPONSE);
+ return POP3Response.OK;
} else {
- response = new POP3Response(POP3Response.ERR_RESPONSE);
+ return POP3Response.ERR;
}
- return response;
}
/**
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSessionImpl.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSessionImpl.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSessionImpl.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSessionImpl.java Sat Dec 24 21:17:27 2011
@@ -33,8 +33,11 @@ import org.slf4j.Logger;
*/
public class SMTPSessionImpl extends ProtocolSessionImpl implements SMTPSession {
+ private static final Response LINE_LENGTH_EXCEEDED = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, "Line length exceeded. See RFC 2821 #4.5.3.1.").immutable();
+ private static final Response FATAL_ERROR = new SMTPResponse(SMTPRetCode.LOCAL_ERROR, "Unable to process request").immutable();
+
private boolean relayingAllowed;
-
+
public SMTPSessionImpl(Logger logger, ProtocolTransport transport, SMTPConfiguration config) {
super(logger, transport, config);
relayingAllowed = config.isRelayingAllowed(getRemoteAddress().getAddress().getHostAddress());
@@ -115,11 +118,11 @@ public class SMTPSessionImpl extends Pro
}
public Response newLineTooLongResponse() {
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, "Line length exceeded. See RFC 2821 #4.5.3.1.");
+ return LINE_LENGTH_EXCEEDED;
}
public Response newFatalErrorResponse() {
- return new SMTPResponse(SMTPRetCode.LOCAL_ERROR, "Unable to process request");
+ return FATAL_ERROR;
}
@Override
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAuthRequiredToRelayRcptHook.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAuthRequiredToRelayRcptHook.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAuthRequiredToRelayRcptHook.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAuthRequiredToRelayRcptHook.java Sat Dec 24 21:17:27 2011
@@ -31,6 +31,19 @@ import org.apache.james.protocols.smtp.h
*/
public abstract class AbstractAuthRequiredToRelayRcptHook implements RcptHook {
+ private static final HookResult AUTH_REQUIRED = new HookResult(HookReturnCode.DENY,
+ SMTPRetCode.AUTH_REQUIRED, DSNStatus.getStatus(
+ DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Authentication Required");
+ private static final HookResult RELAYING_DENIED = new HookResult(
+ HookReturnCode.DENY,
+ // sendmail returns 554 (SMTPRetCode.TRANSACTION_FAILED).
+ // it is not clear in RFC wether it is better to use 550 or 554.
+ SMTPRetCode.MAILBOX_PERM_UNAVAILABLE,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Requested action not taken: relaying denied");
/**
* @see org.apache.james.protocols.smtp.hook.RcptHook#doRcpt(org.apache.james.protocols.smtp.SMTPSession,
@@ -42,25 +55,14 @@ public abstract class AbstractAuthRequir
String toDomain = rcpt.getDomain();
if (isLocalDomain(toDomain) == false) {
if (session.isAuthSupported()) {
- return new HookResult(HookReturnCode.DENY,
- SMTPRetCode.AUTH_REQUIRED, DSNStatus.getStatus(
- DSNStatus.PERMANENT,
- DSNStatus.SECURITY_AUTH)
- + " Authentication Required");
+ return AUTH_REQUIRED;
} else {
- return new HookResult(
- HookReturnCode.DENY,
- // sendmail returns 554 (SMTPRetCode.TRANSACTION_FAILED).
- // it is not clear in RFC wether it is better to use 550 or 554.
- SMTPRetCode.MAILBOX_PERM_UNAVAILABLE,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.SECURITY_AUTH)
- + " Requested action not taken: relaying denied");
+ return RELAYING_DENIED;
}
}
}
- return new HookResult(HookReturnCode.DECLINED);
+ return HookResult.declined();
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationRcptHook.java Sat Dec 24 21:17:27 2011
@@ -33,6 +33,11 @@ import org.apache.james.protocols.smtp.h
* Handler which check if the authenticated user is the same as the one used as MAIL FROM
*/
public abstract class AbstractSenderAuthIdentifyVerificationRcptHook implements RcptHook {
+ private static final HookResult INVALID_AUTH = new HookResult(HookReturnCode.DENY,
+ SMTPRetCode.BAD_SEQUENCE,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Incorrect Authentication for Specified Email Address");
/**
* @see org.apache.james.protocols.smtp.hook.RcptHook#doRcpt(org.apache.james.protocols.smtp.SMTPSession,
* org.apache.mailet.MailAddress, org.apache.mailet.MailAddress)
@@ -59,14 +64,10 @@ public abstract class AbstractSenderAuth
if ((senderAddress == null)
|| (!authUser.equalsIgnoreCase(username))
|| (!isLocalDomain(senderAddress.getDomain()))) {
- return new HookResult(HookReturnCode.DENY,
- SMTPRetCode.BAD_SEQUENCE,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.SECURITY_AUTH)
- + " Incorrect Authentication for Specified Email Address");
+ return INVALID_AUTH;
}
}
- return new HookResult(HookReturnCode.DECLINED);
+ return HookResult.declined();
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AcceptRecipientIfRelayingIsAllowed.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AcceptRecipientIfRelayingIsAllowed.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AcceptRecipientIfRelayingIsAllowed.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AcceptRecipientIfRelayingIsAllowed.java Sat Dec 24 21:17:27 2011
@@ -21,7 +21,6 @@ package org.apache.james.protocols.smtp.
import org.apache.james.protocols.smtp.MailAddress;
import org.apache.james.protocols.smtp.SMTPSession;
import org.apache.james.protocols.smtp.hook.HookResult;
-import org.apache.james.protocols.smtp.hook.HookReturnCode;
import org.apache.james.protocols.smtp.hook.RcptHook;
/**
@@ -36,9 +35,9 @@ public class AcceptRecipientIfRelayingIs
public HookResult doRcpt(SMTPSession session, MailAddress sender,
MailAddress rcpt) {
if (session.isRelayingAllowed()) {
- return new HookResult(HookReturnCode.OK);
+ return HookResult.ok();
}
- return new HookResult(HookReturnCode.DECLINED);
+ return HookResult.declined();
}
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -47,8 +47,12 @@ import org.apache.james.protocols.smtp.d
*/
public class DataCmdHandler implements CommandHandler<SMTPSession>, ExtensibleHandler {
- private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("DATA"));
-
+ private static final Response NO_RECIPIENT = new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_OTHER)+" No recipients specified").immutable();
+ private static final Response NO_SENDER = new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_OTHER)+" No sender specified").immutable();
+ private static final Response UNEXPECTED_ARG = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Unexpected argument provided with DATA command").immutable();
+ private static final Response DATA_READY = new SMTPResponse(SMTPRetCode.DATA_READY, "Ok Send data ending with <CRLF>.<CRLF>").immutable();
+ private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("DATA"));
+
public static final class DataConsumerLineHandler implements LineHandler<SMTPSession> {
public SMTPResponse onLine(SMTPSession session, ByteBuffer line) {
@@ -117,7 +121,7 @@ public class DataCmdHandler implements C
session.setAttachment(MAILENV, env,ProtocolSession.State.Transaction);
session.pushLineHandler(lineHandler);
- return new SMTPResponse(SMTPRetCode.DATA_READY, "Ok Send data ending with <CRLF>.<CRLF>");
+ return DATA_READY;
}
protected MailEnvelope createEnvelope(SMTPSession session, MailAddress sender, List<MailAddress> recipients) {
@@ -165,18 +169,18 @@ public class DataCmdHandler implements C
protected Response doDATAFilter(SMTPSession session, String argument) {
if ((argument != null) && (argument.length() > 0)) {
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Unexpected argument provided with DATA command");
+ return UNEXPECTED_ARG;
}
if (session.getAttachment(SMTPSession.SENDER, ProtocolSession.State.Transaction) == null) {
- return new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_OTHER)+" No sender specified");
+ return NO_SENDER;
} else if (session.getAttachment(SMTPSession.RCPT_LIST, ProtocolSession.State.Transaction) == null) {
- return new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_OTHER)+" No recipients specified");
+ return NO_RECIPIENT;
}
return null;
}
-
+
protected LineHandler<SMTPSession> getLineHandler() {
- return lineHandler;
+ return lineHandler;
}
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java Sat Dec 24 21:17:27 2011
@@ -49,6 +49,8 @@ import org.apache.james.protocols.smtp.h
*/
public class DataLineMessageHookHandler implements DataLineFilter, ExtensibleHandler {
+ private static final Response ERROR_PROCESSING_MESSAGE = new SMTPResponse(SMTPRetCode.LOCAL_ERROR,DSNStatus.getStatus(DSNStatus.TRANSIENT,
+ DSNStatus.UNDEFINED_STATUS) + " Error processing message").immutable();
private List<?> messageHandlers;
@@ -89,14 +91,11 @@ public class DataLineMessageHookHandler
}
out.flush();
} catch (IOException e) {
- SMTPResponse response = new SMTPResponse(SMTPRetCode.LOCAL_ERROR,DSNStatus.getStatus(DSNStatus.TRANSIENT,
- DSNStatus.UNDEFINED_STATUS) + " Error processing message: " + e.getMessage());
-
session.getLogger().error(
"Unknown error occurred while processing DATA.", e);
session.resetState();
- return response;
+ return ERROR_PROCESSING_MESSAGE;
}
return null;
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ExpnCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ExpnCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ExpnCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ExpnCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -38,6 +38,7 @@ import org.apache.james.protocols.smtp.d
*/
public class ExpnCmdHandler implements CommandHandler<SMTPSession> {
+ private static final Response NOT_SUPPORTED = new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" EXPN is not supported").immutable();
/**
* The name of the command handled by the command handler
*/
@@ -50,7 +51,7 @@ public class ExpnCmdHandler implements C
*
*/
public Response onCommand(SMTPSession session, Request request) {
- return new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" EXPN is not supported");
+ return NOT_SUPPORTED;
}
/**
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HeloCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HeloCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HeloCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HeloCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -44,6 +44,10 @@ public class HeloCmdHandler extends Abst
*/
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList(COMMAND_NAME));
+ private static final Response DOMAIN_REQUIRED = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.DELIVERY_INVALID_ARG)
+ + " Domain address required: " + COMMAND_NAME).immutable();
/**
* @see org.apache.james.protocols.api.handler.CommandHandler#getImplCommands()
*/
@@ -74,10 +78,7 @@ public class HeloCmdHandler extends Abst
session.resetState();
if (parameters == null) {
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.DELIVERY_INVALID_ARG)
- + " Domain address required: " + COMMAND_NAME);
+ return DOMAIN_REQUIRED;
} else {
// store provided name
session.setAttachment(SMTPSession.CURRENT_HELO_NAME, parameters, State.Connection);
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HelpCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HelpCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HelpCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/HelpCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -38,7 +38,7 @@ import org.apache.james.protocols.smtp.d
*/
public class HelpCmdHandler implements CommandHandler<SMTPSession> {
private static final String COMMAND_NAME = "HELP";
-
+ private static final Response NOT_SUPPORTED = new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" " + COMMAND_NAME + " is not supported").immutable();
/**
* The name of the command handled by the command handler
*/
@@ -49,7 +49,7 @@ public class HelpCmdHandler implements C
*
**/
public Response onCommand(SMTPSession session, Request request){
- return new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" " + COMMAND_NAME + " is not supported");
+ return NOT_SUPPORTED;
}
/**
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/MailCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/MailCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/MailCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/MailCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -46,7 +46,24 @@ import org.apache.james.protocols.smtp.h
*/
public class MailCmdHandler extends AbstractHookableCmdHandler<MailHook> {
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("MAIL"));
-
+ private static final Response SENDER_ALREADY_SPECIFIED = new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus
+ .getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_OTHER)
+ + " Sender already specified").immutable();
+ private static final Response EHLO_HELO_NEEDED = new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus
+ .getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_OTHER)
+ + " Need HELO or EHLO before MAIL").immutable();
+ private static final Response SYNTAX_ERROR_ARG = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.DELIVERY_INVALID_ARG)
+ + " Usage: MAIL FROM:<sender>").immutable();
+ private static final Response SYNTAX_ERROR = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.ADDRESS_SYNTAX_SENDER)
+ + " Syntax error in MAIL command").immutable();
+ private static final Response SYNTAX_ERROR_ADDRESS = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.ADDRESS_SYNTAX_SENDER)
+ + " Syntax error in sender address").immutable();
/**
* A map of parameterHooks
*/
@@ -131,22 +148,15 @@ public class MailCmdHandler extends Abst
argument = argument.substring(0, colonIndex);
}
if (session.getAttachment(SMTPSession.SENDER, State.Transaction) != null) {
- return new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus
- .getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_OTHER)
- + " Sender already specified");
+ return SENDER_ALREADY_SPECIFIED;
} else if (session.getAttachment(
SMTPSession.CURRENT_HELO_MODE, State.Connection) == null
&& session.getConfiguration().useHeloEhloEnforcement()) {
- return new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus
- .getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_OTHER)
- + " Need HELO or EHLO before MAIL");
+ return EHLO_HELO_NEEDED;
} else if (argument == null
|| !argument.toUpperCase(Locale.US).equals("FROM")
|| sender == null) {
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.DELIVERY_INVALID_ARG)
- + " Usage: MAIL FROM:<sender>");
+ return SYNTAX_ERROR_ARG;
} else {
sender = sender.trim();
// the next gt after the first lt ... AUTH may add more <>
@@ -204,10 +214,7 @@ public class MailCmdHandler extends Abst
.append(": did not start and end with < >");
session.getLogger().info(errorBuffer.toString());
}
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.ADDRESS_SYNTAX_SENDER)
- + " Syntax error in MAIL command");
+ return SYNTAX_ERROR;
}
MailAddress senderAddress = null;
@@ -237,10 +244,7 @@ public class MailCmdHandler extends Abst
pe.getMessage());
session.getLogger().info(errorBuffer.toString());
}
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.ADDRESS_SYNTAX_SENDER)
- + " Syntax error in sender address");
+ return SYNTAX_ERROR_ADDRESS;
}
}
if (senderAddress == null) {
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/NoopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/NoopCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/NoopCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/NoopCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -43,13 +43,15 @@ public class NoopCmdHandler implements C
*/
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("NOOP"));
+ private static final Response NOOP = new SMTPResponse(SMTPRetCode.MAIL_OK, DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.UNDEFINED_STATUS)+" OK").immutable();
+
/**
* Handler method called upon receipt of a NOOP command.
* Just sends back an OK and logs the command.
*
*/
public Response onCommand(SMTPSession session, Request request) {
- return new SMTPResponse(SMTPRetCode.MAIL_OK, DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.UNDEFINED_STATUS)+" OK");
+ return NOOP;
}
/**
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/PostmasterAbuseRcptHook.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/PostmasterAbuseRcptHook.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/PostmasterAbuseRcptHook.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/PostmasterAbuseRcptHook.java Sat Dec 24 21:17:27 2011
@@ -21,7 +21,6 @@ package org.apache.james.protocols.smtp.
import org.apache.james.protocols.smtp.MailAddress;
import org.apache.james.protocols.smtp.SMTPSession;
import org.apache.james.protocols.smtp.hook.HookResult;
-import org.apache.james.protocols.smtp.hook.HookReturnCode;
import org.apache.james.protocols.smtp.hook.RcptHook;
/**
@@ -35,9 +34,9 @@ public class PostmasterAbuseRcptHook imp
public HookResult doRcpt(SMTPSession session, MailAddress sender, MailAddress rcpt) {
if (rcpt.getLocalPart().equalsIgnoreCase("postmaster") || rcpt.getLocalPart().equalsIgnoreCase("abuse")) {
session.getLogger().debug("Sender allowed");
- return new HookResult(HookReturnCode.OK);
+ return HookResult.ok();
} else {
- return new HookResult(HookReturnCode.DECLINED);
+ return HookResult.declined();
}
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/QuitCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/QuitCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/QuitCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/QuitCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -41,6 +41,17 @@ public class QuitCmdHandler extends Abst
*/
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("QUIT"));
+ private static final Response SYNTAX_ERROR;
+ static {
+ SMTPResponse response = new SMTPResponse(
+ SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, DSNStatus
+ .getStatus(DSNStatus.PERMANENT,
+ DSNStatus.DELIVERY_INVALID_ARG)
+ + " Unexpected argument provided with QUIT command");
+ response.setEndSession(true);
+ SYNTAX_ERROR = response.immutable();
+ }
+
/**
* Handler method called upon receipt of a QUIT command. This method informs
* the client that the connection is closing.
@@ -51,7 +62,6 @@ public class QuitCmdHandler extends Abst
* the argument passed in with the command by the SMTP client
*/
private Response doQUIT(SMTPSession session, String argument) {
- SMTPResponse ret;
if ((argument == null) || (argument.length() == 0)) {
StringBuilder response = new StringBuilder();
response.append(
@@ -59,16 +69,12 @@ public class QuitCmdHandler extends Abst
DSNStatus.UNDEFINED_STATUS)).append(" ").append(
session.getConfiguration().getHelloName()).append(
" Service closing transmission channel");
- ret = new SMTPResponse(SMTPRetCode.SYSTEM_QUIT, response);
+ SMTPResponse ret = new SMTPResponse(SMTPRetCode.SYSTEM_QUIT, response);
+ ret.setEndSession(true);
+ return ret;
} else {
- ret = new SMTPResponse(
- SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, DSNStatus
- .getStatus(DSNStatus.PERMANENT,
- DSNStatus.DELIVERY_INVALID_ARG)
- + " Unexpected argument provided with QUIT command");
+ return SYNTAX_ERROR;
}
- ret.setEndSession(true);
- return ret;
}
/**
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RcptCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RcptCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RcptCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RcptCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -43,11 +43,13 @@ import org.apache.james.protocols.smtp.h
public class RcptCmdHandler extends AbstractHookableCmdHandler<RcptHook> implements
CommandHandler<SMTPSession> {
- public static final String CURRENT_RECIPIENT = "CURRENT_RECIPIENT"; // Current recipient
+ public static final String CURRENT_RECIPIENT = "CURRENT_RECIPIENT"; // Current
+ // recipient
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("RCPT"));
-
-
-
+ private static final Response MAIL_NEEDED = new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_OTHER) + " Need MAIL before RCPT").immutable();
+ private static final Response SYNTAX_ERROR_ARGS = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_SYNTAX) + " Usage: RCPT TO:<recipient>").immutable();
+ private static final Response SYNTAX_ERROR_DELIVERY = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_SYNTAX) + " Syntax error in parameters or arguments").immutable();
+ private static final Response SYNTAX_ERROR_ADDRESS = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_MAILBOX, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.ADDRESS_SYNTAX) + " Syntax error in recipient address").immutable();
/**
* Handler method called upon receipt of a RCPT command. Reads recipient.
* Does some connection validation.
@@ -97,16 +99,11 @@ public class RcptCmdHandler extends Abst
argument = argument.substring(0, colonIndex);
}
if (session.getAttachment(SMTPSession.SENDER, State.Transaction) == null) {
- return new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus
- .getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_OTHER)
- + " Need MAIL before RCPT");
+ return MAIL_NEEDED;
} else if (argument == null
|| !argument.toUpperCase(Locale.US).equals("TO")
|| recipient == null) {
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.DELIVERY_SYNTAX)
- + " Usage: RCPT TO:<recipient>");
+ return SYNTAX_ERROR_ARGS;
}
recipient = recipient.trim();
@@ -131,10 +128,7 @@ public class RcptCmdHandler extends Abst
getContext(session, null, recipient));
session.getLogger().info(errorBuffer.toString());
}
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.DELIVERY_SYNTAX)
- + " Syntax error in parameters or arguments");
+ return SYNTAX_ERROR_DELIVERY;
}
MailAddress recipientAddress = null;
// Remove < and >
@@ -164,10 +158,7 @@ public class RcptCmdHandler extends Abst
* from RFC2822; 553 Requested action not taken: mailbox name
* not allowed (e.g., mailbox syntax incorrect)
*/
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_MAILBOX,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.ADDRESS_SYNTAX)
- + " Syntax error in recipient address");
+ return SYNTAX_ERROR_ADDRESS;
}
if (rcptOptionString != null) {
@@ -209,20 +200,15 @@ public class RcptCmdHandler extends Abst
return null;
}
- private String getContext(SMTPSession session,
- MailAddress recipientAddress, String recipient) {
+ private String getContext(SMTPSession session, MailAddress recipientAddress, String recipient) {
StringBuilder sb = new StringBuilder(128);
if (null != recipientAddress) {
- sb
- .append(" [to:"
- + recipientAddress.toString() + "]");
+ sb.append(" [to:" + recipientAddress.toString() + "]");
} else if (null != recipient) {
sb.append(" [to:" + recipient + "]");
}
if (null != session.getAttachment(SMTPSession.SENDER, State.Transaction)) {
- sb.append(" [from:"
- + ((MailAddress) session.getAttachment(
- SMTPSession.SENDER, State.Transaction)).toString() + "]");
+ sb.append(" [from:" + ((MailAddress) session.getAttachment(SMTPSession.SENDER, State.Transaction)).toString() + "]");
}
return sb.toString();
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RsetCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RsetCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RsetCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/RsetCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -41,7 +41,8 @@ public class RsetCmdHandler implements C
* The name of the command handled by the command handler
*/
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("RSET"));
-
+ private static final Response OK = new SMTPResponse(SMTPRetCode.MAIL_OK, DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.UNDEFINED_STATUS)+" OK").immutable();
+ private static final Response SYNTAX_ERROR = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Unexpected argument provided with RSET command").immutable();
/**
* handles RSET command
*
@@ -62,9 +63,9 @@ public class RsetCmdHandler implements C
private Response doRSET(SMTPSession session, String argument) {
if ((argument == null) || (argument.length() == 0)) {
session.resetState();
- return new SMTPResponse(SMTPRetCode.MAIL_OK, DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.UNDEFINED_STATUS)+" OK");
+ return OK;
} else {
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_COMMAND_UNRECOGNIZED, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Unexpected argument provided with RSET command");
+ return SYNTAX_ERROR;
}
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/VrfyCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/VrfyCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/VrfyCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/VrfyCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -39,7 +39,8 @@ import org.apache.james.protocols.smtp.d
public class VrfyCmdHandler implements CommandHandler<SMTPSession> {
private static final Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList("VRFY"));
-
+ private static final Response NOT_SUPPORTED = new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" VRFY is not supported").immutable();
/**
* Handler method called upon receipt of a VRFY command.
@@ -48,8 +49,7 @@ public class VrfyCmdHandler implements C
*
*/
public Response onCommand(SMTPSession session, Request request) {
- return new SMTPResponse(SMTPRetCode.UNIMPLEMENTED_COMMAND,
- DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.SYSTEM_NOT_CAPABLE)+" VRFY is not supported");
+ return NOT_SUPPORTED;
}
/**
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -64,6 +64,16 @@ public class AuthCmdHandler
private static final List<String> ESMTP_FEATURES = Collections.unmodifiableList(Arrays.asList("AUTH LOGIN PLAIN", "AUTH=LOGIN PLAIN"));
private final static String CHARSET = "US-ASCII";
+ private static final Response AUTH_ABORTED = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.SECURITY_AUTH) + " Authentication aborted").immutable();
+ private static final Response ALREADY_AUTH = new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_OTHER)+" User has previously authenticated. "
+ + " Further authentication is not required!").immutable();
+ private static final Response SYNTAX_ERROR = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Usage: AUTH (authentication type) <challenge>").immutable();
+ private static final Response AUTH_READY_PLAIN = new SMTPResponse(SMTPRetCode.AUTH_READY, "OK. Continue authentication").immutable();
+ private static final Response AUTH_READY_USERNAME_LOGIN = new SMTPResponse(SMTPRetCode.AUTH_READY, "VXNlcm5hbWU6").immutable(); // base64 encoded "Username:"
+ private static final Response AUTH_READY_PASSWORD_LOGIN = new SMTPResponse(SMTPRetCode.AUTH_READY, "UGFzc3dvcmQ6").immutable(); // base64 encoded "Password:
+ private static final Response AUTH_FAILED = new SMTPResponse(SMTPRetCode.AUTH_FAILED, "Authentication Failed").immutable();
+ private static final Response UNKNOWN_AUTH_TYPE = new SMTPResponse(SMTPRetCode.PARAMETER_NOT_IMPLEMENTED, "Unrecognized Authentication Type").immutable();
+
private abstract class AbstractSMTPLineHandler implements LineHandler<SMTPSession> {
public Response onLine(SMTPSession session, ByteBuffer line) {
@@ -91,7 +101,7 @@ public class AuthCmdHandler
// command by sending a 501 reply."
if (line.equals("*\r\n")) {
session.popLineHandler();
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.SECURITY_AUTH) + " Authentication aborted");
+ return AUTH_ABORTED;
}
return onCommand(session, line);
}
@@ -137,10 +147,9 @@ public class AuthCmdHandler
*/
private Response doAUTH(SMTPSession session, String argument) {
if (session.getUser() != null) {
- return new SMTPResponse(SMTPRetCode.BAD_SEQUENCE, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_OTHER)+" User has previously authenticated. "
- + " Further authentication is not required!");
+ return ALREADY_AUTH;
} else if (argument == null) {
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Usage: AUTH (authentication type) <challenge>");
+ return SYNTAX_ERROR;
} else {
String initialResponse = null;
if ((argument != null) && (argument.indexOf(" ") > 0)) {
@@ -156,7 +165,7 @@ public class AuthCmdHandler
return doPlainAuthPass(session, l);
}
});
- return new SMTPResponse(SMTPRetCode.AUTH_READY, "OK. Continue authentication");
+ return AUTH_READY_PLAIN;
} else {
userpass = initialResponse.trim();
return doPlainAuthPass(session, userpass);
@@ -169,7 +178,7 @@ public class AuthCmdHandler
return doLoginAuthPass(session, l);
}
});
- return new SMTPResponse(SMTPRetCode.AUTH_READY, "VXNlcm5hbWU6"); // base64 encoded "Username:"
+ return AUTH_READY_USERNAME_LOGIN;
} else {
String user = initialResponse.trim();
return doLoginAuthPass(session, user);
@@ -289,7 +298,7 @@ public class AuthCmdHandler
}
}.setUser(user));
- return new SMTPResponse(SMTPRetCode.AUTH_READY, "UGFzc3dvcmQ6"); // base64 encoded "Password:"
+ return AUTH_READY_PASSWORD_LOGIN;
}
private Response doLoginAuthPassCheck(SMTPSession session, String user, String pass) {
@@ -366,7 +375,7 @@ public class AuthCmdHandler
}
}
- res = new SMTPResponse(SMTPRetCode.AUTH_FAILED, "Authentication Failed");
+ res = AUTH_FAILED;
session.getLogger().error("AUTH method "+authType+" failed from " + user + "@" + session.getRemoteAddress().getAddress().getHostAddress());
return res;
}
@@ -450,7 +459,7 @@ public class AuthCmdHandler
.append(" is an unrecognized authentication type");
session.getLogger().info(errorBuffer.toString());
}
- return new SMTPResponse(SMTPRetCode.PARAMETER_NOT_IMPLEMENTED, "Unrecognized Authentication Type");
+ return UNKNOWN_AUTH_TYPE;
}
@@ -516,7 +525,7 @@ public class AuthCmdHandler
public HookResult doMailParameter(SMTPSession session, String paramName, String paramValue) {
// Ignore the AUTH command.
// TODO we should at least check for correct syntax and put the result in session
- return new HookResult(HookReturnCode.DECLINED);
+ return HookResult.declined();
}
/**
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java Sat Dec 24 21:17:27 2011
@@ -46,6 +46,8 @@ public class EhloCmdHandler extends Abst
private final static Collection<String> COMMANDS = Collections.unmodifiableCollection(Arrays.asList(COMMAND_NAME));
// see http://issues.apache.org/jira/browse/JAMES-419
private final static List<String> ESMTP_FEATURES = Collections.unmodifiableList(Arrays.asList("PIPELINING", "ENHANCEDSTATUSCODES", "8BITMIME"));
+ private static final Response DOMAIN_ADDRESS_REQUIRED = new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_INVALID_ARG) + " Domain address required: " + COMMAND_NAME).immutable();
+
private List<EhloExtension> ehloExtensions;
/**
@@ -141,10 +143,7 @@ public class EhloCmdHandler extends Abst
session.resetState();
if (parameters == null) {
- return new SMTPResponse(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.DELIVERY_INVALID_ARG)
- + " Domain address required: " + COMMAND_NAME);
+ return DOMAIN_ADDRESS_REQUIRED;
} else {
// store provided name
session.setAttachment(SMTPSession.CURRENT_HELO_NAME, parameters, State.Transaction);
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java?rev=1223019&r1=1223018&r2=1223019&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java Sat Dec 24 21:17:27 2011
@@ -45,6 +45,9 @@ public class MailSizeEsmtpExtension impl
private final static String MESG_SIZE = "MESG_SIZE"; // The size of the
private final static String MESG_FAILED = "MESG_FAILED"; // Message failed flag
private final static String[] MAIL_PARAMS = { "SIZE" };
+
+ private static final HookResult SYNTAX_ERROR = new HookResult(HookReturnCode.DENY, SMTPRetCode.SYNTAX_ERROR_ARGUMENTS, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_INVALID_ARG) + " Syntactically incorrect value for SIZE parameter");
+ private static final HookResult QUOTA_EXCEEDED = new HookResult(HookReturnCode.DENY, SMTPRetCode.QUOTA_EXCEEDED, DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.SYSTEM_MSG_TOO_BIG) + " Message size exceeds fixed maximum message size");
@@ -101,11 +104,7 @@ public class MailSizeEsmtpExtension impl
session.getLogger().error("Rejected syntactically incorrect value for SIZE parameter.");
// This is a malformed option value. We return an error
- return new HookResult(HookReturnCode.DENY,
- SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,
- DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.DELIVERY_INVALID_ARG)
- + " Syntactically incorrect value for SIZE parameter");
+ return SYNTAX_ERROR;
}
if (session.getLogger().isDebugEnabled()) {
StringBuilder debugBuffer = new StringBuilder(128).append(
@@ -126,10 +125,7 @@ public class MailSizeEsmtpExtension impl
.append(maxMessageSize).append("based on SIZE option.");
session.getLogger().error(errorBuffer.toString());
- return new HookResult(HookReturnCode.DENY, SMTPRetCode.QUOTA_EXCEEDED, DSNStatus
- .getStatus(DSNStatus.PERMANENT,
- DSNStatus.SYSTEM_MSG_TOO_BIG)
- + " Message size exceeds fixed maximum message size");
+ return QUOTA_EXCEEDED;
} else {
// put the message size in the message state so it can be used
// later to restrict messages for user quotas, etc.
@@ -189,9 +185,7 @@ public class MailSizeEsmtpExtension impl
public HookResult onMessage(SMTPSession session, MailEnvelope mail) {
Boolean failed = (Boolean) session.getAttachment(MESG_FAILED, State.Transaction);
if (failed != null && failed.booleanValue()) {
- HookResult response = new HookResult(HookReturnCode.DENY, SMTPRetCode.QUOTA_EXCEEDED,DSNStatus.getStatus(DSNStatus.PERMANENT,
- DSNStatus.SYSTEM_MSG_TOO_BIG) + " Maximum message size exceeded");
-
+
StringBuilder errorBuffer = new StringBuilder(256).append(
"Rejected message from ").append(
session.getAttachment(SMTPSession.SENDER, State.Transaction).toString())
@@ -200,9 +194,9 @@ public class MailSizeEsmtpExtension impl
.append(
session.getConfiguration().getMaxMessageSize());
session.getLogger().error(errorBuffer.toString());
- return response;
+ return QUOTA_EXCEEDED;
} else {
- return new HookResult(HookReturnCode.DECLINED);
+ return HookResult.declined();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org