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 2012/01/13 17:02:45 UTC
svn commit: r1231143 - in
/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core:
AbstractAddHeadersFilter.java ReceivedDataLineFilter.java
esmtp/EhloCmdHandler.java fastfail/ResolvableEhloHeloHandler.java
Author: norman
Date: Fri Jan 13 16:02:44 2012
New Revision: 1231143
URL: http://svn.apache.org/viewvc?rev=1231143&view=rev
Log:
Correctly format the Received header and it to the message. See PROTOCOLS-88
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAddHeadersFilter.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.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/fastfail/ResolvableEhloHeloHandler.java
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAddHeadersFilter.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAddHeadersFilter.java?rev=1231143&r1=1231142&r2=1231143&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAddHeadersFilter.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAddHeadersFilter.java Fri Jan 13 16:02:44 2012
@@ -20,7 +20,9 @@ package org.apache.james.protocols.smtp.
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.james.protocols.api.ProtocolSession.State;
@@ -99,22 +101,24 @@ public abstract class AbstractAddHeaders
public static final String MULTI_LINE_PREFIX = " ";
public final String name;
- public final String value;
-
- private final String[] lines;
- private final String lineDelimiter;
-
- public Header(String name, String value, String lineDelimiter) {
+ public final List<String> values = new ArrayList<String>();
+
+ public Header(String name, String value) {
this.name = name;
- this.value = value;
- this.lines = toString().split(lineDelimiter);
- this.lineDelimiter = lineDelimiter;
+ this.values.add(value);
}
- public String toString() {
- return name + ": " + value + lineDelimiter;
+ /**
+ * Add the value to the header
+ * @param value
+ * @return
+ */
+ public Header add(String value) {
+ values.add(value);
+ return this;
}
+
/**
* Transfer the content of the {@link Header} to the given {@link LineHandler}.
*
@@ -130,11 +134,17 @@ public abstract class AbstractAddHeaders
try {
Response response = null;
- for (int i = 0; i < lines.length; i++) {
- response = handler.onLine(session, ByteBuffer.wrap((lines[i] + session.getLineDelimiter()).getBytes(charset)));
- if (response != null) {
- break;
- }
+ for (int i = 0; i < values.size(); i++) {
+ String line;
+ if (i == 0) {
+ line = name + ": " + values.get(i);
+ } else {
+ line = MULTI_LINE_PREFIX + values.get(i);
+ }
+ response = handler.onLine(session, ByteBuffer.wrap((line + session.getLineDelimiter()).getBytes(charset)));
+ if (response != null) {
+ break;
+ }
}
return response;
} catch (UnsupportedEncodingException e) {
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java?rev=1231143&r1=1231142&r2=1231143&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java Fri Jan 13 16:02:44 2012
@@ -105,26 +105,33 @@ public class ReceivedDataLineFilter exte
headerLineBuffer.append("from ").append(session.getRemoteAddress().getHostName());
if (heloName != null) {
- headerLineBuffer.append(" (").append(heloMode).append(" ").append(heloName).append(") ");
+ headerLineBuffer.append(" (").append(heloMode).append(" ").append(heloName).append(")");
}
- headerLineBuffer.append(" ([").append(session.getRemoteAddress().getAddress().getHostAddress()).append("])").append(session.getLineDelimiter());
- headerLineBuffer.delete(0, headerLineBuffer.length());
-
- headerLineBuffer.append(Header.MULTI_LINE_PREFIX).append("by ").append(session.getConfiguration().getHelloName()).append(" (").append(session.getConfiguration().getSoftwareName()).append(") with ").append(getServiceType(session, heloMode));
+ headerLineBuffer.append(" ([").append(session.getRemoteAddress().getAddress().getHostAddress()).append("])");
+ Header header = new Header("Received", headerLineBuffer.toString());
+
+ headerLineBuffer = new StringBuilder();
+ headerLineBuffer.append("by ").append(session.getConfiguration().getHelloName()).append(" (").append(session.getConfiguration().getSoftwareName()).append(") with ").append(getServiceType(session, heloMode));
headerLineBuffer.append(" ID ").append(session.getSessionID());
if (((Collection<?>) session.getAttachment(SMTPSession.RCPT_LIST, State.Transaction)).size() == 1) {
// Only indicate a recipient if they're the only recipient
// (prevents email address harvesting and large headers in
// bulk email)
- headerLineBuffer.append(session.getLineDelimiter());
- headerLineBuffer.append(Header.MULTI_LINE_PREFIX).append("for <").append(((List<MailAddress>) session.getAttachment(SMTPSession.RCPT_LIST, State.Transaction)).get(0).toString()).append(">;");
+ header.add(headerLineBuffer.toString());
+
+ headerLineBuffer = new StringBuilder();
+ headerLineBuffer.append("for <").append(((List<MailAddress>) session.getAttachment(SMTPSession.RCPT_LIST, State.Transaction)).get(0).toString()).append(">;");
} else {
// Put the ; on the end of the 'by' line
headerLineBuffer.append(";");
}
- headerLineBuffer.append(Header.MULTI_LINE_PREFIX).append(DATEFORMAT.get().format(new Date()));
+ header.add(headerLineBuffer.toString());
+ headerLineBuffer = new StringBuilder();
+
+ headerLineBuffer.append(DATEFORMAT.get().format(new Date()));
- return Arrays.asList(new Header("Received", headerLineBuffer.toString(), session.getLineDelimiter()));
+ header.add(headerLineBuffer.toString());
+ return Arrays.asList(header);
}
}
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=1231143&r1=1231142&r2=1231143&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 Fri Jan 13 16:02:44 2012
@@ -146,7 +146,7 @@ public class EhloCmdHandler extends Abst
return DOMAIN_ADDRESS_REQUIRED;
} else {
// store provided name
- session.setAttachment(SMTPSession.CURRENT_HELO_NAME, parameters, State.Transaction);
+ session.setAttachment(SMTPSession.CURRENT_HELO_NAME, parameters, State.Connection);
return null;
}
}
Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandler.java?rev=1231143&r1=1231142&r2=1231143&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandler.java Fri Jan 13 16:02:44 2012
@@ -91,7 +91,7 @@ public class ResolvableEhloHeloHandler i
public HookResult doRcpt(SMTPSession session, MailAddress sender, MailAddress rcpt) {
if (check(session,rcpt)) {
return new HookResult(HookReturnCode.DENY,SMTPRetCode.SYNTAX_ERROR_ARGUMENTS,DSNStatus.getStatus(DSNStatus.PERMANENT, DSNStatus.DELIVERY_INVALID_ARG)
- + " Provided EHLO/HELO " + session.getAttachment(SMTPSession.CURRENT_HELO_NAME, State.Transaction) + " can not resolved.");
+ + " Provided EHLO/HELO " + session.getAttachment(SMTPSession.CURRENT_HELO_NAME, State.Connection) + " can not resolved.");
} else {
return HookResult.declined();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org