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 2011/08/22 12:51:10 UTC

svn commit: r1160200 - in /james/server/trunk: imapserver/src/main/java/org/apache/james/imapserver/netty/ pop3server/src/main/java/org/apache/james/pop3server/core/

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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org