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/23 21:36:23 UTC
svn commit: r1222834 - in /james/protocols/trunk:
api/src/main/java/org/apache/james/protocols/api/handler/
smtp/src/main/java/org/apache/james/protocols/smtp/
smtp/src/main/java/org/apache/james/protocols/smtp/core/
smtp/src/test/java/org/apache/james...
Author: norman
Date: Fri Dec 23 20:36:23 2011
New Revision: 1222834
URL: http://svn.apache.org/viewvc?rev=1222834&view=rev
Log:
Fix nullsender handling. I broke this before while refactoring state handling
Added:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/MultiLineHandler.java (with props)
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddress.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/MailCmdHandler.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/SMTPServerTest.java
Added: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/MultiLineHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/MultiLineHandler.java?rev=1222834&view=auto
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/MultiLineHandler.java (added)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/MultiLineHandler.java Fri Dec 23 20:36:23 2011
@@ -0,0 +1,57 @@
+package org.apache.james.protocols.api.handler;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.ProtocolSession.State;
+import org.apache.james.protocols.api.Response;
+
+/**
+ * A special {@link LineHandler} which will "buffer" the received lines till a point and the push them all at
+ * one to the {@link #onLines(ProtocolSession, Collection)} method
+ *
+ *
+ * @param <S>
+ */
+public abstract class MultiLineHandler<S extends ProtocolSession> implements LineHandler<S>{
+
+ private static final String BUFFERED_LINES = "BUFFERED_LINES";
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.handler.LineHandler#onLine(org.apache.james.protocols.api.ProtocolSession, byte[])
+ */
+ @SuppressWarnings("unchecked")
+ public Response onLine(S session, byte[] line) {
+ Collection<byte[]> lines = (List<byte[]>) session.getAttachment(BUFFERED_LINES, State.Transaction);
+ if (lines == null) {
+ lines = new ArrayList<byte[]>();
+ session.setAttachment(BUFFERED_LINES, lines, State.Transaction);
+ }
+ lines.add(line);
+ if (isReady(session, line)) {
+ return onLines(session, (Collection<byte[]>) session.setAttachment(BUFFERED_LINES, null, State.Transaction));
+ }
+ return null;
+ }
+
+ /**
+ * Return <code>true</code> if the buffered lines are ready to get pushed to the {@link #onLines(ProtocolSession, Collection)} method
+ *
+ * @param session
+ * @param line
+ * @return ready
+ */
+ protected abstract boolean isReady(S session, byte[] line);
+
+ /**
+ * Handle the buffered lines
+ *
+ * @param session
+ * @param lines
+ * @return response
+ */
+ protected abstract Response onLines(S session, Collection<byte[]> lines);
+}
Propchange: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/MultiLineHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddress.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddress.java?rev=1222834&r1=1222833&r2=1222834&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddress.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddress.java Fri Dec 23 20:36:23 2011
@@ -66,6 +66,30 @@ public class MailAddress {
private String localPart = null;
private String domain = null;
+ private static final MailAddress NULL_SENDER = new MailAddress() {
+
+ @Override
+ public String getDomain() {
+ return "";
+ }
+
+ @Override
+ public String getLocalPart() {
+ return "";
+ }
+
+ @Override
+ public String toString() {
+ return "";
+ }
+
+ @Override
+ public boolean isNullSender() {
+ return true;
+ }
+
+ };
+
/**
* Strips source routing. According to RFC-2821 it is a valid approach
* to handle mails containing RFC-821 source-route information.
@@ -86,6 +110,13 @@ public class MailAddress {
return pos;
}
+ public static MailAddress nullSender() {
+ return NULL_SENDER;
+ }
+
+ private MailAddress() {
+
+ }
/**
* Constructs a MailAddress by parsing the provided address.
*
@@ -478,4 +509,13 @@ public class MailAddress {
dSB.append(result);
return pos;
}
+
+ /**
+ * Return <code>true</code> if the {@link MailAddress} should represent a null sender (<>)
+ *
+ * @return nullsender
+ */
+ public boolean isNullSender() {
+ return false;
+ }
}
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=1222834&r1=1222833&r2=1222834&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 Fri Dec 23 20:36:23 2011
@@ -243,7 +243,9 @@ public class MailCmdHandler extends Abst
+ " Syntax error in sender address");
}
}
-
+ if (senderAddress == null) {
+ senderAddress = MailAddress.nullSender();
+ }
// Store the senderAddress in session map
session.setAttachment(SMTPSession.SENDER, senderAddress, State.Transaction);
}
@@ -261,7 +263,11 @@ public class MailCmdHandler extends Abst
* {@inheritDoc}
*/
protected HookResult callHook(MailHook rawHook, SMTPSession session, String parameters) {
- return rawHook.doMail(session,(MailAddress) session.getAttachment(SMTPSession.SENDER, State.Transaction));
+ MailAddress sender = (MailAddress) session.getAttachment(SMTPSession.SENDER, State.Transaction);
+ if (sender.isNullSender()) {
+ sender = null;
+ }
+ return rawHook.doMail(session, sender);
}
@@ -301,5 +307,6 @@ public class MailCmdHandler extends Abst
protected String getDefaultDomain() {
return "localhost";
}
+
}
Modified: james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/SMTPServerTest.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/SMTPServerTest.java?rev=1222834&r1=1222833&r2=1222834&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/SMTPServerTest.java (original)
+++ james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/SMTPServerTest.java Fri Dec 23 20:36:23 2011
@@ -674,6 +674,44 @@ public class SMTPServerTest {
}
@Test
+ public void testNullSender() throws Exception {
+
+ InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+
+ NettyServer server = null;
+ try {
+ server = new NettyServer(createProtocol(new ProtocolHandler[0]));
+ server.setListenAddresses(address);
+ server.bind();
+
+ SMTPClient client = createClient();
+ client.connect(address.getAddress().getHostAddress(), address.getPort());
+ assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+
+ client.helo("localhost");
+ assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+ client.setSender("");
+ assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+ client.addRecipient(RCPT1);
+ assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+
+
+ client.quit();
+ assertTrue("Reply="+ client.getReplyString(), SMTPReply.isPositiveCompletion(client.getReplyCode()));
+ client.disconnect();
+
+ } finally {
+ if (server != null) {
+ server.unbind();
+ }
+ }
+
+ }
+
+ @Test
public void testMessageHookPermanentError() throws Exception {
TestMessageHook testHook = new TestMessageHook();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org