1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.openr66.proxy.network.ssl;
21
22 import io.netty.channel.Channel;
23 import io.netty.channel.ChannelHandler;
24 import io.netty.channel.ChannelHandlerContext;
25 import io.netty.handler.ssl.SslHandler;
26 import io.netty.util.concurrent.Future;
27 import io.netty.util.concurrent.GenericFutureListener;
28 import org.waarp.common.crypto.ssl.WaarpSslUtility;
29 import org.waarp.common.logging.WaarpLogger;
30 import org.waarp.common.logging.WaarpLoggerFactory;
31 import org.waarp.openr66.proxy.network.NetworkServerHandler;
32
33 import static org.waarp.openr66.protocol.configuration.Configuration.*;
34
35
36
37
38 public class NetworkSslServerHandler extends NetworkServerHandler {
39
40
41
42 public NetworkSslServerHandler(final boolean isServer) {
43 super(isServer);
44 }
45
46
47
48
49 private static final WaarpLogger logger =
50 WaarpLoggerFactory.getLogger(NetworkSslServerHandler.class);
51
52
53
54
55
56
57 public static boolean isSslConnectedChannel(final Channel channel) {
58 return WaarpSslUtility.waitForHandshake(channel);
59 }
60
61 @Override
62 public void channelActive(final ChannelHandlerContext ctx) throws Exception {
63 final Channel channel = ctx.channel();
64 logger.debug("Add channel to ssl");
65 WaarpSslUtility.addSslOpenedChannel(channel);
66 isSSL = true;
67
68
69 final ChannelHandler handler = ctx.pipeline().first();
70 if (handler instanceof SslHandler) {
71 final SslHandler sslHandler = (SslHandler) handler;
72 sslHandler.handshakeFuture().addListener(
73 new GenericFutureListener<Future<? super Channel>>() {
74 @Override
75 public final void operationComplete(
76 final Future<? super Channel> future) {
77 if (!future.isSuccess() && configuration.getR66Mib() != null) {
78 configuration.getR66Mib().notifyError("SSL Connection Error",
79 "During Handshake");
80 }
81 ctx.channel().config().setAutoRead(false);
82 }
83 });
84 } else {
85 logger.error("SSL Not found");
86 }
87 super.channelActive(ctx);
88 }
89 }