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