Class Http2ConnectionHandler

    • Nested Class Summary

      • Nested classes/interfaces inherited from class io.netty.handler.codec.ByteToMessageDecoder

        io.netty.handler.codec.ByteToMessageDecoder.Cumulator
      • Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler

        io.netty.channel.ChannelHandler.Sharable
    • Field Summary

      • Fields inherited from class io.netty.handler.codec.ByteToMessageDecoder

        COMPOSITE_CUMULATOR, MERGE_CUMULATOR
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void bind​(io.netty.channel.ChannelHandlerContext ctx, SocketAddress localAddress, io.netty.channel.ChannelPromise promise)  
      void channelActive​(io.netty.channel.ChannelHandlerContext ctx)  
      void channelInactive​(io.netty.channel.ChannelHandlerContext ctx)  
      void channelReadComplete​(io.netty.channel.ChannelHandlerContext ctx)  
      void channelWritabilityChanged​(io.netty.channel.ChannelHandlerContext ctx)  
      void close​(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise promise)  
      void closeStream​(Http2Stream stream, io.netty.channel.ChannelFuture future)
      Closes and deactivates the given stream.
      void closeStreamLocal​(Http2Stream stream, io.netty.channel.ChannelFuture future)
      Closes the local side of the given stream.
      void closeStreamRemote​(Http2Stream stream, io.netty.channel.ChannelFuture future)
      Closes the remote side of the given stream.
      void connect​(io.netty.channel.ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, io.netty.channel.ChannelPromise promise)  
      Http2Connection connection()  
      protected void decode​(io.netty.channel.ChannelHandlerContext ctx, io.netty.buffer.ByteBuf in, List<Object> out)  
      Http2ConnectionDecoder decoder()  
      void deregister​(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise promise)  
      void disconnect​(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise promise)  
      Http2ConnectionEncoder encoder()  
      void exceptionCaught​(io.netty.channel.ChannelHandlerContext ctx, Throwable cause)
      Handles Http2Exception objects that were thrown from other handlers.
      void flush​(io.netty.channel.ChannelHandlerContext ctx)  
      protected Http2FrameWriter frameWriter()  
      io.netty.channel.ChannelFuture goAway​(io.netty.channel.ChannelHandlerContext ctx, int lastStreamId, long errorCode, io.netty.buffer.ByteBuf debugData, io.netty.channel.ChannelPromise promise)
      Prevents the peer from creating streams and close the connection if errorCode is not Http2Error.NO_ERROR.
      long gracefulShutdownTimeoutMillis()
      Get the amount of time (in milliseconds) this endpoint will wait for all streams to be closed before closing the connection during the graceful shutdown process.
      void gracefulShutdownTimeoutMillis​(long gracefulShutdownTimeoutMillis)
      Set the amount of time (in milliseconds) this endpoint will wait for all streams to be closed before closing the connection during the graceful shutdown process.
      void handlerAdded​(io.netty.channel.ChannelHandlerContext ctx)  
      protected void handlerRemoved0​(io.netty.channel.ChannelHandlerContext ctx)  
      protected void handleServerHeaderDecodeSizeError​(io.netty.channel.ChannelHandlerContext ctx, Http2Stream stream)
      Notifies client that this server has received headers that are larger than what it is willing to accept.
      protected boolean isGracefulShutdownComplete()
      Called by the graceful shutdown logic to determine when it is safe to close the connection.
      protected void onConnectionError​(io.netty.channel.ChannelHandlerContext ctx, boolean outbound, Throwable cause, Http2Exception http2Ex)
      Handler for a connection error.
      void onError​(io.netty.channel.ChannelHandlerContext ctx, boolean outbound, Throwable cause)
      Central handler for all exceptions caught during HTTP/2 processing.
      void onHttpClientUpgrade()
      Handles the client-side (cleartext) upgrade from HTTP to HTTP/2.
      void onHttpServerUpgrade​(Http2Settings settings)
      Handles the server-side (cleartext) upgrade from HTTP to HTTP/2.
      protected void onStreamError​(io.netty.channel.ChannelHandlerContext ctx, boolean outbound, Throwable cause, Http2Exception.StreamException http2Ex)
      Handler for a stream error.
      void read​(io.netty.channel.ChannelHandlerContext ctx)  
      io.netty.channel.ChannelFuture resetStream​(io.netty.channel.ChannelHandlerContext ctx, int streamId, long errorCode, io.netty.channel.ChannelPromise promise)
      Ensure the stream identified by streamId is reset.
      void write​(io.netty.channel.ChannelHandlerContext ctx, Object msg, io.netty.channel.ChannelPromise promise)  
      • Methods inherited from class io.netty.handler.codec.ByteToMessageDecoder

        actualReadableBytes, callDecode, channelRead, decodeLast, discardSomeReadBytes, handlerRemoved, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode, userEventTriggered
      • Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter

        channelRegistered, channelUnregistered
      • Methods inherited from class io.netty.channel.ChannelHandlerAdapter

        ensureNotSharable, isSharable
      • Methods inherited from interface io.netty.channel.ChannelHandler

        handlerRemoved
    • Method Detail

      • gracefulShutdownTimeoutMillis

        public long gracefulShutdownTimeoutMillis()
        Get the amount of time (in milliseconds) this endpoint will wait for all streams to be closed before closing the connection during the graceful shutdown process. Returns -1 if this connection is configured to wait indefinitely for all streams to close.
      • gracefulShutdownTimeoutMillis

        public void gracefulShutdownTimeoutMillis​(long gracefulShutdownTimeoutMillis)
        Set the amount of time (in milliseconds) this endpoint will wait for all streams to be closed before closing the connection during the graceful shutdown process.
        Parameters:
        gracefulShutdownTimeoutMillis - the amount of time (in milliseconds) this endpoint will wait for all streams to be closed before closing the connection during the graceful shutdown process.
      • onHttpClientUpgrade

        public void onHttpClientUpgrade()
                                 throws Http2Exception
        Handles the client-side (cleartext) upgrade from HTTP to HTTP/2. Reserves local stream 1 for the HTTP/2 response.
        Throws:
        Http2Exception
      • onHttpServerUpgrade

        public void onHttpServerUpgrade​(Http2Settings settings)
                                 throws Http2Exception
        Handles the server-side (cleartext) upgrade from HTTP to HTTP/2.
        Parameters:
        settings - the settings for the remote endpoint.
        Throws:
        Http2Exception
      • flush

        public void flush​(io.netty.channel.ChannelHandlerContext ctx)
        Specified by:
        flush in interface io.netty.channel.ChannelOutboundHandler
      • handlerAdded

        public void handlerAdded​(io.netty.channel.ChannelHandlerContext ctx)
                          throws Exception
        Specified by:
        handlerAdded in interface io.netty.channel.ChannelHandler
        Overrides:
        handlerAdded in class io.netty.channel.ChannelHandlerAdapter
        Throws:
        Exception
      • handlerRemoved0

        protected void handlerRemoved0​(io.netty.channel.ChannelHandlerContext ctx)
                                throws Exception
        Overrides:
        handlerRemoved0 in class io.netty.handler.codec.ByteToMessageDecoder
        Throws:
        Exception
      • channelActive

        public void channelActive​(io.netty.channel.ChannelHandlerContext ctx)
                           throws Exception
        Specified by:
        channelActive in interface io.netty.channel.ChannelInboundHandler
        Overrides:
        channelActive in class io.netty.channel.ChannelInboundHandlerAdapter
        Throws:
        Exception
      • channelInactive

        public void channelInactive​(io.netty.channel.ChannelHandlerContext ctx)
                             throws Exception
        Specified by:
        channelInactive in interface io.netty.channel.ChannelInboundHandler
        Overrides:
        channelInactive in class io.netty.handler.codec.ByteToMessageDecoder
        Throws:
        Exception
      • channelWritabilityChanged

        public void channelWritabilityChanged​(io.netty.channel.ChannelHandlerContext ctx)
                                       throws Exception
        Specified by:
        channelWritabilityChanged in interface io.netty.channel.ChannelInboundHandler
        Overrides:
        channelWritabilityChanged in class io.netty.channel.ChannelInboundHandlerAdapter
        Throws:
        Exception
      • decode

        protected void decode​(io.netty.channel.ChannelHandlerContext ctx,
                              io.netty.buffer.ByteBuf in,
                              List<Object> out)
                       throws Exception
        Specified by:
        decode in class io.netty.handler.codec.ByteToMessageDecoder
        Throws:
        Exception
      • bind

        public void bind​(io.netty.channel.ChannelHandlerContext ctx,
                         SocketAddress localAddress,
                         io.netty.channel.ChannelPromise promise)
                  throws Exception
        Specified by:
        bind in interface io.netty.channel.ChannelOutboundHandler
        Throws:
        Exception
      • connect

        public void connect​(io.netty.channel.ChannelHandlerContext ctx,
                            SocketAddress remoteAddress,
                            SocketAddress localAddress,
                            io.netty.channel.ChannelPromise promise)
                     throws Exception
        Specified by:
        connect in interface io.netty.channel.ChannelOutboundHandler
        Throws:
        Exception
      • disconnect

        public void disconnect​(io.netty.channel.ChannelHandlerContext ctx,
                               io.netty.channel.ChannelPromise promise)
                        throws Exception
        Specified by:
        disconnect in interface io.netty.channel.ChannelOutboundHandler
        Throws:
        Exception
      • close

        public void close​(io.netty.channel.ChannelHandlerContext ctx,
                          io.netty.channel.ChannelPromise promise)
                   throws Exception
        Specified by:
        close in interface io.netty.channel.ChannelOutboundHandler
        Throws:
        Exception
      • deregister

        public void deregister​(io.netty.channel.ChannelHandlerContext ctx,
                               io.netty.channel.ChannelPromise promise)
                        throws Exception
        Specified by:
        deregister in interface io.netty.channel.ChannelOutboundHandler
        Throws:
        Exception
      • read

        public void read​(io.netty.channel.ChannelHandlerContext ctx)
                  throws Exception
        Specified by:
        read in interface io.netty.channel.ChannelOutboundHandler
        Throws:
        Exception
      • write

        public void write​(io.netty.channel.ChannelHandlerContext ctx,
                          Object msg,
                          io.netty.channel.ChannelPromise promise)
                   throws Exception
        Specified by:
        write in interface io.netty.channel.ChannelOutboundHandler
        Throws:
        Exception
      • channelReadComplete

        public void channelReadComplete​(io.netty.channel.ChannelHandlerContext ctx)
                                 throws Exception
        Specified by:
        channelReadComplete in interface io.netty.channel.ChannelInboundHandler
        Overrides:
        channelReadComplete in class io.netty.handler.codec.ByteToMessageDecoder
        Throws:
        Exception
      • exceptionCaught

        public void exceptionCaught​(io.netty.channel.ChannelHandlerContext ctx,
                                    Throwable cause)
                             throws Exception
        Handles Http2Exception objects that were thrown from other handlers. Ignores all other exceptions.
        Specified by:
        exceptionCaught in interface io.netty.channel.ChannelHandler
        Specified by:
        exceptionCaught in interface io.netty.channel.ChannelInboundHandler
        Overrides:
        exceptionCaught in class io.netty.channel.ChannelInboundHandlerAdapter
        Throws:
        Exception
      • closeStreamLocal

        public void closeStreamLocal​(Http2Stream stream,
                                     io.netty.channel.ChannelFuture future)
        Closes the local side of the given stream. If this causes the stream to be closed, adds a hook to close the channel after the given future completes.
        Specified by:
        closeStreamLocal in interface Http2LifecycleManager
        Parameters:
        stream - the stream to be half closed.
        future - If closing, the future after which to close the channel.
      • closeStreamRemote

        public void closeStreamRemote​(Http2Stream stream,
                                      io.netty.channel.ChannelFuture future)
        Closes the remote side of the given stream. If this causes the stream to be closed, adds a hook to close the channel after the given future completes.
        Specified by:
        closeStreamRemote in interface Http2LifecycleManager
        Parameters:
        stream - the stream to be half closed.
        future - If closing, the future after which to close the channel.
      • onError

        public void onError​(io.netty.channel.ChannelHandlerContext ctx,
                            boolean outbound,
                            Throwable cause)
        Central handler for all exceptions caught during HTTP/2 processing.
        Specified by:
        onError in interface Http2LifecycleManager
        Parameters:
        ctx - The context used for communication and buffer allocation if necessary.
        outbound - true if the error was caused by an outbound operation and so the corresponding ChannelPromise was failed as well.
        cause - the error.
      • isGracefulShutdownComplete

        protected boolean isGracefulShutdownComplete()
        Called by the graceful shutdown logic to determine when it is safe to close the connection. Returns true if the graceful shutdown has completed and the connection can be safely closed. This implementation just guarantees that there are no active streams. Subclasses may override to provide additional checks.
      • onConnectionError

        protected void onConnectionError​(io.netty.channel.ChannelHandlerContext ctx,
                                         boolean outbound,
                                         Throwable cause,
                                         Http2Exception http2Ex)
        Handler for a connection error. Sends a GO_AWAY frame to the remote endpoint. Once all streams are closed, the connection is shut down.
        Parameters:
        ctx - the channel context
        outbound - true if the error was caused by an outbound operation.
        cause - the exception that was caught
        http2Ex - the Http2Exception that is embedded in the causality chain. This may be null if it's an unknown exception.
      • onStreamError

        protected void onStreamError​(io.netty.channel.ChannelHandlerContext ctx,
                                     boolean outbound,
                                     Throwable cause,
                                     Http2Exception.StreamException http2Ex)
        Handler for a stream error. Sends a RST_STREAM frame to the remote endpoint and closes the stream.
        Parameters:
        ctx - the channel context
        outbound - true if the error was caused by an outbound operation.
        cause - the exception that was caught
        http2Ex - the Http2Exception.StreamException that is embedded in the causality chain.
      • handleServerHeaderDecodeSizeError

        protected void handleServerHeaderDecodeSizeError​(io.netty.channel.ChannelHandlerContext ctx,
                                                         Http2Stream stream)
        Notifies client that this server has received headers that are larger than what it is willing to accept. Override to change behavior.
        Parameters:
        ctx - the channel context
        stream - the Http2Stream on which the header was received
      • resetStream

        public io.netty.channel.ChannelFuture resetStream​(io.netty.channel.ChannelHandlerContext ctx,
                                                          int streamId,
                                                          long errorCode,
                                                          io.netty.channel.ChannelPromise promise)
        Description copied from interface: Http2LifecycleManager
        Ensure the stream identified by streamId is reset. If our local state does not indicate the stream has been reset yet then a RST_STREAM will be sent to the peer. If our local state indicates the stream has already been reset then the return status will indicate success without sending anything to the peer.
        Specified by:
        resetStream in interface Http2LifecycleManager
        Parameters:
        ctx - The context used for communication and buffer allocation if necessary.
        streamId - The identifier of the stream to reset.
        errorCode - Justification as to why this stream is being reset. See Http2Error.
        promise - Used to indicate the return status of this operation.
        Returns:
        Will be considered successful when the connection and stream state has been updated, and a RST_STREAM frame has been sent to the peer. If the stream state has already been updated and a RST_STREAM frame has been sent then the return status may indicate success immediately.
      • goAway

        public io.netty.channel.ChannelFuture goAway​(io.netty.channel.ChannelHandlerContext ctx,
                                                     int lastStreamId,
                                                     long errorCode,
                                                     io.netty.buffer.ByteBuf debugData,
                                                     io.netty.channel.ChannelPromise promise)
        Description copied from interface: Http2LifecycleManager
        Prevents the peer from creating streams and close the connection if errorCode is not Http2Error.NO_ERROR. After this call the peer is not allowed to create any new streams and the local endpoint will be limited to creating streams with stream identifier <= lastStreamId. This may result in sending a GO_AWAY frame (assuming we have not already sent one with Last-Stream-ID <= lastStreamId), or may just return success if a GO_AWAY has previously been sent.
        Specified by:
        goAway in interface Http2LifecycleManager
        Parameters:
        ctx - The context used for communication and buffer allocation if necessary.
        lastStreamId - The last stream that the local endpoint is claiming it will accept.
        errorCode - The rational as to why the connection is being closed. See Http2Error.
        debugData - For diagnostic purposes (carries no semantic value).
        promise - Used to indicate the return status of this operation.
        Returns:
        Will be considered successful when the connection and stream state has been updated, and a GO_AWAY frame has been sent to the peer. If the stream state has already been updated and a GO_AWAY frame has been sent then the return status may indicate success immediately.