Class HttpMessageDecoder
- java.lang.Object
-
- org.jboss.netty.channel.SimpleChannelUpstreamHandler
-
- org.jboss.netty.handler.codec.frame.FrameDecoder
-
- org.jboss.netty.handler.codec.replay.ReplayingDecoder<HttpMessageDecoder.State>
-
- org.jboss.netty.handler.codec.http.HttpMessageDecoder
-
- All Implemented Interfaces:
ChannelHandler,ChannelUpstreamHandler,LifeCycleAwareChannelHandler
- Direct Known Subclasses:
HttpRequestDecoder,HttpResponseDecoder,RtspMessageDecoder
public abstract class HttpMessageDecoder extends ReplayingDecoder<HttpMessageDecoder.State>
DecodesChannelBuffers intoHttpMessages andHttpChunks.Parameters that prevents excessive memory consumption
Name Meaning maxInitialLineLengthThe maximum length of the initial line (e.g. "GET / HTTP/1.0"or"HTTP/1.0 200 OK") If the length of the initial line exceeds this value, aTooLongFrameExceptionwill be raised.maxHeaderSizeThe maximum length of all headers. If the sum of the length of each header exceeds this value, a TooLongFrameExceptionwill be raised.maxChunkSizeThe maximum length of the content or each chunk. If the content length (or the length of each chunk) exceeds this value, the content or chunk will be split into multiple HttpChunks whose length ismaxChunkSizeat maximum.Chunked Content
If the content of an HTTP message is greater thanmaxChunkSizeor the transfer encoding of the HTTP message is 'chunked', this decoder generates oneHttpMessageinstance and its followingHttpChunks per single HTTP message to avoid excessive memory consumption. For example, the following HTTP message:GET / HTTP/1.1 Transfer-Encoding: chunked 1a abcdefghijklmnopqrstuvwxyz 10 1234567890abcdef 0 Content-MD5: ... [blank line]
triggersHttpRequestDecoderto generate 4 objects:- An
HttpRequestwhosechunkedproperty istrue, - The first
HttpChunkwhose content is'abcdefghijklmnopqrstuvwxyz', - The second
HttpChunkwhose content is'1234567890abcdef', and - An
HttpChunkTrailerwhich marks the end of the content.
HttpChunks by yourself for your convenience, insertHttpChunkAggregatorafter this decoder in theChannelPipeline. However, please note that your server might not be as memory efficient as without the aggregator.Extensibility
Please note that this decoder is designed to be extended to implement a protocol derived from HTTP, such as RTSP and ICAP. To implement the decoder of such a derived protocol, extend this class and implement all abstract methods properly.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classHttpMessageDecoder.StateThe internal state ofHttpMessageDecoder.-
Nested classes/interfaces inherited from interface org.jboss.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Field Summary
-
Fields inherited from class org.jboss.netty.handler.codec.frame.FrameDecoder
cumulation, DEFAULT_MAX_COMPOSITEBUFFER_COMPONENTS
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedHttpMessageDecoder()Creates a new instance with the defaultmaxInitialLineLength (4096},maxHeaderSize (8192), andmaxChunkSize (8192).protectedHttpMessageDecoder(int maxInitialLineLength, int maxHeaderSize, int maxChunkSize)Creates a new instance with the specified parameters.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract HttpMessagecreateMessage(String[] initialLine)protected Objectdecode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer, HttpMessageDecoder.State state)Decodes the received packets so far into a frame.protected booleanisContentAlwaysEmpty(HttpMessage msg)protected abstract booleanisDecodingRequest()-
Methods inherited from class org.jboss.netty.handler.codec.replay.ReplayingDecoder
checkpoint, checkpoint, cleanup, decode, decodeLast, decodeLast, getState, internalBuffer, messageReceived, setState
-
Methods inherited from class org.jboss.netty.handler.codec.frame.FrameDecoder
actualReadableBytes, afterAdd, afterRemove, appendToCumulation, beforeAdd, beforeRemove, channelClosed, channelDisconnected, exceptionCaught, extractFrame, getMaxCumulationBufferCapacity, getMaxCumulationBufferComponents, isUnfold, newCumulationBuffer, replace, setMaxCumulationBufferCapacity, setMaxCumulationBufferComponents, setUnfold, unfoldAndFireMessageReceived, updateCumulation
-
Methods inherited from class org.jboss.netty.channel.SimpleChannelUpstreamHandler
channelBound, channelConnected, channelInterestChanged, channelOpen, channelUnbound, childChannelClosed, childChannelOpen, handleUpstream, writeComplete
-
-
-
-
Constructor Detail
-
HttpMessageDecoder
protected HttpMessageDecoder()
Creates a new instance with the defaultmaxInitialLineLength (4096},maxHeaderSize (8192), andmaxChunkSize (8192).
-
HttpMessageDecoder
protected HttpMessageDecoder(int maxInitialLineLength, int maxHeaderSize, int maxChunkSize)Creates a new instance with the specified parameters.
-
-
Method Detail
-
decode
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer, HttpMessageDecoder.State state) throws Exception
Description copied from class:ReplayingDecoderDecodes the received packets so far into a frame.- Specified by:
decodein classReplayingDecoder<HttpMessageDecoder.State>- Parameters:
ctx- the context of this handlerchannel- the current channelbuffer- the cumulative buffer of received packets so far. Note that the buffer might be empty, which means you should not make an assumption that the buffer contains at least one byte in your decoder implementation.state- the current decoder state (nullif unused)- Returns:
- the decoded frame
- Throws:
Exception
-
isContentAlwaysEmpty
protected boolean isContentAlwaysEmpty(HttpMessage msg)
-
isDecodingRequest
protected abstract boolean isDecodingRequest()
-
createMessage
protected abstract HttpMessage createMessage(String[] initialLine) throws Exception
- Throws:
Exception
-
-