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