Author: norman Date: Mon Aug 22 10:51:10 2011 New Revision: 1160200 URL: http://svn.apache.org/viewvc?rev=1160200&view=rev Log: Use the raw message header for TOP and RETR response. See MAILBOX-115
Modified: james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ChannelImapResponseWriter.java 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/imapserver/src/main/java/org/apache/james/imapserver/netty/ChannelImapResponseWriter.java URL: http://svn.apache.org/viewvc/james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ChannelImapResponseWriter.java?rev=1160200&r1=1160199&r2=1160200&view=diff ============================================================================== --- james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ChannelImapResponseWriter.java (original) +++ james/server/trunk/imapserver/src/main/java/org/apache/james/imapserver/netty/ChannelImapResponseWriter.java Mon Aug 22 10:51:10 2011 @@ -20,7 +20,6 @@ package org.apache.james.imapserver.netty; import java.io.IOException; -import java.nio.ByteBuffer; import org.apache.james.imap.encode.ImapResponseWriter; import org.apache.james.imap.message.response.Literal; @@ -43,9 +42,9 @@ public class ChannelImapResponseWriter i /* * (non-Javadoc) - * @see org.apache.james.imap.encode.ImapResponseWriter#write(java.nio.ByteBuffer) + * @see org.apache.james.imap.encode.ImapResponseWriter#write(byte[]) */ - public void write(ByteBuffer buffer) throws IOException { + public void write(byte[] buffer) throws IOException { channel.write(ChannelBuffers.wrappedBuffer(buffer)); } 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=1160200&r1=1160199&r2=1160200&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 Mon Aug 22 10:51:10 2011 @@ -20,10 +20,7 @@ package org.apache.james.pop3server.core; import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.nio.channels.Channels; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -32,7 +29,6 @@ import java.util.NoSuchElementException; import java.util.Set; import org.apache.james.mailbox.Content; -import org.apache.james.mailbox.InputStreamContent; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageRange; @@ -96,15 +92,9 @@ public class RetrCmdHandler implements C // response = new // POP3Response(POP3Response.OK_RESPONSE, // "Message follows"); - Content content = result.getFullContent(); - InputStream in; - if (content instanceof InputStreamContent) { - in = ((InputStreamContent) content).getInputStream(); - } else { - in = createInputStream(content); - } + Content content = result.getFullContent(); // session.writeStream(new ExtraDotInputStream(in)); - session.writeStream(new CRLFTerminatedInputStream(new ExtraDotInputStream(in))); + session.writeStream(new CRLFTerminatedInputStream(new ExtraDotInputStream(content.getInputStream()))); } finally { // write a single dot to mark message as complete @@ -138,11 +128,6 @@ public class RetrCmdHandler implements C return response; } - protected InputStream createInputStream(Content content) throws IOException { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - content.writeTo(Channels.newChannel(out)); - return new ByteArrayInputStream(out.toByteArray()); - } /* * (non-Javadoc) 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=1160200&r1=1160199&r2=1160200&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 Mon Aug 22 10:51:10 2011 @@ -20,28 +20,24 @@ package org.apache.james.pop3server.core; import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; -import java.nio.channels.WritableByteChannel; +import java.io.SequenceInputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.Set; -import org.apache.james.mailbox.Content; -import org.apache.james.mailbox.InputStreamContent; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageRange; import org.apache.james.mailbox.MessageResult; import org.apache.james.mailbox.MessageResult.FetchGroup; -import org.apache.james.mailbox.MessageResult.Header; import org.apache.james.pop3server.POP3Response; import org.apache.james.pop3server.POP3Session; import org.apache.james.protocols.api.Request; @@ -117,31 +113,12 @@ public class TopCmdHandler extends RetrC session.writeStream(new ByteArrayInputStream((POP3Response.OK_RESPONSE + " Message follows\r\n").getBytes())); try { - ByteArrayOutputStream headersOut = new ByteArrayOutputStream(); - WritableByteChannel headersChannel = Channels.newChannel(headersOut); + + InputStream headersIn = result.getHeaders().getInputStream(); + InputStream bodyIn = new CountingBodyInputStream(new ExtraDotInputStream(new CRLFTerminatedInputStream(result.getBody().getInputStream())), lines); - // write headers - Iterator<Header> headers = result.headers(); - while (headers.hasNext()) { - headers.next().writeTo(headersChannel); - - // we need to write out the CRLF after each - // header - headersChannel.write(ByteBuffer.wrap("\r\n".getBytes())); - } - // headers and body are seperated by a CRLF - headersChannel.write(ByteBuffer.wrap("\r\n".getBytes())); - session.writeStream(new ByteArrayInputStream(headersOut.toByteArray())); - - InputStream bodyIn; - Content content = result.getBody(); - if (content instanceof InputStreamContent) { - bodyIn = ((InputStreamContent) content).getInputStream(); - } else { - bodyIn = createInputStream(content); - } // write body - session.writeStream(new CountingBodyInputStream(new ExtraDotInputStream(new CRLFTerminatedInputStream(bodyIn)), lines)); + session.writeStream(new SequenceInputStream(Collections.enumeration(Arrays.asList(headersIn, new ByteArrayInputStream("\r\n".getBytes()), bodyIn)))); } finally { // write a single dot to mark message as complete --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org