Package io.netty.handler.codec.http2
Class DefaultHttp2FrameReader
java.lang.Object
io.netty.handler.codec.http2.DefaultHttp2FrameReader
- All Implemented Interfaces:
Http2FrameReader
,Http2FrameReader.Configuration
,Http2FrameSizePolicy
,Closeable
,AutoCloseable
@UnstableApi
public class DefaultHttp2FrameReader
extends Object
implements Http2FrameReader, Http2FrameSizePolicy, Http2FrameReader.Configuration
A
Http2FrameReader
that supports all frame types defined by the HTTP/2 specification.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected class
Utility class to help with construction of the headers block that may potentially span multiple frames.private class
Base class for processing of HEADERS and PUSH_PROMISE header blocks that potentially span multiple frames.Nested classes/interfaces inherited from interface io.netty.handler.codec.http2.Http2FrameReader
Http2FrameReader.Configuration
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Http2Flags
private byte
private final Http2HeadersDecoder
private int
private int
private boolean
Once set totrue
the value will never change.private boolean
true
= reading headers,false
= reading payload.private int
-
Constructor Summary
ConstructorsConstructorDescriptionCreate a new instance.DefaultHttp2FrameReader
(boolean validateHeaders) Create a new instance.DefaultHttp2FrameReader
(Http2HeadersDecoder headersDecoder) -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Closes this reader and frees any allocated resources.private void
Get the configuration related elements for thisHttp2FrameReader
Get theHttp2FrameSizePolicy
for thisHttp2FrameReader
Get theHttp2HeadersDecoder.Configuration
for thisHttp2FrameReader
private static int
lengthWithoutTrailingPadding
(int readableBytes, int padding) The padding parameter consists of the 1 byte pad length field and the trailing padding bytes.int
Gets the maximum allowed frame size.void
maxFrameSize
(int max) Sets the maximum allowed frame size.private boolean
private void
processPayloadState
(ChannelHandlerContext ctx, ByteBuf in, Http2FrameListener listener) private void
readContinuationFrame
(ByteBuf payload, Http2FrameListener listener) private void
readDataFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) void
readFrame
(ChannelHandlerContext ctx, ByteBuf input, Http2FrameListener listener) Attempts to read the next frame from the input buffer.private void
readGoAwayFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) private void
readHeadersFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) private int
readPadding
(ByteBuf payload) If padding is present in the payload, reads the next byte as padding.private void
readPingFrame
(ChannelHandlerContext ctx, long data, Http2FrameListener listener) private void
readPriorityFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) private void
readPushPromiseFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) private void
readRstStreamFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) private void
readSettingsFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) private void
readUnknownFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) private void
readWindowUpdateFrame
(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) private void
resetHeadersContinuationIfEnd
(boolean endOfHeaders) private void
private void
private void
private void
private void
private void
private void
Verify that current state is not processing on header blockprivate void
verifyPadding
(int padding) private void
private void
private void
private void
private void
private static void
verifyStreamOrConnectionId
(int streamId, String argumentName) private void
private void
-
Field Details
-
headersDecoder
-
readingHeaders
private boolean readingHeaderstrue
= reading headers,false
= reading payload. -
readError
private boolean readErrorOnce set totrue
the value will never change. This is set totrue
if an unrecoverable error which renders the connection unusable. -
frameType
private byte frameType -
streamId
private int streamId -
flags
-
payloadLength
private int payloadLength -
headersContinuation
-
maxFrameSize
private int maxFrameSize
-
-
Constructor Details
-
DefaultHttp2FrameReader
public DefaultHttp2FrameReader()Create a new instance.Header names will be validated.
-
DefaultHttp2FrameReader
public DefaultHttp2FrameReader(boolean validateHeaders) Create a new instance.- Parameters:
validateHeaders
-true
to validate headers.false
to not validate headers.- See Also:
-
DefaultHttp2FrameReader
-
-
Method Details
-
headersConfiguration
Description copied from interface:Http2FrameReader.Configuration
Get theHttp2HeadersDecoder.Configuration
for thisHttp2FrameReader
- Specified by:
headersConfiguration
in interfaceHttp2FrameReader.Configuration
-
configuration
Description copied from interface:Http2FrameReader
Get the configuration related elements for thisHttp2FrameReader
- Specified by:
configuration
in interfaceHttp2FrameReader
-
frameSizePolicy
Description copied from interface:Http2FrameReader.Configuration
Get theHttp2FrameSizePolicy
for thisHttp2FrameReader
- Specified by:
frameSizePolicy
in interfaceHttp2FrameReader.Configuration
-
maxFrameSize
Description copied from interface:Http2FrameSizePolicy
Sets the maximum allowed frame size. Attempts to write frames longer than this maximum will fail.This value is used to represent SETTINGS_MAX_FRAME_SIZE. This method should only be called by Netty (not users) as a result of a receiving a
SETTINGS
frame.- Specified by:
maxFrameSize
in interfaceHttp2FrameSizePolicy
- Throws:
Http2Exception
-
maxFrameSize
public int maxFrameSize()Description copied from interface:Http2FrameSizePolicy
Gets the maximum allowed frame size.This value is used to represent SETTINGS_MAX_FRAME_SIZE. The initial value defined by the RFC is unlimited but enforcing a lower limit is generally permitted.
Http2CodecUtil.DEFAULT_MAX_FRAME_SIZE
can be used as a more conservative default.- Specified by:
maxFrameSize
in interfaceHttp2FrameSizePolicy
-
close
public void close()Description copied from interface:Http2FrameReader
Closes this reader and frees any allocated resources.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceHttp2FrameReader
-
closeHeadersContinuation
private void closeHeadersContinuation() -
readFrame
public void readFrame(ChannelHandlerContext ctx, ByteBuf input, Http2FrameListener listener) throws Http2Exception Description copied from interface:Http2FrameReader
Attempts to read the next frame from the input buffer. If enough data is available to fully read the frame, notifies the listener of the read frame.- Specified by:
readFrame
in interfaceHttp2FrameReader
- Throws:
Http2Exception
-
preProcessFrame
- Throws:
Http2Exception
-
verifyFrameState
- Throws:
Http2Exception
-
processPayloadState
private void processPayloadState(ChannelHandlerContext ctx, ByteBuf in, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
verifyDataFrame
- Throws:
Http2Exception
-
verifyHeadersFrame
- Throws:
Http2Exception
-
verifyPriorityFrame
- Throws:
Http2Exception
-
verifyRstStreamFrame
- Throws:
Http2Exception
-
verifySettingsFrame
- Throws:
Http2Exception
-
verifyPushPromiseFrame
- Throws:
Http2Exception
-
verifyPingFrame
- Throws:
Http2Exception
-
verifyGoAwayFrame
- Throws:
Http2Exception
-
verifyWindowUpdateFrame
- Throws:
Http2Exception
-
verifyContinuationFrame
- Throws:
Http2Exception
-
verifyUnknownFrame
- Throws:
Http2Exception
-
readDataFrame
private void readDataFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readHeadersFrame
private void readHeadersFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
resetHeadersContinuationIfEnd
private void resetHeadersContinuationIfEnd(boolean endOfHeaders) -
readPriorityFrame
private void readPriorityFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readRstStreamFrame
private void readRstStreamFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readSettingsFrame
private void readSettingsFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readPushPromiseFrame
private void readPushPromiseFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readPingFrame
private void readPingFrame(ChannelHandlerContext ctx, long data, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readGoAwayFrame
private void readGoAwayFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readWindowUpdateFrame
private void readWindowUpdateFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readContinuationFrame
private void readContinuationFrame(ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readUnknownFrame
private void readUnknownFrame(ChannelHandlerContext ctx, ByteBuf payload, Http2FrameListener listener) throws Http2Exception - Throws:
Http2Exception
-
readPadding
If padding is present in the payload, reads the next byte as padding. The padding also includes the one byte width of the pad length field. Otherwise, returns zero. -
verifyPadding
- Throws:
Http2Exception
-
lengthWithoutTrailingPadding
private static int lengthWithoutTrailingPadding(int readableBytes, int padding) The padding parameter consists of the 1 byte pad length field and the trailing padding bytes. This method returns the number of readable bytes without the trailing padding. -
verifyNotProcessingHeaders
Verify that current state is not processing on header block- Throws:
Http2Exception
- thrown ifheadersContinuation
is not null
-
verifyAssociatedWithAStream
- Throws:
Http2Exception
-
verifyStreamOrConnectionId
private static void verifyStreamOrConnectionId(int streamId, String argumentName) throws Http2Exception - Throws:
Http2Exception
-