Package io.netty.handler.codec.http2
Class AbstractHttp2ConnectionHandlerBuilder<T extends Http2ConnectionHandler,B extends AbstractHttp2ConnectionHandlerBuilder<T,B>>
java.lang.Object
io.netty.handler.codec.http2.AbstractHttp2ConnectionHandlerBuilder<T,B>
- Type Parameters:
T
- The type of handler created by this builder.B
- The concrete type of this builder.
- Direct Known Subclasses:
Http2ConnectionHandlerBuilder
,Http2FrameCodecBuilder
,Http2MultiplexCodecBuilder
,HttpToHttp2ConnectionHandlerBuilder
@UnstableApi
public abstract class AbstractHttp2ConnectionHandlerBuilder<T extends Http2ConnectionHandler,B extends AbstractHttp2ConnectionHandlerBuilder<T,B>>
extends Object
Abstract base class which defines commonly used features required to build Three ways to build a
Let the builder create a
Simply call all the necessary setter methods, and then use Let the builder use the
Call Let the builder use the
Call
Http2ConnectionHandler
instances.
Three ways to build a Http2ConnectionHandler
Let the builder create a Http2ConnectionHandler
Simply call all the necessary setter methods, and then use build()
to build a new
Http2ConnectionHandler
. Setting the following properties are prohibited because they are used for
other ways of building a Http2ConnectionHandler
.
conflicts with this option:
Let the builder use the Http2ConnectionHandler
you specified
Call connection(Http2Connection)
to tell the builder that you want to build the handler from the
Http2Connection
you specified. Setting the following properties are prohibited and thus will trigger
an IllegalStateException
because they conflict with this option.
Let the builder use the Http2ConnectionDecoder
and Http2ConnectionEncoder
you specified
Call codec(Http2ConnectionDecoder, Http2ConnectionEncoder)
to tell the builder that you want to built the
handler from the Http2ConnectionDecoder
and Http2ConnectionEncoder
you specified. Setting the
following properties are prohibited and thus will trigger an IllegalStateException
because they conflict
with this option:
server(boolean)
connection(Http2Connection)
frameLogger(Http2FrameLogger)
headerSensitivityDetector(SensitivityDetector)
encoderEnforceMaxConcurrentStreams(boolean)
encoderIgnoreMaxHeaderListSize(boolean)
Exposing necessary methods in a subclass
build()
method and all property access methods are protected
. Choose the methods to expose to the
users of your builder implementation and make them public
.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
private boolean
private Http2Connection
private Http2ConnectionDecoder
private boolean
private static final Http2HeadersEncoder.SensitivityDetector
private static final int
private Http2ConnectionEncoder
private Boolean
private Boolean
private boolean
private Http2FrameListener
private Http2FrameLogger
private long
private Http2Settings
private Boolean
private int
private int
private Integer
private Integer
private Http2PromisedRequestVerifier
private int
private Boolean
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected B
autoAckPingFrame
(boolean autoAckPingFrame) Determine if PING frame should automatically be acknowledged or not.protected B
autoAckSettingsFrame
(boolean autoAckSettings) Determine if settings frame should automatically be acknowledged and applied.protected T
build()
Create a newHttp2ConnectionHandler
.protected abstract T
build
(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings) Implement this method to create a newHttp2ConnectionHandler
or its subtype instance.private T
buildFromCodec
(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder) private T
buildFromConnection
(Http2Connection connection) protected B
codec
(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder) Sets theHttp2ConnectionDecoder
andHttp2ConnectionEncoder
to use.protected Http2Connection
Returns theHttp2Connection
to use.protected B
connection
(Http2Connection connection) Sets theHttp2Connection
to use.protected Http2ConnectionDecoder
decoder()
Returns theHttp2ConnectionDecoder
to use.protected int
Returns the maximum number of consecutive empty DATA frames (without end_of_stream flag) that are allowed before the connection is closed.protected B
decoderEnforceMaxConsecutiveEmptyDataFrames
(int maxConsecutiveEmptyFrames) Sets the maximum number of consecutive empty DATA frames (without end_of_stream flag) that are allowed before the connection is closed.protected B
decoderEnforceMaxRstFramesPerWindow
(int maxRstFramesPerWindow, int secondsPerWindow) Sets the maximum number RST frames that are allowed per window before the connection is closed.protected boolean
Determine if theChannelOutboundInvoker.close()
should be coupled with goaway and graceful close.protected B
decoupleCloseAndGoAway
(boolean decoupleCloseAndGoAway) Determine if theChannelOutboundInvoker.close()
should be coupled with goaway and graceful close.protected Http2ConnectionEncoder
encoder()
Returns theHttp2ConnectionEncoder
to use.protected boolean
Returns if the encoder should queue frames if the maximum number of concurrent streams would otherwise be exceeded.protected B
encoderEnforceMaxConcurrentStreams
(boolean encoderEnforceMaxConcurrentStreams) Sets if the encoder should queue frames if the maximum number of concurrent streams would otherwise be exceeded.protected int
Returns the maximum number of queued control frames that are allowed before the connection is closed.protected B
encoderEnforceMaxQueuedControlFrames
(int maxQueuedControlFrames) Sets the maximum number of queued control frames that are allowed before the connection is closed.protected B
encoderIgnoreMaxHeaderListSize
(boolean ignoreMaxHeaderListSize) Sets if the SETTINGS_MAX_HEADER_LIST_SIZE should be ignored when encoding headers.private static void
enforceConstraint
(String methodName, String rejectorName, Object value) private void
enforceNonCodecConstraints
(String rejected) protected boolean
protected B
flushPreface
(boolean flushPreface) protected Http2FrameListener
Returns the listener of inbound frames.protected B
frameListener
(Http2FrameListener frameListener) Sets the listener of inbound frames.protected Http2FrameLogger
Returns the logger that is used for the encoder and decoder.protected B
frameLogger
(Http2FrameLogger frameLogger) Sets the logger that is used for the encoder and decoder.protected long
Returns the graceful shutdown timeout of theHttp2Connection
in milliseconds.protected B
gracefulShutdownTimeoutMillis
(long gracefulShutdownTimeoutMillis) Sets the graceful shutdown timeout of theHttp2Connection
in milliseconds.protected Http2HeadersEncoder.SensitivityDetector
Returns theHttp2HeadersEncoder.SensitivityDetector
to use.protected B
headerSensitivityDetector
(Http2HeadersEncoder.SensitivityDetector headerSensitivityDetector) Sets theHttp2HeadersEncoder.SensitivityDetector
to use.protected B
initialHuffmanDecodeCapacity
(int initialHuffmanDecodeCapacity) Deprecated.Huffman decoding no longer depends on having a decode capacity.protected Http2Settings
Sets theHttp2Settings
to use for the initial connection settings exchange.protected B
initialSettings
(Http2Settings settings) Sets theHttp2Settings
to use for the initial connection settings exchange.protected boolean
Determine if the PING frames should be automatically acknowledged or not.protected boolean
Determine if the SETTINGS frames should be automatically acknowledged and applied.protected boolean
isServer()
protected boolean
Returns if HTTP headers should be validated according to RFC 7540, 8.1.2.6.protected int
Get the maximum number of streams which can be in the reserved state at any given time.protected B
maxReservedStreams
(int maxReservedStreams) Set the maximum number of streams which can be in the reserved state at any given time.protected Http2PromisedRequestVerifier
Get theHttp2PromisedRequestVerifier
to use.protected B
promisedRequestVerifier
(Http2PromisedRequestVerifier promisedRequestVerifier) Set theHttp2PromisedRequestVerifier
to use.protected final B
self()
Returnsthis
.protected B
server
(boolean isServer) protected B
validateHeaders
(boolean validateHeaders) Sets if HTTP headers should be validated according to RFC 7540, 8.1.2.6.
-
Field Details
-
DEFAULT_HEADER_SENSITIVITY_DETECTOR
-
DEFAULT_MAX_RST_FRAMES_PER_CONNECTION_FOR_SERVER
private static final int DEFAULT_MAX_RST_FRAMES_PER_CONNECTION_FOR_SERVER- See Also:
-
initialSettings
-
frameListener
-
gracefulShutdownTimeoutMillis
private long gracefulShutdownTimeoutMillis -
decoupleCloseAndGoAway
private boolean decoupleCloseAndGoAway -
flushPreface
private boolean flushPreface -
isServer
-
maxReservedStreams
-
connection
-
decoder
-
encoder
-
validateHeaders
-
frameLogger
-
headerSensitivityDetector
-
encoderEnforceMaxConcurrentStreams
-
encoderIgnoreMaxHeaderListSize
-
promisedRequestVerifier
-
autoAckSettingsFrame
private boolean autoAckSettingsFrame -
autoAckPingFrame
private boolean autoAckPingFrame -
maxQueuedControlFrames
private int maxQueuedControlFrames -
maxConsecutiveEmptyFrames
private int maxConsecutiveEmptyFrames -
maxRstFramesPerWindow
-
secondsPerWindow
private int secondsPerWindow
-
-
Constructor Details
-
AbstractHttp2ConnectionHandlerBuilder
public AbstractHttp2ConnectionHandlerBuilder()
-
-
Method Details
-
initialSettings
Sets theHttp2Settings
to use for the initial connection settings exchange. -
initialSettings
Sets theHttp2Settings
to use for the initial connection settings exchange. -
frameListener
Returns the listener of inbound frames.- Returns:
Http2FrameListener
if set, ornull
if not set.
-
frameListener
Sets the listener of inbound frames. This listener will only be set if the decoder's listener isnull
. -
gracefulShutdownTimeoutMillis
protected long gracefulShutdownTimeoutMillis()Returns the graceful shutdown timeout of theHttp2Connection
in milliseconds. Returns -1 if the timeout is indefinite. -
gracefulShutdownTimeoutMillis
Sets the graceful shutdown timeout of theHttp2Connection
in milliseconds. -
isServer
protected boolean isServer() -
server
-
maxReservedStreams
protected int maxReservedStreams()Get the maximum number of streams which can be in the reserved state at any given time.By default this value will be ignored on the server for local endpoint. This is because the RFC provides no way to explicitly communicate a limit to how many states can be in the reserved state, and instead relies on the peer to send RST_STREAM frames when they will be rejected.
-
maxReservedStreams
Set the maximum number of streams which can be in the reserved state at any given time. -
connection
Returns theHttp2Connection
to use.- Returns:
Http2Connection
if set, ornull
if not set.
-
connection
Sets theHttp2Connection
to use. -
decoder
Returns theHttp2ConnectionDecoder
to use.- Returns:
Http2ConnectionDecoder
if set, ornull
if not set.
-
encoder
Returns theHttp2ConnectionEncoder
to use.- Returns:
Http2ConnectionEncoder
if set, ornull
if not set.
-
codec
Sets theHttp2ConnectionDecoder
andHttp2ConnectionEncoder
to use. -
isValidateHeaders
protected boolean isValidateHeaders()Returns if HTTP headers should be validated according to RFC 7540, 8.1.2.6. -
validateHeaders
Sets if HTTP headers should be validated according to RFC 7540, 8.1.2.6. -
frameLogger
Returns the logger that is used for the encoder and decoder.- Returns:
Http2FrameLogger
if set, ornull
if not set.
-
frameLogger
Sets the logger that is used for the encoder and decoder. -
encoderEnforceMaxConcurrentStreams
protected boolean encoderEnforceMaxConcurrentStreams()Returns if the encoder should queue frames if the maximum number of concurrent streams would otherwise be exceeded. -
encoderEnforceMaxConcurrentStreams
Sets if the encoder should queue frames if the maximum number of concurrent streams would otherwise be exceeded. -
encoderEnforceMaxQueuedControlFrames
protected int encoderEnforceMaxQueuedControlFrames()Returns the maximum number of queued control frames that are allowed before the connection is closed. This allows to protected against various attacks that can lead to high CPU / memory usage if the remote-peer floods us with frames that would have us produce control frames, but stops to read from the underlying socket.0
means no protection is in place. -
encoderEnforceMaxQueuedControlFrames
Sets the maximum number of queued control frames that are allowed before the connection is closed. This allows to protected against various attacks that can lead to high CPU / memory usage if the remote-peer floods us with frames that would have us produce control frames, but stops to read from the underlying socket.0
means no protection should be applied. -
headerSensitivityDetector
Returns theHttp2HeadersEncoder.SensitivityDetector
to use. -
headerSensitivityDetector
protected B headerSensitivityDetector(Http2HeadersEncoder.SensitivityDetector headerSensitivityDetector) Sets theHttp2HeadersEncoder.SensitivityDetector
to use. -
encoderIgnoreMaxHeaderListSize
Sets if the SETTINGS_MAX_HEADER_LIST_SIZE should be ignored when encoding headers.- Parameters:
ignoreMaxHeaderListSize
-true
to ignore SETTINGS_MAX_HEADER_LIST_SIZE.- Returns:
- this.
-
initialHuffmanDecodeCapacity
Deprecated.Huffman decoding no longer depends on having a decode capacity.Does nothing, do not call. -
promisedRequestVerifier
Set theHttp2PromisedRequestVerifier
to use.- Returns:
- this.
-
promisedRequestVerifier
Get theHttp2PromisedRequestVerifier
to use.- Returns:
- the
Http2PromisedRequestVerifier
to use.
-
decoderEnforceMaxConsecutiveEmptyDataFrames
protected int decoderEnforceMaxConsecutiveEmptyDataFrames()Returns the maximum number of consecutive empty DATA frames (without end_of_stream flag) that are allowed before the connection is closed. This allows to protect against the remote peer flooding us with such frames and so use up a lot of CPU. There is no valid use-case for empty DATA frames without end_of_stream flag.0
means no protection is in place. -
decoderEnforceMaxConsecutiveEmptyDataFrames
Sets the maximum number of consecutive empty DATA frames (without end_of_stream flag) that are allowed before the connection is closed. This allows to protect against the remote peer flooding us with such frames and so use up a lot of CPU. There is no valid use-case for empty DATA frames without end_of_stream flag.0
means no protection should be applied. -
decoderEnforceMaxRstFramesPerWindow
Sets the maximum number RST frames that are allowed per window before the connection is closed. This allows to protect against the remote peer flooding us with such frames and so use up a lot of CPU.0
for any of the parameters means no protection should be applied. -
autoAckSettingsFrame
Determine if settings frame should automatically be acknowledged and applied.- Returns:
- this.
-
isAutoAckSettingsFrame
protected boolean isAutoAckSettingsFrame()Determine if the SETTINGS frames should be automatically acknowledged and applied.- Returns:
true
if the SETTINGS frames should be automatically acknowledged and applied.
-
autoAckPingFrame
Determine if PING frame should automatically be acknowledged or not.- Returns:
- this.
-
isAutoAckPingFrame
protected boolean isAutoAckPingFrame()Determine if the PING frames should be automatically acknowledged or not.- Returns:
true
if the PING frames should be automatically acknowledged.
-
decoupleCloseAndGoAway
Determine if theChannelOutboundInvoker.close()
should be coupled with goaway and graceful close.- Parameters:
decoupleCloseAndGoAway
-true
to makeChannelOutboundInvoker.close()
directly close the underlying transport, and not attempt graceful closure via GOAWAY.- Returns:
this
.
-
decoupleCloseAndGoAway
protected boolean decoupleCloseAndGoAway()Determine if theChannelOutboundInvoker.close()
should be coupled with goaway and graceful close. -
flushPreface
Determine if the Preface should be automatically flushed when theChannel
becomes active or not.Client may choose to opt-out from this automatic behavior and manage flush manually if it's ready to send request frames immediately after the preface. It may help to avoid unnecessary latency.
- Parameters:
flushPreface
-true
to automatically flush,false otherwise
.- Returns:
this
.- See Also:
-
flushPreface
protected boolean flushPreface()Determine if the Preface should be automatically flushed when theChannel
becomes active or not.Client may choose to opt-out from this automatic behavior and manage flush manually if it's ready to send request frames immediately after the preface. It may help to avoid unnecessary latency.
- Returns:
true
if automatically flushed.- See Also:
-
build
Create a newHttp2ConnectionHandler
. -
buildFromConnection
-
buildFromCodec
-
build
protected abstract T build(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings) throws Exception Implement this method to create a newHttp2ConnectionHandler
or its subtype instance.The return of this method will be subject to the following:
frameListener(Http2FrameListener)
will be set if not already set in the decodergracefulShutdownTimeoutMillis(long)
will always be set
- Throws:
Exception
-
self
Returnsthis
. -
enforceNonCodecConstraints
-
enforceConstraint
-