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/10/28 12:44:37 UTC
svn commit: r1028254 - in /james/server/trunk:
imapserver/src/main/java/org/jboss/netty/handler/stream/
netty-socket/src/main/java/org/jboss/
netty-socket/src/main/java/org/jboss/netty/
netty-socket/src/main/java/org/jboss/netty/handler/ netty-socket/s...
Author: norman
Date: Thu Oct 28 10:44:37 2010
New Revision: 1028254
URL: http://svn.apache.org/viewvc?rev=1028254&view=rev
Log:
Allow to efficient write the message to the client on RETR and TOP commands (JAMES-1093)
Added:
james/server/trunk/netty-socket/src/main/java/org/jboss/
james/server/trunk/netty-socket/src/main/java/org/jboss/netty/
james/server/trunk/netty-socket/src/main/java/org/jboss/netty/handler/
james/server/trunk/netty-socket/src/main/java/org/jboss/netty/handler/stream/
- copied from r1026947, james/server/trunk/imapserver/src/main/java/org/jboss/netty/handler/stream/
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NonClosingChannelOutputStream.java
Removed:
james/server/trunk/imapserver/src/main/java/org/jboss/netty/handler/stream/
james/server/trunk/util/src/main/java/org/apache/james/util/stream/MessageStream.java
Modified:
james/server/trunk/netty-socket/src/main/java/org/jboss/netty/handler/stream/ChannelOutputStream.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.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
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java
Modified: james/server/trunk/netty-socket/src/main/java/org/jboss/netty/handler/stream/ChannelOutputStream.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/jboss/netty/handler/stream/ChannelOutputStream.java?rev=1028254&r1=1026947&r2=1028254&view=diff
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/jboss/netty/handler/stream/ChannelOutputStream.java (original)
+++ james/server/trunk/netty-socket/src/main/java/org/jboss/netty/handler/stream/ChannelOutputStream.java Thu Oct 28 10:44:37 2010
@@ -87,5 +87,14 @@ public class ChannelOutputStream extends
"The bytes could not be written to the session");
}
}
+
+ /**
+ * Return the Channel
+ *
+ * @return channel
+ */
+ public Channel getChannel() {
+ return channel;
+ }
}
Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java?rev=1028254&r1=1028253&r2=1028254&view=diff
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java (original)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java Thu Oct 28 10:44:37 2010
@@ -22,6 +22,8 @@
package org.apache.james.pop3server;
+import java.io.OutputStream;
+
import org.apache.james.mailbox.MessageManager;
import org.apache.james.protocols.api.TLSSupportedSession;
@@ -32,13 +34,6 @@ import org.apache.james.protocols.api.TL
public interface POP3Session extends TLSSupportedSession {
- /**
- * A placeholder for emails deleted during the course of the POP3 transaction.
- * This Mail instance is used to enable fast checks as to whether an email has been
- * deleted from the inbox.
- */
- public final static String DELETED ="DELETED_MAIL";
-
public final static String UID_LIST = "UID_LIST";
public final static String DELETED_UID_LIST = "DELETED_UID_LIST";
public final static String MAILBOX_SESSION = "MAILBOX_SESSION";
@@ -89,5 +84,12 @@ public interface POP3Session extends TLS
* @param userMailbox mailbox
*/
void setUserMailbox(MessageManager mailbox);
+
+ /**
+ * Get output stream which connects to the underlying socket. This can be used to write big bunch of data without keep it all in memory
+ *
+ * @return out
+ */
+ OutputStream getOutputStream();
}
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=1028254&r1=1028253&r2=1028254&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 Thu Oct 28 10:44:37 2010
@@ -40,7 +40,6 @@ 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.util.stream.ExtraDotOutputStream;
-import org.apache.james.util.stream.MessageStream;
/**
* Handles RETR command
@@ -73,8 +72,7 @@ public class RetrCmdHandler implements C
Long uid = uidList.get(num - 1);
if (deletedUidList.contains(uid) == false) {
Iterator<MessageResult> results = session.getUserMailbox().getMessages(MessageRange.one(uid), new FetchGroupImpl(FetchGroup.FULL_CONTENT), mailboxSession);
- MessageStream stream = new MessageStream();
- OutputStream out = stream.getOutputStream();
+ OutputStream out = session.getOutputStream();
OutputStream extraDotOut = new ExtraDotOutputStream(out);
out.write((POP3Response.OK_RESPONSE + " Message follows\r\n").getBytes());
@@ -97,8 +95,6 @@ public class RetrCmdHandler implements C
out.close();
}
- session.writeStream(stream.getInputStream());
-
return null;
} else {
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=1028254&r1=1028253&r2=1028254&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 Thu Oct 28 10:44:37 2010
@@ -42,7 +42,6 @@ import org.apache.james.pop3server.POP3S
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
import org.apache.james.util.stream.ExtraDotOutputStream;
-import org.apache.james.util.stream.MessageStream;
/**
* Handles TOP command
@@ -96,14 +95,10 @@ public class TopCmdHandler extends RetrC
FetchGroupImpl fetchGroup = new FetchGroupImpl(FetchGroup.BODY_CONTENT);
fetchGroup.or(FetchGroup.HEADERS);
Iterator<MessageResult> results = session.getUserMailbox().getMessages(MessageRange.one(uid), fetchGroup, mailboxSession);
- MessageStream stream = new MessageStream();
- OutputStream out = stream.getOutputStream();
+ OutputStream out = session.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();
@@ -133,7 +128,6 @@ public class TopCmdHandler extends RetrC
extraDotOut.close();
out.close();
}
- session.writeStream(stream.getInputStream());
return null;
Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NonClosingChannelOutputStream.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NonClosingChannelOutputStream.java?rev=1028254&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NonClosingChannelOutputStream.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NonClosingChannelOutputStream.java Thu Oct 28 10:44:37 2010
@@ -0,0 +1,46 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.pop3server.netty;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.jboss.netty.channel.Channel;
+import org.jboss.netty.handler.stream.ChannelOutputStream;
+
+/**
+ * Allow to write via an {@link OutputStream} to the underlying {@link Channel}
+ *
+ */
+public class NonClosingChannelOutputStream extends ChannelOutputStream{
+
+ public NonClosingChannelOutputStream(Channel channel) {
+ super(channel);
+ }
+
+ /**
+ * Just flush the stream. This will NOT close the underlying Channel
+ *
+ */
+ @Override
+ public void close() throws IOException {
+ flush();
+ }
+
+}
Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java?rev=1028254&r1=1028253&r2=1028254&view=diff
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java (original)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java Thu Oct 28 10:44:37 2010
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.james.pop3server.netty;
+import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
@@ -118,4 +119,13 @@ public class POP3NettySession extends Ab
this.mailbox = mailbox;
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.pop3server.POP3Session#getOutputStream()
+ */
+ public OutputStream getOutputStream() {
+ return new NonClosingChannelOutputStream(getChannelHandlerContext().getChannel());
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org