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