From 03f890a882c3cc7eb11e08b0b5004827945fbe0b Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 22 May 2012 22:57:36 +0200 Subject: [PATCH] Only send event upstream once the Ssl handshake was completed successfull. See #358 --- .../java/io/netty/handler/ssl/SslHandler.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/handler/src/main/java/io/netty/handler/ssl/SslHandler.java b/handler/src/main/java/io/netty/handler/ssl/SslHandler.java index 5a55075188..28de7affae 100644 --- a/handler/src/main/java/io/netty/handler/ssl/SslHandler.java +++ b/handler/src/main/java/io/netty/handler/ssl/SslHandler.java @@ -197,16 +197,6 @@ public class SslHandler extends FrameDecoder private final NonReentrantLock pendingEncryptedWritesLock = new NonReentrantLock(); private volatile boolean issueHandshake; - private static final ChannelFutureListener HANDSHAKE_LISTENER = new ChannelFutureListener() { - - @Override - public void operationComplete(ChannelFuture future) throws Exception { - if (!future.isSuccess()) { - Channels.fireExceptionCaught(future.getChannel(), future.getCause()); - } - } - - }; private final SSLEngineInboundCloseFuture sslEngineCloseFuture = new SSLEngineInboundCloseFuture(); @@ -1270,13 +1260,26 @@ public class SslHandler extends FrameDecoder * Calls {@link #handshake()} once the {@link Channel} is connected */ @Override - public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { + public void channelConnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception { if (issueHandshake) { - // issue and handshake and add a listener to it which will fire an exception event if an exception was thrown - // while doing the handshake - handshake().addListener(HANDSHAKE_LISTENER); + // issue and handshake and add a listener to it which will fire an exception event if an exception was thrown while doing the handshake + handshake().addListener(new ChannelFutureListener() { + + public void operationComplete(ChannelFuture future) throws Exception { + if (!future.isSuccess()) { + Channels.fireExceptionCaught(future.getChannel(), future.getCause()); + } else { + // Send the event upstream after the handshake was completed without an error. + // + // See https://github.com/netty/netty/issues/358 + ctx.sendUpstream(e); + } + + } + }); + } else { + super.channelConnected(ctx, e); } - super.channelConnected(ctx, e); } /**