Package io.netty.handler.codec.http2
Class Http2ControlFrameLimitEncoder
java.lang.Object
io.netty.handler.codec.http2.DecoratingHttp2FrameWriter
io.netty.handler.codec.http2.DecoratingHttp2ConnectionEncoder
io.netty.handler.codec.http2.Http2ControlFrameLimitEncoder
- All Implemented Interfaces:
Http2ConnectionEncoder
,Http2DataWriter
,Http2FrameWriter
,Http2SettingsReceivedConsumer
,Closeable
,AutoCloseable
DecoratingHttp2ConnectionEncoder
which guards against a remote peer that will trigger a massive amount
of control frames but will not consume our responses to these.
This encoder will tear-down the connection once we reached the configured limit to reduce the risk of DDOS.-
Nested Class Summary
Nested classes/interfaces inherited from interface io.netty.handler.codec.http2.Http2FrameWriter
Http2FrameWriter.Configuration
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Http2LifecycleManager
private boolean
private static final InternalLogger
private final int
private int
private final ChannelFutureListener
-
Constructor Summary
ConstructorsConstructorDescriptionHttp2ControlFrameLimitEncoder
(Http2ConnectionEncoder delegate, int maxOutstandingControlFrames) -
Method Summary
Modifier and TypeMethodDescriptionprivate ChannelPromise
void
lifecycleManager
(Http2LifecycleManager lifecycleManager) Sets the lifecycle manager.writePing
(ChannelHandlerContext ctx, boolean ack, long data, ChannelPromise promise) Writes a PING frame to the remote endpoint.writeRstStream
(ChannelHandlerContext ctx, int streamId, long errorCode, ChannelPromise promise) Writes a RST_STREAM frame to the remote endpoint.writeSettingsAck
(ChannelHandlerContext ctx, ChannelPromise promise) Writes a SETTINGS acknowledgment to the remote endpoint.Methods inherited from class io.netty.handler.codec.http2.DecoratingHttp2ConnectionEncoder
connection, consumeReceivedSettings, flowController, frameWriter, pollSentSettings, remoteSettings
Methods inherited from class io.netty.handler.codec.http2.DecoratingHttp2FrameWriter
close, configuration, writeData, writeFrame, writeGoAway, writeHeaders, writeHeaders, writePriority, writePushPromise, writeSettings, writeWindowUpdate
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface io.netty.handler.codec.http2.Http2ConnectionEncoder
writeFrame
Methods inherited from interface io.netty.handler.codec.http2.Http2DataWriter
writeData
Methods inherited from interface io.netty.handler.codec.http2.Http2FrameWriter
close, configuration, writeGoAway, writeHeaders, writeHeaders, writePriority, writePushPromise, writeSettings, writeWindowUpdate
-
Field Details
-
logger
-
maxOutstandingControlFrames
private final int maxOutstandingControlFrames -
outstandingControlFramesListener
-
lifecycleManager
-
outstandingControlFrames
private int outstandingControlFrames -
limitReached
private boolean limitReached
-
-
Constructor Details
-
Http2ControlFrameLimitEncoder
Http2ControlFrameLimitEncoder(Http2ConnectionEncoder delegate, int maxOutstandingControlFrames)
-
-
Method Details
-
lifecycleManager
Description copied from interface:Http2ConnectionEncoder
Sets the lifecycle manager. Must be called as part of initialization before the encoder is used.- Specified by:
lifecycleManager
in interfaceHttp2ConnectionEncoder
- Overrides:
lifecycleManager
in classDecoratingHttp2ConnectionEncoder
-
writeSettingsAck
Description copied from interface:Http2FrameWriter
Writes a SETTINGS acknowledgment to the remote endpoint.- Specified by:
writeSettingsAck
in interfaceHttp2FrameWriter
- Overrides:
writeSettingsAck
in classDecoratingHttp2FrameWriter
- Parameters:
ctx
- the context to use for writing.promise
- the promise for the write.- Returns:
- the future for the write.
-
writePing
public ChannelFuture writePing(ChannelHandlerContext ctx, boolean ack, long data, ChannelPromise promise) Description copied from interface:Http2FrameWriter
Writes a PING frame to the remote endpoint.- Specified by:
writePing
in interfaceHttp2FrameWriter
- Overrides:
writePing
in classDecoratingHttp2FrameWriter
- Parameters:
ctx
- the context to use for writing.ack
- indicates whether this is an ack of a PING frame previously received from the remote endpoint.data
- the payload of the frame.promise
- the promise for the write.- Returns:
- the future for the write.
-
writeRstStream
public ChannelFuture writeRstStream(ChannelHandlerContext ctx, int streamId, long errorCode, ChannelPromise promise) Description copied from interface:Http2FrameWriter
Writes a RST_STREAM frame to the remote endpoint.- Specified by:
writeRstStream
in interfaceHttp2FrameWriter
- Overrides:
writeRstStream
in classDecoratingHttp2FrameWriter
- Parameters:
ctx
- the context to use for writing.streamId
- the stream for which to send the frame.errorCode
- the error code indicating the nature of the failure.promise
- the promise for the write.- Returns:
- the future for the write.
-
handleOutstandingControlFrames
private ChannelPromise handleOutstandingControlFrames(ChannelHandlerContext ctx, ChannelPromise promise)
-