package org.caudexorigo.http.netty4; import org.caudexorigo.http.netty4.reporting.ResponseFormatter; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpRequestDecoder; import io.netty.handler.codec.http.HttpResponseEncoder; public class NettyHttpServerInitializer extends ChannelInitializer<SocketChannel> { private boolean validate_headers; private final RequestRouter mapper; private final RequestObserver requestObserver; private final ResponseFormatter responseFormatter; private int maxContentLength; public NettyHttpServerInitializer(RequestRouter mapper, RequestObserver requestObserver, ResponseFormatter responseFormatter, int maxLength, boolean validate_headers) { super(); this.mapper = mapper; this.requestObserver = requestObserver; this.responseFormatter = responseFormatter; this.maxContentLength = maxLength; this.validate_headers = validate_headers; } @Override public void initChannel(SocketChannel ch) throws Exception { // Create a default pipeline implementation. ChannelPipeline pipeline = ch.pipeline(); // Uncomment the following line if you want HTTPS // SSLEngine engine = SecureChatSslContextFactory.getServerContext().createSSLEngine(); // engine.setUseClientMode(false); // pipeline.addLast("ssl", new SslHandler(engine)); int maxInitialLineLength = 4096; int maxHeaderSize = 8192; int maxChunkSize = 8192; pipeline.addLast("http-encoder", new HttpResponseEncoder()); pipeline.addLast("http-decoder", new HttpRequestDecoder(maxInitialLineLength, maxHeaderSize, maxChunkSize, validate_headers)); pipeline.addLast("http-aggregator", new HttpObjectAggregator(maxContentLength)); // pipeline.addLast(new HttpServerCodec()); // pipeline.addLast(new HttpObjectAggregator(65536)); // pipeline.addLast(new ChunkedWriteHandler()); pipeline.addLast("http-protocol-handler", new HttpProtocolHandler(mapper, requestObserver, responseFormatter)); } }