Author: norman
Date: Wed Apr 13 14:48:57 2011
New Revision: 1091805
URL: http://svn.apache.org/viewvc?rev=1091805&view=rev
Log:
Make sure the channel is not closed before the response is written back to the
client
Modified:
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
Modified:
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java?rev=1091805&r1=1091804&r2=1091805&view=diff
==============================================================================
---
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
(original)
+++
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
Wed Apr 13 14:48:57 2011
@@ -28,6 +28,8 @@ import javax.net.ssl.SSLEngine;
import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.api.TLSSupportedSession;
import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelFuture;
+import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.ssl.SslHandler;
import org.jboss.netty.handler.stream.ChunkedStream;
@@ -148,13 +150,23 @@ public abstract class AbstractSession im
* (non-Javadoc)
* @see
org.apache.james.api.protocol.ProtocolSession#writeResponse(org.apache.james.api.protocol.Response)
*/
- public void writeResponse(Response response) {
+ public void writeResponse(final Response response) {
Channel channel = getChannelHandlerContext().getChannel();
if (response != null && channel.isConnected()) {
- channel.write(response);
- if (response.isEndSession()) {
- channel.close();
- }
+ channel.write(response).addListener(new ChannelFutureListener() {
+
+ /*
+ * (non-Javadoc)
+ * @see
org.jboss.netty.channel.ChannelFutureListener#operationComplete(org.jboss.netty.channel.ChannelFuture)
+ */
+ public void operationComplete(ChannelFuture c) throws
Exception {
+ // once the response was written we can close the channel
if needed
+ if (response.isEndSession() &&
c.getChannel().isConnected()) {
+ c.getChannel().close();
+ }
+ }
+ });
+
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]