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 2010/04/04 20:01:50 UTC

svn commit: r930727 - in /james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core: RetrCmdHandler.java TopCmdHandler.java

Author: norman
Date: Sun Apr  4 18:01:50 2010
New Revision: 930727

URL: http://svn.apache.org/viewvc?rev=930727&view=rev
Log:
Make sure we write an extra dot if a line starts with a dot

Modified:
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java

Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java?rev=930727&r1=930726&r2=930727&view=diff
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java (original)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/RetrCmdHandler.java Sun Apr  4 18:01:50 2010
@@ -40,6 +40,7 @@ import org.apache.james.protocols.api.Co
 import org.apache.james.protocols.api.Request;
 import org.apache.james.protocols.api.Response;
 import org.apache.james.socket.MessageStream;
+import org.apache.james.util.stream.ExtraDotOutputStream;
 
 /**
  * Handles RETR command
@@ -74,14 +75,21 @@ public class RetrCmdHandler implements C
                     Iterator<MessageResult> results = session.getUserMailbox().getMessages(MessageRange.one(uid), new FetchGroupImpl(FetchGroup.FULL_CONTENT), mailboxSession);
                     MessageStream stream = new MessageStream();
                     OutputStream out = stream.getOutputStream();
+                    OutputStream extraDotOut = new ExtraDotOutputStream(out);
+                    
                     out.write((POP3Response.OK_RESPONSE + " Message follows\r\n").getBytes());
+                    out.flush();
+                    
                     // response = new POP3Response(POP3Response.OK_RESPONSE,
                     // "Message follows");
                     try {
                         MessageResult result = results.next();
-                        result.getFullContent().writeTo(Channels.newChannel(out));
+                        result.getFullContent().writeTo(Channels.newChannel(extraDotOut));
 
-                    } finally {
+                    } finally { 
+                        extraDotOut.flush();
+                        
+                        // write a single dot to mark message as complete
                         out.write((".\r\n").getBytes());
                         out.flush();
                     }

Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java?rev=930727&r1=930726&r2=930727&view=diff
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java (original)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java Sun Apr  4 18:01:50 2010
@@ -42,6 +42,7 @@ import org.apache.james.pop3server.POP3S
 import org.apache.james.protocols.api.Request;
 import org.apache.james.protocols.api.Response;
 import org.apache.james.socket.MessageStream;
+import org.apache.james.util.stream.ExtraDotOutputStream;
 
 /**
  * Handles TOP command
@@ -97,13 +98,16 @@ public class TopCmdHandler extends RetrC
                     Iterator<MessageResult> results = session.getUserMailbox().getMessages(MessageRange.one(uid), fetchGroup, mailboxSession);
                     MessageStream stream = new MessageStream();
                     OutputStream out = stream.getOutputStream();
+                    OutputStream extraDotOut = new ExtraDotOutputStream(out);
+                    
                     out.write((POP3Response.OK_RESPONSE + " Message follows\r\n").getBytes());
+                    out.flush();
                     // response = new POP3Response(POP3Response.OK_RESPONSE,
                     // "Message follows");
                     try {
                         MessageResult result = results.next();
 
-                        WritableByteChannel outChannel = Channels.newChannel(out);
+                        WritableByteChannel outChannel = Channels.newChannel(extraDotOut);
 
                         // write headers
                         Iterator<Header> headers = result.headers();
@@ -111,16 +115,18 @@ public class TopCmdHandler extends RetrC
                             headers.next().writeTo(outChannel);
 
                             // we need to write out the CRLF after each header
-                            out.write("\r\n".getBytes());
+                            extraDotOut.write("\r\n".getBytes());
 
                         }
                         // headers and body are seperated by a CRLF
-                        out.write("\r\n".getBytes());
+                        extraDotOut.write("\r\n".getBytes());
 
                         // write body
-                        result.getBody().writeTo(Channels.newChannel(new CountingBodyOutputStream(out, lines)));
+                        result.getBody().writeTo(Channels.newChannel(new CountingBodyOutputStream(extraDotOut, lines)));
 
                     } finally {
+                        extraDotOut.flush();
+                        // write a single dot to mark message as complete
                         out.write((".\r\n").getBytes());
                         out.flush();
                     }



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