Author: norman
Date: Sat Sep 17 14:06:40 2011
New Revision: 1171984
URL: http://svn.apache.org/viewvc?rev=1171984&view=rev
Log:
Refactor pop3server for latest protocols refactoring
Added:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Protocol.java
(with props)
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3SessionImpl.java
- copied, changed from r1171924,
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3StreamResponse.java
(with props)
Removed:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ChannelUpstreamHandler.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java
Modified:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Response.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/core/WelcomeMessageHandler.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ResponseEncoder.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
Added:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Protocol.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Protocol.java?rev=1171984&view=auto
==============================================================================
---
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Protocol.java
(added)
+++
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Protocol.java
Sat Sep 17 14:06:40 2011
@@ -0,0 +1,67 @@
+/****************************************************************
+ * 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;
+
+import org.apache.james.protocols.api.Protocol;
+import org.apache.james.protocols.api.ProtocolHandlerChain;
+import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.ProtocolSessionFactory;
+import org.apache.james.protocols.api.ProtocolTransport;
+import org.apache.james.protocols.api.Response;
+import org.slf4j.Logger;
+
+public class POP3Protocol implements Protocol{
+
+ private ProtocolHandlerChain chain;
+ private POP3HandlerConfigurationData config;
+ private Logger logger;
+
+ public POP3Protocol(ProtocolHandlerChain chain,
POP3HandlerConfigurationData config, Logger logger) {
+ this.chain = chain;
+ this.config = config;
+ this.logger = logger;
+ }
+ @Override
+ public ProtocolHandlerChain getProtocolChain() {
+ return chain;
+ }
+
+ @Override
+ public ProtocolSessionFactory getProtocolSessionFactory() {
+ return new ProtocolSessionFactory() {
+
+ @Override
+ public ProtocolSession newSession(ProtocolTransport transport) {
+ return new POP3SessionImpl(logger, transport, config);
+ }
+ };
+ }
+
+ @Override
+ public boolean isStartTLSSupported() {
+ return config.isStartTLSSupported();
+ }
+
+ @Override
+ public Class<? extends Response> getResponseClass() {
+ return POP3Response.class;
+ }
+
+}
Propchange:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Protocol.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Response.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Response.java?rev=1171984&r1=1171983&r2=1171984&view=diff
==============================================================================
---
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Response.java
(original)
+++
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Response.java
Sat Sep 17 14:06:40 2011
@@ -19,6 +19,7 @@
package org.apache.james.pop3server;
+import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -98,7 +99,15 @@ public class POP3Response implements Ret
* @return all responseLines
*/
public List<CharSequence> getLines() {
- return lines;
+ List<CharSequence> responseList = new ArrayList<CharSequence>();
+ for (int i = 0; i < lines.size(); i++) {
+ if (i == 0) {
+ responseList.add(getRetCode() + " " +lines.get(i));
+ } else {
+ responseList.add(lines.get(i));
+ }
+ }
+ return responseList;
}
/**
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=1171984&r1=1171983&r2=1171984&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
Sat Sep 17 14:06:40 2011
@@ -19,8 +19,6 @@
package org.apache.james.pop3server;
-import java.io.InputStream;
-
import org.apache.james.mailbox.MessageManager;
import org.apache.james.protocols.api.TLSSupportedSession;
@@ -81,6 +79,4 @@ public interface POP3Session extends TLS
* mailbox
*/
void setUserMailbox(MessageManager mailbox);
-
- void writeStream(InputStream in);
}
Copied:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3SessionImpl.java
(from r1171924,
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/POP3SessionImpl.java?p2=james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3SessionImpl.java&p1=james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java&r1=1171924&r2=1171984&rev=1171984&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/POP3SessionImpl.java
Sat Sep 17 14:06:40 2011
@@ -16,32 +16,21 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.pop3server.netty;
+package org.apache.james.pop3server;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.channels.FileChannel;
import java.util.HashMap;
import java.util.Map;
-import javax.net.ssl.SSLEngine;
-
import org.apache.james.mailbox.MessageManager;
-import org.apache.james.pop3server.POP3HandlerConfigurationData;
-import org.apache.james.pop3server.POP3Session;
-import org.apache.james.protocols.impl.AbstractSession;
-import org.jboss.netty.channel.Channel;
-import org.jboss.netty.channel.DefaultFileRegion;
-import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
-import org.jboss.netty.handler.stream.ChunkedNioFile;
-import org.jboss.netty.handler.stream.ChunkedStream;
+import org.apache.james.protocols.api.AbstractSession;
+import org.apache.james.protocols.api.ProtocolTransport;
+import org.apache.james.protocols.api.Response;
import org.slf4j.Logger;
/**
* {@link POP3Session} implementation which use Netty
*/
-public class POP3NettySession extends AbstractSession implements POP3Session {
+public class POP3SessionImpl extends AbstractSession implements POP3Session {
private POP3HandlerConfigurationData configData;
private Map<String, Object> state = new HashMap<String, Object>();
@@ -50,22 +39,12 @@ public class POP3NettySession extends Ab
private MessageManager mailbox;
- private boolean zeroCopy;
-
- public POP3NettySession(POP3HandlerConfigurationData configData, Logger
logger, Channel channel) {
- this(configData, logger, channel, null);
- }
-
- public POP3NettySession(POP3HandlerConfigurationData configData, Logger
logger, Channel channel, SSLEngine engine) {
- this(configData, logger, channel, engine, true);
- }
-
- public POP3NettySession(POP3HandlerConfigurationData configData, Logger
logger, Channel channel, SSLEngine engine, boolean zeroCopy) {
- super(logger, channel, engine);
+
+ public POP3SessionImpl(Logger logger, ProtocolTransport transport,
POP3HandlerConfigurationData configData) {
+ super(logger, transport);
this.configData = configData;
- this.zeroCopy = zeroCopy;
}
-
+
/*
* (non-Javadoc)
*
@@ -133,29 +112,17 @@ public class POP3NettySession extends Ab
this.mailbox = mailbox;
}
- /*
- * (non-Javadoc)
- * @see
org.apache.james.protocols.api.ProtocolSession#writeStream(java.io.InputStream)
- */
- public void writeStream(InputStream stream) {
- if (stream != null && channel.isConnected()) {
+ @Override
+ public Response newLineTooLongResponse() {
+ return null;
+ }
- if (stream instanceof FileInputStream && channel.getFactory()
instanceof NioServerSocketChannelFactory) {
- FileChannel fc = ((FileInputStream) stream).getChannel();
- try {
- if (zeroCopy) {
- channel.write(new DefaultFileRegion(fc, fc.position(),
fc.size()));
- } else {
- channel.write(new ChunkedNioFile(fc, 8192));
- }
- } catch (IOException e) {
- // Catch the exception and just pass it so we get the
exception later
- channel.write(new ChunkedStream(stream));
- }
- } else {
- channel.write(new ChunkedStream(stream));
- }
- }
+ @Override
+ public Response newFatalErrorResponse() {
+ return null;
}
+
+
+
}
Added:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3StreamResponse.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3StreamResponse.java?rev=1171984&view=auto
==============================================================================
---
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3StreamResponse.java
(added)
+++
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3StreamResponse.java
Sat Sep 17 14:06:40 2011
@@ -0,0 +1,36 @@
+/****************************************************************
+ * 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;
+
+import java.io.InputStream;
+
+public class POP3StreamResponse extends POP3Response {
+
+ private InputStream stream;
+
+ public POP3StreamResponse(String code, CharSequence description,
InputStream stream) {
+ super(code, description);
+ this.stream = stream;
+ }
+
+ public InputStream getStream() {
+ return stream;
+ }
+}
Propchange:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3StreamResponse.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
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=1171984&r1=1171983&r2=1171984&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
Sat Sep 17 14:06:40 2011
@@ -19,8 +19,8 @@
package org.apache.james.pop3server.core;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.MessageR
import org.apache.james.mailbox.MessageResult.FetchGroup;
import org.apache.james.pop3server.POP3Response;
import org.apache.james.pop3server.POP3Session;
+import org.apache.james.pop3server.POP3StreamResponse;
import org.apache.james.protocols.api.CommandHandler;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -87,21 +88,13 @@ public class RetrCmdHandler implements C
if (results.hasNext()) {
MessageResult result = results.next();
- try {
- session.writeStream(new
ByteArrayInputStream((POP3Response.OK_RESPONSE + " Message
follows\r\n").getBytes()));
- // response = new
- // POP3Response(POP3Response.OK_RESPONSE,
- // "Message follows");
- Content content = result.getFullContent();
- // session.writeStream(new
ExtraDotInputStream(in));
- session.writeStream(new
CRLFTerminatedInputStream(new ExtraDotInputStream(content.getInputStream())));
-
- } finally {
- // write a single dot to mark message as complete
- session.writeStream(new
ByteArrayInputStream(".\r\n".getBytes()));
- }
+ Content content = result.getFullContent();
+ InputStream in = new CRLFTerminatedInputStream(new
ExtraDotInputStream(content.getInputStream()));
+ response = new
POP3StreamResponse(POP3Response.OK_RESPONSE, "Message follows", in);
+ return response;
+
+
- return null;
} else {
StringBuilder responseBuffer = new
StringBuilder(64).append("Message (").append(num).append(") does not exist.");
response = new POP3Response(POP3Response.ERR_RESPONSE,
responseBuffer.toString());
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=1171984&r1=1171983&r2=1171984&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
Sat Sep 17 14:06:40 2011
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.MessageR
import org.apache.james.mailbox.MessageResult.FetchGroup;
import org.apache.james.pop3server.POP3Response;
import org.apache.james.pop3server.POP3Session;
+import org.apache.james.pop3server.POP3StreamResponse;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -110,23 +111,15 @@ public class TopCmdHandler extends RetrC
if (results.hasNext()) {
MessageResult result = results.next();
- session.writeStream(new
ByteArrayInputStream((POP3Response.OK_RESPONSE + " Message
follows\r\n").getBytes()));
- try {
+ InputStream headersIn =
result.getHeaders().getInputStream();
+ InputStream bodyIn = new CountingBodyInputStream(new
ExtraDotInputStream(new
CRLFTerminatedInputStream(result.getBody().getInputStream())), lines);
-
- InputStream headersIn =
result.getHeaders().getInputStream();
- InputStream bodyIn = new
CountingBodyInputStream(new ExtraDotInputStream(new
CRLFTerminatedInputStream(result.getBody().getInputStream())), lines);
-
- // write body
- 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
- session.writeStream(new
ByteArrayInputStream(".\r\n".getBytes()));
+ // write body
+ InputStream in = new
SequenceInputStream(Collections.enumeration(Arrays.asList(headersIn, new
ByteArrayInputStream("\r\n".getBytes()), bodyIn)));
- }
+ response = new
POP3StreamResponse(POP3Response.OK_RESPONSE, "Message follows", in);
+ return response;
- return null;
} else {
StringBuilder exceptionBuffer = new
StringBuilder(64).append("Message (").append(num).append(") does not exist.");
response = new POP3Response(POP3Response.ERR_RESPONSE,
exceptionBuffer.toString());
Modified:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/WelcomeMessageHandler.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/WelcomeMessageHandler.java?rev=1171984&r1=1171983&r2=1171984&view=diff
==============================================================================
---
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/WelcomeMessageHandler.java
(original)
+++
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/WelcomeMessageHandler.java
Sat Sep 17 14:06:40 2011
@@ -33,7 +33,6 @@ public class WelcomeMessageHandler imple
*/
public boolean onConnect(POP3Session session) {
StringBuilder responseBuffer = new StringBuilder();
-
// Initially greet the connector
// Format is: Sat, 24 Jan 1998 13:16:09 -0500
responseBuffer.append(session.getConfigurationData().getHelloName()).append("
POP3 server (").append(softwaretype).append(") ready ");
Modified:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ResponseEncoder.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ResponseEncoder.java?rev=1171984&r1=1171983&r2=1171984&view=diff
==============================================================================
---
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ResponseEncoder.java
(original)
+++
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ResponseEncoder.java
Sat Sep 17 14:06:40 2011
@@ -1,59 +1,93 @@
-/****************************************************************
- * 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.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.james.pop3server.POP3Response;
-import org.apache.james.protocols.impl.AbstractResponseEncoder;
-import org.jboss.netty.channel.ChannelHandler.Sharable;
-
-
-/**
- * {@link AbstractResponseEncoder} implementation which handles
- * {@link POP3Response} messages
- */
-@Sharable
-public class POP3ResponseEncoder extends AbstractResponseEncoder<POP3Response>
{
-
- public POP3ResponseEncoder() {
- super(POP3Response.class, Charset.forName("US-ASCII"));
- }
-
- @Override
- protected List<String> getResponse(POP3Response response) {
- List<String> responseList = new ArrayList<String>();
- for (int k = 0; k < response.getLines().size(); k++) {
- StringBuffer respBuff = new StringBuffer(256);
- if (k == 0) {
- respBuff.append(response.getRetCode());
- respBuff.append(" ");
- respBuff.append(response.getLines().get(k));
-
- } else {
- respBuff.append(response.getLines().get(k));
- }
- responseList.add(respBuff.toString());
- }
- return responseList;
- }
-
-}
+/****************************************************************
+ * 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 static org.jboss.netty.channel.Channels.write;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
+
+import org.apache.james.pop3server.POP3Response;
+import org.apache.james.pop3server.POP3StreamResponse;
+import org.apache.james.protocols.impl.ResponseEncoder;
+import org.jboss.netty.buffer.ChannelBuffers;
+import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelEvent;
+import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.channel.DefaultFileRegion;
+import org.jboss.netty.channel.MessageEvent;
+import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
+import org.jboss.netty.handler.stream.ChunkedNioFile;
+import org.jboss.netty.handler.stream.ChunkedStream;
+
+public class POP3ResponseEncoder extends ResponseEncoder{
+
+ private boolean zeroCopy;
+
+
+ public POP3ResponseEncoder(boolean zeroCopy) {
+ super(POP3Response.class, Charset.forName("US-ASCII"));
+ this.zeroCopy = zeroCopy;
+ }
+
+
+ @Override
+ public void handleDownstream(ChannelHandlerContext ctx, ChannelEvent evt)
throws Exception {
+ if (evt instanceof MessageEvent) {
+ MessageEvent e = (MessageEvent) evt;
+ Object originalMessage = e.getMessage();
+
+ super.handleDownstream(ctx, evt);
+
+ if (originalMessage instanceof POP3StreamResponse) {
+
+ InputStream stream = ((POP3StreamResponse)
originalMessage).getStream();
+ Channel channel = ctx.getChannel();
+ if (stream != null && channel.isConnected()) {
+
+ if (stream instanceof FileInputStream &&
channel.getFactory() instanceof NioServerSocketChannelFactory) {
+ FileChannel fc = ((FileInputStream)
stream).getChannel();
+ try {
+ if (zeroCopy) {
+ write(ctx, e.getFuture(), new
DefaultFileRegion(fc, fc.position(), fc.size()), e.getRemoteAddress());
+
+ } else {
+ write(ctx, e.getFuture(), new
ChunkedNioFile(fc, 8192), e.getRemoteAddress());
+ }
+ } catch (IOException ex) {
+ // Catch the exception and just pass it so we get
the exception later
+ write(ctx, e.getFuture(), new
ChunkedStream(stream), e.getRemoteAddress());
+
+ }
+ } else {
+ write(ctx, e.getFuture(), new ChunkedStream(stream),
e.getRemoteAddress());
+
+ }
+ }
+
channel.write(ChannelBuffers.wrappedBuffer(".\r\n".getBytes()));
+ }
+ } else {
+ super.handleDownstream(ctx, evt);
+ }
+ }
+
+}
Modified:
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java?rev=1171984&r1=1171983&r2=1171984&view=diff
==============================================================================
---
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
(original)
+++
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
Sat Sep 17 14:06:40 2011
@@ -19,24 +19,31 @@
package org.apache.james.pop3server.netty;
import org.apache.james.pop3server.POP3HandlerConfigurationData;
+import org.apache.james.pop3server.POP3Protocol;
import org.apache.james.pop3server.core.CoreCmdHandlerLoader;
import org.apache.james.pop3server.jmx.JMXHandlersLoader;
import org.apache.james.protocols.api.HandlersPackage;
+import org.apache.james.protocols.impl.BasicChannelUpstreamHandler;
+import org.apache.james.protocols.impl.ResponseEncoder;
import org.apache.james.protocols.lib.netty.AbstractProtocolAsyncServer;
+import org.jboss.netty.channel.ChannelPipeline;
+import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.ChannelUpstreamHandler;
+import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
+import org.jboss.netty.handler.stream.ChunkedWriteHandler;
/**
* NIO POP3 Server which use Netty
*/
public class POP3Server extends AbstractProtocolAsyncServer implements
POP3ServerMBean {
- private final static POP3ResponseEncoder POP3_RESPONSE_ENCODER = new
POP3ResponseEncoder();
+ private final static ResponseEncoder POP3_RESPONSE_ENCODER = new
POP3ResponseEncoder(false);
/**
* The configuration data to be passed to the handler
*/
private POP3HandlerConfigurationData theConfigData = new
POP3HandlerConfigurationDataImpl();
- private POP3ChannelUpstreamHandler coreHandler;
+ private BasicChannelUpstreamHandler coreHandler;
@Override
protected int getDefaultPort() {
@@ -83,8 +90,24 @@ public class POP3Server extends Abstract
@Override
protected void preInit() throws Exception {
super.preInit();
- coreHandler = new
POP3ChannelUpstreamHandler(getProtocolHandlerChain(), theConfigData,
getLogger(), getSSLContext(), getEnabledCipherSuites());
-
+ POP3Protocol protocol = new POP3Protocol(getProtocolHandlerChain(),
theConfigData, getLogger());
+ coreHandler = new
BasicChannelUpstreamHandler(getProtocolHandlerChain(),
protocol.getProtocolSessionFactory(), getLogger(), getSSLContext(),
getEnabledCipherSuites());
+ }
+
+
+ @Override
+ protected ChannelPipelineFactory createPipelineFactory(ChannelGroup group)
{
+
+ final ChannelPipelineFactory cpf = super.createPipelineFactory(group);
+ return new ChannelPipelineFactory() {
+
+ @Override
+ public ChannelPipeline getPipeline() throws Exception {
+ ChannelPipeline cp = cpf.getPipeline();
+ cp.addAfter("framer", "chunkHandler", new
ChunkedWriteHandler());
+ return cp;
+ }
+ };
}
Modified:
james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/POP3ServerTest.java?rev=1171984&r1=1171983&r2=1171984&view=diff
==============================================================================
---
james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
(original)
+++
james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
Sat Sep 17 14:06:40 2011
@@ -153,7 +153,7 @@ public class POP3ServerTest extends Test
public void testAuthenticationFail() throws Exception {
finishSetUp(m_testConfiguration);
-
+
m_pop3Protocol = new POP3Client();
m_pop3Protocol.connect("127.0.0.1", m_pop3ListenerPort);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]