Package io.netty.handler.codec.http2
Class DelegatingDecompressorFrameListener
- java.lang.Object
-
- io.netty.handler.codec.http2.Http2FrameListenerDecorator
-
- io.netty.handler.codec.http2.DelegatingDecompressorFrameListener
-
- All Implemented Interfaces:
Http2FrameListener
public class DelegatingDecompressorFrameListener extends Http2FrameListenerDecorator
An HTTP2 frame listener that will decompress data frames according to thecontent-encodingheader for each stream. The decompression provided by this class will be applied to the data for the entire stream.
-
-
Field Summary
-
Fields inherited from class io.netty.handler.codec.http2.Http2FrameListenerDecorator
listener
-
-
Constructor Summary
Constructors Constructor Description DelegatingDecompressorFrameListener(Http2Connection connection, Http2FrameListener listener)DelegatingDecompressorFrameListener(Http2Connection connection, Http2FrameListener listener, boolean strict)DelegatingDecompressorFrameListener(Http2Connection connection, Http2FrameListener listener, boolean strict, int maxAllocation)Create a new instance.DelegatingDecompressorFrameListener(Http2Connection connection, Http2FrameListener listener, int maxAllocation)Create a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected CharSequencegetTargetContentEncoding(CharSequence contentEncoding)Returns the expected content encoding of the decoded content.protected io.netty.channel.embedded.EmbeddedChannelnewContentDecompressor(io.netty.channel.ChannelHandlerContext ctx, CharSequence contentEncoding)Returns a newEmbeddedChannelthat decodes the HTTP2 message content encoded in the specifiedcontentEncoding.intonDataRead(io.netty.channel.ChannelHandlerContext ctx, int streamId, io.netty.buffer.ByteBuf data, int padding, boolean endOfStream)Handles an inboundDATAframe.voidonHeadersRead(io.netty.channel.ChannelHandlerContext ctx, int streamId, Http2Headers headers, int padding, boolean endStream)Handles an inboundHEADERSframe.voidonHeadersRead(io.netty.channel.ChannelHandlerContext ctx, int streamId, Http2Headers headers, int streamDependency, short weight, boolean exclusive, int padding, boolean endStream)Handles an inboundHEADERSframe with priority information specified.-
Methods inherited from class io.netty.handler.codec.http2.Http2FrameListenerDecorator
onGoAwayRead, onPingAckRead, onPingRead, onPriorityRead, onPushPromiseRead, onRstStreamRead, onSettingsAckRead, onSettingsRead, onUnknownFrame, onWindowUpdateRead
-
-
-
-
Constructor Detail
-
DelegatingDecompressorFrameListener
@Deprecated public DelegatingDecompressorFrameListener(Http2Connection connection, Http2FrameListener listener)
Create a new instance.- Parameters:
connection- the connection to read data which should be decompressedlistener- the delegate listener used byHttp2FrameListenerDecorator
-
DelegatingDecompressorFrameListener
public DelegatingDecompressorFrameListener(Http2Connection connection, Http2FrameListener listener, int maxAllocation)
Create a new instance.- Parameters:
connection- the connection to read data which should be decompressedlistener- the delegate listener used byHttp2FrameListenerDecoratormaxAllocation- maximum size of the decompression buffer. Must be >= 0. If zero, maximum size is not limited by decoder.
-
DelegatingDecompressorFrameListener
@Deprecated public DelegatingDecompressorFrameListener(Http2Connection connection, Http2FrameListener listener, boolean strict)
Deprecated.Create a new instance.- Parameters:
connection- the connection to read data which should be decompressedlistener- the delegate listener used byHttp2FrameListenerDecoratorstrict- if `true`,ZlibWrapper.ZLIBwill be used for the decoder, otherwise the decoder can fallback toZlibWrapper.NONE
-
DelegatingDecompressorFrameListener
public DelegatingDecompressorFrameListener(Http2Connection connection, Http2FrameListener listener, boolean strict, int maxAllocation)
Create a new instance.- Parameters:
connection- the connection to read data which should be decompressedlistener- the delegate listener used byHttp2FrameListenerDecoratorstrict- if `true`,ZlibWrapper.ZLIBwill be used for the decoder, otherwise the decoder can fallback toZlibWrapper.NONEmaxAllocation- maximum size of the decompression buffer. Must be >= 0. If zero, maximum size is not limited by decoder.
-
-
Method Detail
-
onDataRead
public int onDataRead(io.netty.channel.ChannelHandlerContext ctx, int streamId, io.netty.buffer.ByteBuf data, int padding, boolean endOfStream) throws Http2ExceptionDescription copied from interface:Http2FrameListenerHandles an inboundDATAframe.- Specified by:
onDataReadin interfaceHttp2FrameListener- Overrides:
onDataReadin classHttp2FrameListenerDecorator- Parameters:
ctx- the context from the handler where the frame was read.streamId- the subject stream for the frame.data- payload buffer for the frame. This buffer will be released by the codec.padding- additional bytes that should be added to obscure the true content size. Must be between 0 and 256 (inclusive).endOfStream- Indicates whether this is the last frame to be sent from the remote endpoint for this stream.- Returns:
- the number of bytes that have been processed by the application. The returned bytes are used by the
inbound flow controller to determine the appropriate time to expand the inbound flow control window (i.e. send
WINDOW_UPDATE). Returning a value equal to the length ofdata+paddingwill effectively opt-out of application-level flow control for this frame. Returning a value less than the length ofdata+paddingwill defer the returning of the processed bytes, which the application must later return viaHttp2LocalFlowController.consumeBytes(Http2Stream, int). The returned value must be >=0and <=data.readableBytes()+padding. - Throws:
Http2Exception
-
onHeadersRead
public void onHeadersRead(io.netty.channel.ChannelHandlerContext ctx, int streamId, Http2Headers headers, int padding, boolean endStream) throws Http2ExceptionDescription copied from interface:Http2FrameListenerHandles an inboundHEADERSframe.Only one of the following methods will be called for each
HEADERSframe sequence. One will be called when theEND_HEADERSflag has been received.Http2FrameListener.onHeadersRead(ChannelHandlerContext, int, Http2Headers, int, boolean)Http2FrameListener.onHeadersRead(ChannelHandlerContext, int, Http2Headers, int, short, boolean, int, boolean)Http2FrameListener.onPushPromiseRead(ChannelHandlerContext, int, int, Http2Headers, int)
To say it another way; the
Http2Headerswill contain all of the headers for the current message exchange step (additional queuing is not necessary).- Specified by:
onHeadersReadin interfaceHttp2FrameListener- Overrides:
onHeadersReadin classHttp2FrameListenerDecorator- Parameters:
ctx- the context from the handler where the frame was read.streamId- the subject stream for the frame.headers- the received headers.padding- additional bytes that should be added to obscure the true content size. Must be between 0 and 256 (inclusive).endStream- Indicates whether this is the last frame to be sent from the remote endpoint for this stream.- Throws:
Http2Exception
-
onHeadersRead
public void onHeadersRead(io.netty.channel.ChannelHandlerContext ctx, int streamId, Http2Headers headers, int streamDependency, short weight, boolean exclusive, int padding, boolean endStream) throws Http2ExceptionDescription copied from interface:Http2FrameListenerHandles an inboundHEADERSframe with priority information specified. Only called ifEND_HEADERSencountered.Only one of the following methods will be called for each
HEADERSframe sequence. One will be called when theEND_HEADERSflag has been received.Http2FrameListener.onHeadersRead(ChannelHandlerContext, int, Http2Headers, int, boolean)Http2FrameListener.onHeadersRead(ChannelHandlerContext, int, Http2Headers, int, short, boolean, int, boolean)Http2FrameListener.onPushPromiseRead(ChannelHandlerContext, int, int, Http2Headers, int)
To say it another way; the
Http2Headerswill contain all of the headers for the current message exchange step (additional queuing is not necessary).- Specified by:
onHeadersReadin interfaceHttp2FrameListener- Overrides:
onHeadersReadin classHttp2FrameListenerDecorator- Parameters:
ctx- the context from the handler where the frame was read.streamId- the subject stream for the frame.headers- the received headers.streamDependency- the stream on which this stream depends, or 0 if dependent on the connection.weight- the new weight for the stream.exclusive- whether or not the stream should be the exclusive dependent of its parent.padding- additional bytes that should be added to obscure the true content size. Must be between 0 and 256 (inclusive).endStream- Indicates whether this is the last frame to be sent from the remote endpoint for this stream.- Throws:
Http2Exception
-
newContentDecompressor
protected io.netty.channel.embedded.EmbeddedChannel newContentDecompressor(io.netty.channel.ChannelHandlerContext ctx, CharSequence contentEncoding) throws Http2ExceptionReturns a newEmbeddedChannelthat decodes the HTTP2 message content encoded in the specifiedcontentEncoding.- Parameters:
contentEncoding- the value of thecontent-encodingheader- Returns:
- a new
ByteToMessageDecoderif the specified encoding is supported.nullotherwise (alternatively, you can throw aHttp2Exceptionto block unknown encoding). - Throws:
Http2Exception- If the specified encoding is not supported and warrants an exception
-
getTargetContentEncoding
protected CharSequence getTargetContentEncoding(CharSequence contentEncoding) throws Http2Exception
Returns the expected content encoding of the decoded content. This getMethod returns"identity"by default, which is the case for most decompressors.- Parameters:
contentEncoding- the value of thecontent-encodingheader- Returns:
- the expected content encoding of the new content.
- Throws:
Http2Exception- if thecontentEncodingis not supported and warrants an exception
-
-