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: [email protected]
For additional commands, e-mail: [email protected]