james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nor...@apache.org
Subject svn commit: r911507 - in /james/server/trunk: mina-socket/src/main/java/org/apache/james/socket/mina/codec/ smtpserver/src/main/java/org/apache/james/smtpserver/mina/
Date Thu, 18 Feb 2010 18:19:52 GMT
Author: norman
Date: Thu Feb 18 18:19:52 2010
New Revision: 911507

URL: http://svn.apache.org/viewvc?rev=911507&view=rev
Log:
Make sure to only check for max line length while processing not the DATA command

Modified:
    james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java
    james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java

Modified: james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java?rev=911507&r1=911506&r2=911507&view=diff
==============================================================================
--- james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java
(original)
+++ james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/CRLFTerminatedLineDecoder.java
Thu Feb 18 18:19:52 2010
@@ -33,6 +33,8 @@
 public class CRLFTerminatedLineDecoder extends CumulativeProtocolDecoder {
 
     private int maxLineLength;
+
+    private boolean check = true;
     
     public static int DEFAULT_MAX_LINE_LENTH = 2048;
     
@@ -52,7 +54,11 @@
     public CRLFTerminatedLineDecoder() {
         this(DEFAULT_MAX_LINE_LENTH);
     }
+   
     
+    public synchronized void checkLineLengthLimit(boolean check) {
+        this.check = check;
+    }
     
     /*
      * (non-Javadoc)
@@ -69,7 +75,7 @@
         // Now find the first CRLF in the buffer.
         byte previous = 0;
         
-        if (maxLineLength != -1 && in.remaining() > maxLineLength) {
+        if (check && maxLineLength != -1 && in.remaining() > maxLineLength)
{
             
             // clear the buffer before throw exception
             in.clear();

Modified: james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java?rev=911507&r1=911506&r2=911507&view=diff
==============================================================================
--- james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java
(original)
+++ james/server/trunk/mina-socket/src/main/java/org/apache/james/socket/mina/codec/JamesProtocolCodecFactory.java
Thu Feb 18 18:19:52 2010
@@ -21,6 +21,7 @@
 
 import java.nio.charset.Charset;
 
+import org.apache.mina.core.session.AttributeKey;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.filter.codec.ProtocolCodecFactory;
 import org.apache.mina.filter.codec.ProtocolDecoder;
@@ -34,7 +35,9 @@
  *
  */
 public class JamesProtocolCodecFactory  implements ProtocolCodecFactory {
-    
+    public static final AttributeKey DECODER_KEY = new AttributeKey(CRLFTerminatedLineDecoder.class,"decoder");
+    public static final AttributeKey ENCODER_KEY = new AttributeKey(TextLineEncoder.class,"encoder");
+
     private final ProtocolEncoder encoder = new TextLineEncoder(Charset.forName("US-ASCII"),
LineDelimiter.CRLF);
     private final ProtocolDecoder decoder = new CRLFTerminatedLineDecoder();
     
@@ -43,6 +46,8 @@
      * @see org.apache.mina.filter.codec.ProtocolCodecFactory#getEncoder(org.apache.mina.core.session.IoSession)
      */
     public ProtocolEncoder getEncoder(IoSession arg0) throws Exception {
+        arg0.setAttribute(ENCODER_KEY,encoder);
+
         return encoder;
     }
     
@@ -51,6 +56,7 @@
      * @see org.apache.mina.filter.codec.ProtocolCodecFactory#getDecoder(org.apache.mina.core.session.IoSession)
      */
     public ProtocolDecoder getDecoder(IoSession arg0) throws Exception {
+        arg0.setAttribute(DECODER_KEY,decoder);
         return decoder;
     }
 }

Modified: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java?rev=911507&r1=911506&r2=911507&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
(original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/mina/SMTPSessionImpl.java
Thu Feb 18 18:19:52 2010
@@ -33,6 +33,8 @@
 import org.apache.james.smtpserver.mina.filter.SMTPResponseFilter;
 import org.apache.james.smtpserver.mina.filter.TarpitFilter;
 import org.apache.james.socket.mina.AbstractMINASession;
+import org.apache.james.socket.mina.codec.CRLFTerminatedLineDecoder;
+import org.apache.james.socket.mina.codec.JamesProtocolCodecFactory;
 import org.apache.james.socket.mina.filter.FilterLineHandlerAdapter;
 import org.apache.mina.core.session.IoSession;
 
@@ -113,6 +115,7 @@
             if (currentHeloMode != null) {
                 getState().put(CURRENT_HELO_MODE, currentHeloMode);
             }
+            
         }
 
         /**
@@ -122,6 +125,9 @@
             getIoSession().getFilterChain()
                     .remove("lineHandler" + lineHandlerCount);
             lineHandlerCount--;
+            if (lineHandlerCount == 0) {
+                ((CRLFTerminatedLineDecoder)getIoSession().getAttribute(JamesProtocolCodecFactory.DECODER_KEY)).checkLineLengthLimit(true);
+            }
         }
 
         /**
@@ -132,6 +138,10 @@
             getIoSession().getFilterChain().addAfter(SMTPResponseFilter.NAME,
                     "lineHandler" + lineHandlerCount,
                     new FilterLineHandlerAdapter<SMTPSession>(overrideCommandHandler,SMTP_SESSION));
+            // disable the line length limit because we are processing the data
+            // not sure if this is the right place todo this
+            ((CRLFTerminatedLineDecoder)getIoSession().getAttribute(JamesProtocolCodecFactory.DECODER_KEY)).checkLineLengthLimit(false);
+            
         }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message