public void run() { connectionMap.put(ch, wsConn); try { HttpResponse resp = shake.generateResponse(request, serverOrigin); ChannelPipeline p = ch.getPipeline(); p.replace("decoder", "wsdecoder", shake.getDecoder()); ch.write(resp); p.replace("encoder", "wsencoder", shake.getEncoder(true)); } catch (Exception e) { log.error("Failed to generate shake response", e); } } };
public void operationComplete(ChannelFuture channelFuture) throws Exception { final NioSocketChannel ch = (NioSocketChannel) channelFuture.getChannel(); if (channelFuture.isSuccess()) { if (tcpHelper.isSSL()) { // TCP connected, so now we must do the SSL handshake SslHandler sslHandler = (SslHandler)ch.getPipeline().get("ssl"); ChannelFuture fut = sslHandler.handshake(); fut.addListener(new ChannelFutureListener() { public void operationComplete(ChannelFuture channelFuture) throws Exception { if (channelFuture.isSuccess()) { connected(ch, connectHandler); } else { failed(ch, connectErrorHandler, new SSLHandshakeException("Failed to create SSL connection")); } } }); } else { connected(ch, connectHandler); } } else { failed(ch, connectErrorHandler, channelFuture.getCause()); } } });
@Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) { final NioSocketChannel ch = (NioSocketChannel) e.getChannel(); NioWorker worker = ch.getWorker(); //Choose a handler final HandlerHolder<NetSocket> handler = handlerManager.chooseHandler(worker); if (handler == null) { //Ignore return; } if (tcpHelper.isSSL()) { SslHandler sslHandler = (SslHandler)ch.getPipeline().get("ssl"); ChannelFuture fut = sslHandler.handshake(); fut.addListener(new ChannelFutureListener() { public void operationComplete(ChannelFuture channelFuture) throws Exception { if (channelFuture.isSuccess()) { connected(ch, handler); } else { log.error("Client from origin " + ch.getRemoteAddress() + " failed to connect over ssl"); } } }); } else { connected(ch, handler); } }
SslHandler sslHandler = (SslHandler)ch.getPipeline().get("ssl");