/** * This file is part of Waarp Project. * * Copyright 2009, Frederic Bregier, and individual contributors by the @author tags. See the * COPYRIGHT.txt in the distribution for a full listing of individual contributors. * * All Waarp Project is free software: you can redistribute it and/or modify it under the terms of * the GNU General Public License as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along with Waarp . If not, see * <http://www.gnu.org/licenses/>. */ package org.waarp.openr66.protocol.networkhandler; import java.util.concurrent.TimeUnit; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.timeout.IdleStateHandler; import io.netty.handler.traffic.ChannelTrafficShapingHandler; import org.waarp.openr66.protocol.configuration.Configuration; import org.waarp.openr66.protocol.exception.OpenR66ProtocolNoDataException; import org.waarp.openr66.protocol.networkhandler.packet.NetworkPacketCodec; /** * NetworkServer pipeline (Requester side) * * @author Frederic Bregier */ public class NetworkServerInitializer extends ChannelInitializer<SocketChannel> { public static final String TIMEOUT = "timeout"; public static final String READTIMEOUT = "readTimeout"; public static final String LIMIT = "LIMIT"; public static final String LIMITCHANNEL = "LIMITCHANNEL"; protected boolean server = false; public NetworkServerInitializer(boolean server) { this.server = server; } @Override protected void initChannel(SocketChannel ch) throws Exception { final ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast("codec", new NetworkPacketCodec()); pipeline.addLast(TIMEOUT, new IdleStateHandler(0, 0, Configuration.configuration.getTIMEOUTCON(), TimeUnit.MILLISECONDS)); GlobalTrafficHandler handler = Configuration.configuration.getGlobalTrafficShapingHandler(); if (handler != null) { pipeline.addLast(LIMIT, handler); } ChannelTrafficShapingHandler trafficChannel = null; try { trafficChannel = Configuration.configuration.newChannelTrafficShapingHandler(); if (trafficChannel != null) { pipeline.addLast(LIMITCHANNEL, trafficChannel); } } catch (OpenR66ProtocolNoDataException e) { } pipeline.addLast(Configuration.configuration.getHandlerGroup(), "handler", new NetworkServerHandler(this.server)); } }