Package io.grpc.netty

Class Http2ControlFrameLimitEncoder

  • All Implemented Interfaces:
    io.netty.handler.codec.http2.Http2ConnectionEncoder, io.netty.handler.codec.http2.Http2DataWriter, io.netty.handler.codec.http2.Http2FrameWriter, io.netty.handler.codec.http2.Http2SettingsReceivedConsumer, java.io.Closeable, java.lang.AutoCloseable

    final class Http2ControlFrameLimitEncoder
    extends io.netty.handler.codec.http2.DecoratingHttp2ConnectionEncoder
    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

        io.netty.handler.codec.http2.Http2FrameWriter.Configuration
    • Constructor Summary

      Constructors 
      Constructor Description
      Http2ControlFrameLimitEncoder​(io.netty.handler.codec.http2.Http2ConnectionEncoder delegate, int maxOutstandingControlFrames)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private io.netty.channel.ChannelPromise handleOutstandingControlFrames​(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise promise)  
      void lifecycleManager​(io.netty.handler.codec.http2.Http2LifecycleManager lifecycleManager)  
      io.netty.channel.ChannelFuture writePing​(io.netty.channel.ChannelHandlerContext ctx, boolean ack, long data, io.netty.channel.ChannelPromise promise)  
      io.netty.channel.ChannelFuture writeRstStream​(io.netty.channel.ChannelHandlerContext ctx, int streamId, long errorCode, io.netty.channel.ChannelPromise promise)  
      io.netty.channel.ChannelFuture writeSettingsAck​(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise promise)  
      • 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 Detail

      • logger

        private static final io.netty.util.internal.logging.InternalLogger logger
      • maxOutstandingControlFrames

        private final int maxOutstandingControlFrames
      • outstandingControlFramesListener

        private final io.netty.channel.ChannelFutureListener outstandingControlFramesListener
      • lifecycleManager

        private io.netty.handler.codec.http2.Http2LifecycleManager lifecycleManager
      • outstandingControlFrames

        private int outstandingControlFrames
      • limitReached

        private boolean limitReached
    • Constructor Detail

      • Http2ControlFrameLimitEncoder

        Http2ControlFrameLimitEncoder​(io.netty.handler.codec.http2.Http2ConnectionEncoder delegate,
                                      int maxOutstandingControlFrames)
    • Method Detail

      • lifecycleManager

        public void lifecycleManager​(io.netty.handler.codec.http2.Http2LifecycleManager lifecycleManager)
        Specified by:
        lifecycleManager in interface io.netty.handler.codec.http2.Http2ConnectionEncoder
        Overrides:
        lifecycleManager in class io.netty.handler.codec.http2.DecoratingHttp2ConnectionEncoder
      • writeSettingsAck

        public io.netty.channel.ChannelFuture writeSettingsAck​(io.netty.channel.ChannelHandlerContext ctx,
                                                               io.netty.channel.ChannelPromise promise)
        Specified by:
        writeSettingsAck in interface io.netty.handler.codec.http2.Http2FrameWriter
        Overrides:
        writeSettingsAck in class io.netty.handler.codec.http2.DecoratingHttp2FrameWriter
      • writePing

        public io.netty.channel.ChannelFuture writePing​(io.netty.channel.ChannelHandlerContext ctx,
                                                        boolean ack,
                                                        long data,
                                                        io.netty.channel.ChannelPromise promise)
        Specified by:
        writePing in interface io.netty.handler.codec.http2.Http2FrameWriter
        Overrides:
        writePing in class io.netty.handler.codec.http2.DecoratingHttp2FrameWriter
      • writeRstStream

        public io.netty.channel.ChannelFuture writeRstStream​(io.netty.channel.ChannelHandlerContext ctx,
                                                             int streamId,
                                                             long errorCode,
                                                             io.netty.channel.ChannelPromise promise)
        Specified by:
        writeRstStream in interface io.netty.handler.codec.http2.Http2FrameWriter
        Overrides:
        writeRstStream in class io.netty.handler.codec.http2.DecoratingHttp2FrameWriter
      • handleOutstandingControlFrames

        private io.netty.channel.ChannelPromise handleOutstandingControlFrames​(io.netty.channel.ChannelHandlerContext ctx,
                                                                               io.netty.channel.ChannelPromise promise)