001package org.xbib.elasticsearch.http.netty; 002 003import org.jboss.netty.channel.ChannelPipeline; 004import org.jboss.netty.channel.ChannelPipelineFactory; 005import org.jboss.netty.channel.Channels; 006import org.jboss.netty.handler.codec.http.HttpChunkAggregator; 007import org.jboss.netty.handler.codec.http.HttpContentCompressor; 008import org.jboss.netty.handler.codec.http.HttpContentDecompressor; 009import org.jboss.netty.handler.codec.http.HttpRequestDecoder; 010import org.jboss.netty.handler.codec.http.HttpResponseEncoder; 011 012public class NettyHttpServerPipelineFactory implements ChannelPipelineFactory { 013 014 protected final NettyWebSocketServerTransport transport; 015 016 private final NettyHttpRequestHandler requestHandler; 017 018 NettyHttpServerPipelineFactory(NettyWebSocketServerTransport transport) { 019 this.transport = transport; 020 this.requestHandler = new NettyHttpRequestHandler(transport); 021 } 022 023 @Override 024 public ChannelPipeline getPipeline() throws Exception { 025 ChannelPipeline pipeline = Channels.pipeline(); 026 pipeline.addLast("openChannels", transport.serverOpenChannels); 027 HttpRequestDecoder requestDecoder = new HttpRequestDecoder( 028 (int) transport.maxInitialLineLength.bytes(), 029 (int) transport.maxHeaderSize.bytes(), 030 (int) transport.maxChunkSize.bytes()); 031 if (transport.maxCumulationBufferCapacity != null) { 032 if (transport.maxCumulationBufferCapacity.bytes() > Integer.MAX_VALUE) { 033 requestDecoder.setMaxCumulationBufferCapacity(Integer.MAX_VALUE); 034 } else { 035 requestDecoder.setMaxCumulationBufferCapacity((int) transport.maxCumulationBufferCapacity.bytes()); 036 } 037 } 038 if (transport.maxCompositeBufferComponents != -1) { 039 requestDecoder.setMaxCumulationBufferComponents(transport.maxCompositeBufferComponents); 040 } 041 pipeline.addLast("decoder", requestDecoder); 042 if (transport.compression) { 043 pipeline.addLast("decoder_compress", new HttpContentDecompressor()); 044 } 045 HttpChunkAggregator httpChunkAggregator = new HttpChunkAggregator((int) transport.maxContentLength.bytes()); 046 if (transport.maxCompositeBufferComponents != -1) { 047 httpChunkAggregator.setMaxCumulationBufferComponents(transport.maxCompositeBufferComponents); 048 } 049 pipeline.addLast("aggregator", httpChunkAggregator); 050 pipeline.addLast("encoder", new HttpResponseEncoder()); 051 if (transport.compression) { 052 pipeline.addLast("encoder_compress", new HttpContentCompressor(transport.compressionLevel)); 053 } 054 pipeline.addLast("handler", requestHandler); 055 return pipeline; 056 } 057}