1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.openr66.protocol.networkhandler.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.protocol.configuration.Configuration;
32 import org.waarp.openr66.protocol.networkhandler.NetworkServerHandler;
33 import org.waarp.openr66.protocol.networkhandler.NetworkTransaction;
34
35
36
37
38 public class NetworkSslServerHandler extends NetworkServerHandler {
39
40
41
42 private static final WaarpLogger logger =
43 WaarpLoggerFactory.getLogger(NetworkSslServerHandler.class);
44
45
46
47
48 public NetworkSslServerHandler(final boolean isServer) {
49 super();
50 }
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 networkChannel = ctx.channel();
64 logger.debug("Add channel to ssl");
65 WaarpSslUtility.addSslOpenedChannel(networkChannel);
66 isSSL = true;
67
68 if (NetworkTransaction.isBlacklisted(networkChannel)) {
69 try {
70 logger.warn("Connection refused since Partner is in BlackListed from " +
71 networkChannel.remoteAddress());
72 isBlackListed = true;
73 if (Configuration.configuration.getR66Mib() != null) {
74 Configuration.configuration.getR66Mib().notifyError(
75 "Black Listed connection temptative", "During Handshake");
76 }
77
78 WaarpSslUtility.closingSslChannel(networkChannel);
79 return;
80 } finally {
81 ctx.read();
82 }
83 }
84
85
86 final ChannelHandler handler = ctx.pipeline().first();
87 if (handler instanceof SslHandler) {
88 final SslHandler sslHandler = (SslHandler) handler;
89 sslHandler.handshakeFuture().addListener(
90 new GenericFutureListener<Future<? super Channel>>() {
91 @Override
92 public void operationComplete(
93 final Future<? super Channel> future) {
94 if (!future.isSuccess() &&
95 Configuration.configuration.getR66Mib() != null) {
96 Configuration.configuration.getR66Mib()
97 .notifyError("SSL Connection Error",
98 "During Handshake");
99 }
100 ctx.channel().config().setAutoRead(false);
101 }
102 });
103 } else {
104 logger.error("SSL Not found");
105 }
106 super.channelActive(ctx);
107 }
108 }