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
An HTTP2 frame listener that will decompress data frames according to the
content-encoding
header for each
stream. The decompression provided by this class will be applied to the data for the entire stream.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate final class
A decorator around the local flow controller that converts consumed bytes from uncompressed to compressed.private static final class
Provides the state for streamDATA
frame decompression. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Http2Connection
private boolean
private final int
private final Http2Connection.PropertyKey
private final boolean
Fields inherited from class io.netty.handler.codec.http2.Http2FrameListenerDecorator
listener
-
Constructor Summary
ConstructorsConstructorDescriptionDelegatingDecompressorFrameListener
(Http2Connection connection, Http2FrameListener listener) Deprecated.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
Modifier and TypeMethodDescriptionprivate static void
cleanup
(DelegatingDecompressorFrameListener.Http2Decompressor decompressor) Release remaining content from theEmbeddedChannel
.(package private) DelegatingDecompressorFrameListener.Http2Decompressor
decompressor
(Http2Stream stream) protected CharSequence
getTargetContentEncoding
(CharSequence contentEncoding) Returns the expected content encoding of the decoded content.private void
initDecompressor
(ChannelHandlerContext ctx, int streamId, Http2Headers headers, boolean endOfStream) Checks if a new decompressor object is needed for the stream identified bystreamId
.protected EmbeddedChannel
newContentDecompressor
(ChannelHandlerContext ctx, CharSequence contentEncoding) Returns a newEmbeddedChannel
that decodes the HTTP2 message content encoded in the specifiedcontentEncoding
.private static ByteBuf
nextReadableBuf
(EmbeddedChannel decompressor) int
onDataRead
(ChannelHandlerContext ctx, int streamId, ByteBuf data, int padding, boolean endOfStream) Handles an inboundDATA
frame.void
onHeadersRead
(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int padding, boolean endStream) Handles an inboundHEADERS
frame.void
onHeadersRead
(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int streamDependency, short weight, boolean exclusive, int padding, boolean endStream) Handles an inboundHEADERS
frame with priority information specified.Methods inherited from class io.netty.handler.codec.http2.Http2FrameListenerDecorator
onGoAwayRead, onPingAckRead, onPingRead, onPriorityRead, onPushPromiseRead, onRstStreamRead, onSettingsAckRead, onSettingsRead, onUnknownFrame, onWindowUpdateRead
-
Field Details
-
connection
-
strict
private final boolean strict -
flowControllerInitialized
private boolean flowControllerInitialized -
propertyKey
-
maxAllocation
private final int maxAllocation
-
-
Constructor Details
-
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 byHttp2FrameListenerDecorator
maxAllocation
- 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 byHttp2FrameListenerDecorator
strict
- if `true`,ZlibWrapper.ZLIB
will 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 byHttp2FrameListenerDecorator
strict
- if `true`,ZlibWrapper.ZLIB
will be used for the decoder, otherwise the decoder can fallback toZlibWrapper.NONE
maxAllocation
- maximum size of the decompression buffer. Must be >= 0. If zero, maximum size is not limited by decoder.
-
-
Method Details
-
onDataRead
public int onDataRead(ChannelHandlerContext ctx, int streamId, ByteBuf data, int padding, boolean endOfStream) throws Http2Exception Description copied from interface:Http2FrameListener
Handles an inboundDATA
frame.- Specified by:
onDataRead
in interfaceHttp2FrameListener
- Overrides:
onDataRead
in 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
+padding
will effectively opt-out of application-level flow control for this frame. Returning a value less than the length ofdata
+padding
will defer the returning of the processed bytes, which the application must later return viaHttp2LocalFlowController.consumeBytes(Http2Stream, int)
. The returned value must be >=0
and invalid input: '<'=data.readableBytes()
+padding
. - Throws:
Http2Exception
-
onHeadersRead
public void onHeadersRead(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int padding, boolean endStream) throws Http2Exception Description copied from interface:Http2FrameListener
Handles an inboundHEADERS
frame.Only one of the following methods will be called for each
HEADERS
frame sequence. One will be called when theEND_HEADERS
flag 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
Http2Headers
will contain all of the headers for the current message exchange step (additional queuing is not necessary).- Specified by:
onHeadersRead
in interfaceHttp2FrameListener
- Overrides:
onHeadersRead
in 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(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int streamDependency, short weight, boolean exclusive, int padding, boolean endStream) throws Http2Exception Description copied from interface:Http2FrameListener
Handles an inboundHEADERS
frame with priority information specified. Only called ifEND_HEADERS
encountered.Only one of the following methods will be called for each
HEADERS
frame sequence. One will be called when theEND_HEADERS
flag 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
Http2Headers
will contain all of the headers for the current message exchange step (additional queuing is not necessary).- Specified by:
onHeadersRead
in interfaceHttp2FrameListener
- Overrides:
onHeadersRead
in 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 EmbeddedChannel newContentDecompressor(ChannelHandlerContext ctx, CharSequence contentEncoding) throws Http2Exception Returns a newEmbeddedChannel
that decodes the HTTP2 message content encoded in the specifiedcontentEncoding
.- Parameters:
contentEncoding
- the value of thecontent-encoding
header- Returns:
- a new
ByteToMessageDecoder
if the specified encoding is supported.null
otherwise (alternatively, you can throw aHttp2Exception
to block unknown encoding). - Throws:
Http2Exception
- If the specified encoding is not supported and warrants an exception
-
getTargetContentEncoding
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-encoding
header- Returns:
- the expected content encoding of the new content.
- Throws:
Http2Exception
- if thecontentEncoding
is not supported and warrants an exception
-
initDecompressor
private void initDecompressor(ChannelHandlerContext ctx, int streamId, Http2Headers headers, boolean endOfStream) throws Http2Exception Checks if a new decompressor object is needed for the stream identified bystreamId
. This method will modify thecontent-encoding
header contained inheaders
.- Parameters:
ctx
- The contextstreamId
- The identifier for the headers insideheaders
headers
- Object representing headers which have been readendOfStream
- Indicates if the stream has ended- Throws:
Http2Exception
- If thecontent-encoding
is not supported
-
decompressor
-
cleanup
Release remaining content from theEmbeddedChannel
.- Parameters:
decompressor
- The decompressor forstream
-
nextReadableBuf
- Parameters:
decompressor
- The channel to read from- Returns:
- The next decoded
ByteBuf
from theEmbeddedChannel
ornull
if one does not exist
-
DelegatingDecompressorFrameListener(Http2Connection, Http2FrameListener, int)