Only send event upstream once the Ssl handshake was completed successfull. See #358

Conflicts:

	handler/src/main/java/io/netty/handler/ssl/SslHandler.java
This commit is contained in:
Norman Maurer 2012-05-22 22:57:36 +02:00 committed by Trustin Lee
parent e2bdc2234d
commit 5852d82ad6

View File

@ -187,17 +187,6 @@ public class SslHandler extends FrameDecoder
private final NonReentrantLock pendingEncryptedWritesLock = new NonReentrantLock(); private final NonReentrantLock pendingEncryptedWritesLock = new NonReentrantLock();
private volatile boolean issueHandshake; 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.channel(), future.cause());
}
}
};
private final SSLEngineInboundCloseFuture sslEngineCloseFuture = new SSLEngineInboundCloseFuture(); private final SSLEngineInboundCloseFuture sslEngineCloseFuture = new SSLEngineInboundCloseFuture();
/** /**
@ -840,14 +829,7 @@ public class SslHandler extends FrameDecoder
if (result.bytesProduced() > 0) { if (result.bytesProduced() > 0) {
outNetBuf.flip(); outNetBuf.flip();
<<<<<<< HEAD
ChannelBuffer msg = ChannelBuffers.buffer(outNetBuf.remaining()); ChannelBuffer msg = ChannelBuffers.buffer(outNetBuf.remaining());
=======
ChannelBuffer msg = ctx.getChannel().getConfig().getBufferFactory().getBuffer(outNetBuf.remaining());
>>>>>>> d2ec45e... Use the correct ChannelBufferFactory when creating new ChannelBuffers. See #335
// Transfer the bytes to the new ChannelBuffer using some safe method that will also // Transfer the bytes to the new ChannelBuffer using some safe method that will also
// work with "non" heap buffers // work with "non" heap buffers
// //
@ -1259,13 +1241,27 @@ public class SslHandler extends FrameDecoder
* Calls {@link #handshake()} once the {@link Channel} is connected * Calls {@link #handshake()} once the {@link Channel} is connected
*/ */
@Override @Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { public void channelConnected(final ChannelHandlerContext ctx, final ChannelStateEvent e) throws Exception {
if (issueHandshake) { if (issueHandshake) {
// issue and handshake and add a listener to it which will fire an exception event if an exception was thrown // issue and handshake and add a listener to it which will fire an exception event if an exception was thrown while doing the handshake
// while doing the handshake handshake().addListener(new ChannelFutureListener() {
handshake().addListener(HANDSHAKE_LISTENER);
@Override
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);
} }
/** /**