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;
21
22 import io.netty.channel.ChannelInitializer;
23 import io.netty.channel.ChannelPipeline;
24 import io.netty.channel.socket.SocketChannel;
25 import io.netty.handler.timeout.IdleStateHandler;
26 import io.netty.handler.traffic.ChannelTrafficShapingHandler;
27 import io.netty.handler.traffic.GlobalTrafficShapingHandler;
28 import org.waarp.common.logging.WaarpLogger;
29 import org.waarp.common.logging.WaarpLoggerFactory;
30 import org.waarp.openr66.protocol.configuration.Configuration;
31 import org.waarp.openr66.protocol.exception.OpenR66ProtocolNetworkException;
32 import org.waarp.openr66.protocol.networkhandler.packet.NetworkPacketCodec;
33
34 import java.util.concurrent.TimeUnit;
35
36
37
38
39 public class NetworkServerInitializer
40 extends ChannelInitializer<SocketChannel> {
41
42
43
44 private static final WaarpLogger logger =
45 WaarpLoggerFactory.getLogger(NetworkServerInitializer.class);
46
47 public static final String TIMEOUT = "timeout";
48 public static final String LIMITGLOBAL = "GLOBALLIMIT";
49 public static final String LIMITCHANNEL = "CHANNELLIMIT";
50 public static final String NETWORK_CODEC = "codec";
51 public static final String NETWORK_HANDLER = "handler";
52
53 protected final boolean server;
54
55 public NetworkServerInitializer(final boolean server) {
56 this.server = server;
57 }
58
59 @Override
60 protected void initChannel(final SocketChannel ch) throws Exception {
61 final ChannelPipeline pipeline = ch.pipeline();
62 logger.debug("Create IdleStateHandler with {} ms",
63 Configuration.configuration.getTimeoutCon());
64 pipeline.addLast(TIMEOUT, new IdleStateHandler(true, 0, 0,
65 Configuration.configuration.getTimeoutCon(),
66 TimeUnit.MILLISECONDS));
67
68 final GlobalTrafficShapingHandler handler =
69 Configuration.configuration.getGlobalTrafficShapingHandler();
70 if (handler == null) {
71 throw new OpenR66ProtocolNetworkException(
72 "Error at pipeline initialization," +
73 " GlobalTrafficShapingHandler configured.");
74 }
75 pipeline.addLast(LIMITGLOBAL, handler);
76
77 pipeline.addLast(LIMITCHANNEL, new ChannelTrafficShapingHandler(
78 Configuration.configuration.getServerChannelWriteLimit(),
79 Configuration.configuration.getServerChannelReadLimit(),
80 Configuration.configuration.getDelayLimit(),
81 Configuration.configuration.getTimeoutCon()));
82 pipeline.addLast(NETWORK_CODEC, new NetworkPacketCodec());
83 pipeline.addLast(Configuration.configuration.getHandlerGroup(),
84 NETWORK_HANDLER, new NetworkServerHandler());
85 }
86 }