Author: norman
Date: Sun Jan 23 11:04:53 2011
New Revision: 1062386

URL: http://svn.apache.org/viewvc?rev=1062386&view=rev
Log:
Make sure we don't send multiple "+\r\n" while retry to parse request

Modified:
    
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
    
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java

Modified: 
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java?rev=1062386&r1=1062385&r2=1062386&view=diff
==============================================================================
--- 
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
 (original)
+++ 
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
 Sun Jan 23 11:04:53 2011
@@ -47,10 +47,11 @@ public class ImapRequestFrameDecoder ext
      */
     protected Object decode(ChannelHandlerContext ctx, Channel channel, 
ChannelBuffer buffer) throws Exception {
         buffer.markReaderIndex();
-        
+        boolean retry = false;
         // check if we failed before and if we already know how much data we 
need to sucess next run
         Object attachment = ctx.getAttachment();
         if (attachment != null) {
+            retry = true;
             int size = (Integer) attachment;
             // now see if the buffer hold enough data to process.
             if (size != 
NettyImapRequestLineReader.NotEnoughDataException.UNKNOWN_SIZE && size > 
buffer.readableBytes()) {
@@ -62,7 +63,7 @@ public class ImapRequestFrameDecoder ext
         
         try {
             
-            ImapRequestLineReader reader = new 
NettyImapRequestLineReader(channel, buffer);
+            ImapRequestLineReader reader = new 
NettyImapRequestLineReader(channel, buffer, retry);
             ImapMessage message = decoder.decode(reader, (ImapSession) 
attributes.get(channel));
 
             // ok no errors found consume the rest of the line

Modified: 
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java?rev=1062386&r1=1062385&r2=1062386&view=diff
==============================================================================
--- 
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java
 (original)
+++ 
james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java
 Sun Jan 23 11:04:53 2011
@@ -38,10 +38,13 @@ public class NettyImapRequestLineReader 
     private ChannelBuffer buffer;
     private Channel channel;
     private ChannelBuffer cRequest = 
ChannelBuffers.wrappedBuffer("+\r\n".getBytes());
-
-    public NettyImapRequestLineReader(Channel channel, ChannelBuffer buffer) {
+    private boolean retry;
+    
+    public NettyImapRequestLineReader(Channel channel, ChannelBuffer buffer, 
boolean retry) {
         this.buffer = buffer;
         this.channel = channel;
+        this.retry = retry;
+        
     }
 
 
@@ -83,7 +86,9 @@ public class NettyImapRequestLineReader 
      * @see 
org.apache.james.imap.decode.ImapRequestLineReader#commandContinuationRequest()
      */
     protected void commandContinuationRequest() throws DecodingException {
-        channel.write(cRequest);
+        // only write the request out if this is not a retry to process the 
request..
+        
+        if (!retry) channel.write(cRequest);
     }
     
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to