Package io.netty.handler.codec.http2
Class Http2ConnectionHandler
- java.lang.Object
-
- io.netty.channel.ChannelHandlerAdapter
-
- io.netty.channel.ChannelInboundHandlerAdapter
-
- io.netty.handler.codec.ByteToMessageDecoder
-
- io.netty.handler.codec.http2.Http2ConnectionHandler
-
- All Implemented Interfaces:
ChannelHandler,ChannelInboundHandler,ChannelOutboundHandler,Http2LifecycleManager
- Direct Known Subclasses:
Http2FrameCodec,HttpToHttp2ConnectionHandler
@UnstableApi public class Http2ConnectionHandler extends ByteToMessageDecoder implements Http2LifecycleManager, ChannelOutboundHandler
Provides the default implementation for processing inbound frame events and delegates to aHttp2FrameListenerThis class will read HTTP/2 frames and delegate the events to a
Http2FrameListenerThis interface enforces inbound flow control functionality through
Http2LocalFlowController
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classHttp2ConnectionHandler.BaseDecoderprivate static classHttp2ConnectionHandler.ClosingChannelFutureListenerCloses the channel when the future completes.private classHttp2ConnectionHandler.FrameDecoderprivate classHttp2ConnectionHandler.PrefaceDecoder-
Nested classes/interfaces inherited from class io.netty.handler.codec.ByteToMessageDecoder
ByteToMessageDecoder.Cumulator
-
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Field Summary
Fields Modifier and Type Field Description private Http2ConnectionHandler.BaseDecoderbyteDecoderprivate ChannelFutureListenercloseListenerprivate Http2ConnectionDecoderdecoderprivate booleandecoupleCloseAndGoAwayprivate Http2ConnectionEncoderencoderprivate longgracefulShutdownTimeoutMillisprivate static Http2HeadersHEADERS_TOO_LARGE_HEADERSprivate static ByteBufHTTP_1_X_BUFprivate Http2SettingsinitialSettingsprivate static InternalLoggerlogger-
Fields inherited from class io.netty.handler.codec.ByteToMessageDecoder
COMPOSITE_CUMULATOR, MERGE_CUMULATOR
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedHttp2ConnectionHandler(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings)protectedHttp2ConnectionHandler(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings, boolean decoupleCloseAndGoAway)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidbind(ChannelHandlerContext ctx, java.net.SocketAddress localAddress, ChannelPromise promise)Called once a bind operation is made.voidchannelActive(ChannelHandlerContext ctx)CallsChannelHandlerContext.fireChannelActive()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidchannelInactive(ChannelHandlerContext ctx)CallsChannelHandlerContext.fireChannelInactive()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidchannelReadComplete(ChannelHandlerContext ctx)CallsChannelHandlerContext.fireChannelReadComplete()to forward to the nextChannelInboundHandlerin theChannelPipeline.(package private) voidchannelReadComplete0(ChannelHandlerContext ctx)voidchannelWritabilityChanged(ChannelHandlerContext ctx)CallsChannelHandlerContext.fireChannelWritabilityChanged()to forward to the nextChannelInboundHandlerin theChannelPipeline.private voidcheckCloseConnection(ChannelFuture future)Closes the connection if the graceful shutdown process has completed.private static ByteBufclientPrefaceString(Http2Connection connection)Returns the client preface string if this is a client connection, otherwise returnsnull.voidclose(ChannelHandlerContext ctx, ChannelPromise promise)Called once a close operation is made.private voidcloseConnectionOnError(ChannelHandlerContext ctx, ChannelFuture future)voidcloseStream(Http2Stream stream, ChannelFuture future)Closes and deactivates the givenstream.voidcloseStreamLocal(Http2Stream stream, ChannelFuture future)Closes the local side of the given stream.voidcloseStreamRemote(Http2Stream stream, ChannelFuture future)Closes the remote side of the given stream.voidconnect(ChannelHandlerContext ctx, java.net.SocketAddress remoteAddress, java.net.SocketAddress localAddress, ChannelPromise promise)Called once a connect operation is made.Http2Connectionconnection()protected voiddecode(ChannelHandlerContext ctx, ByteBuf in, java.util.List<java.lang.Object> out)Decode the from oneByteBufto an other.Http2ConnectionDecoderdecoder()voidderegister(ChannelHandlerContext ctx, ChannelPromise promise)Called once a deregister operation is made from the current registeredEventLoop.voiddisconnect(ChannelHandlerContext ctx, ChannelPromise promise)Called once a disconnect operation is made.private voiddoGracefulShutdown(ChannelHandlerContext ctx, ChannelFuture future, ChannelPromise promise)Http2ConnectionEncoderencoder()voidexceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause)HandlesHttp2Exceptionobjects that were thrown from other handlers.voidflush(ChannelHandlerContext ctx)Called once a flush operation is made.protected Http2FrameWriterframeWriter()ChannelFuturegoAway(ChannelHandlerContext ctx, int lastStreamId, long errorCode, ByteBuf debugData, ChannelPromise promise)Prevents the peer from creating streams and close the connection iferrorCodeis notHttp2Error.NO_ERROR.private ChannelFuturegoAway(ChannelHandlerContext ctx, Http2Exception cause, ChannelPromise promise)Close the remote endpoint with with aGO_AWAYframe.longgracefulShutdownTimeoutMillis()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.voidgracefulShutdownTimeoutMillis(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.voidhandlerAdded(ChannelHandlerContext ctx)Do nothing by default, sub-classes may override this method.protected voidhandlerRemoved0(ChannelHandlerContext ctx)Gets called after theByteToMessageDecoderwas removed from the actual context and it doesn't handle events anymore.protected voidhandleServerHeaderDecodeSizeError(ChannelHandlerContext ctx, Http2Stream stream)Notifies client that this server has received headers that are larger than what it is willing to accept.protected booleanisGracefulShutdownComplete()Called by the graceful shutdown logic to determine when it is safe to close the connection.private ChannelFutureListenernewClosingChannelFutureListener(ChannelHandlerContext ctx, ChannelPromise promise)protected voidonConnectionError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception http2Ex)Handler for a connection error.voidonError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause)Central handler for all exceptions caught during HTTP/2 processing.voidonHttpClientUpgrade()Handles the client-side (cleartext) upgrade from HTTP to HTTP/2.voidonHttpServerUpgrade(Http2Settings settings)Handles the server-side (cleartext) upgrade from HTTP to HTTP/2.protected voidonStreamError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception.StreamException http2Ex)Handler for a stream error.private booleanprefaceSent()private static voidprocessGoAwayWriteResult(ChannelHandlerContext ctx, int lastStreamId, long errorCode, ByteBuf debugData, ChannelFuture future)private voidprocessRstStreamWriteResult(ChannelHandlerContext ctx, Http2Stream stream, ChannelFuture future)voidread(ChannelHandlerContext ctx)InterceptsChannelHandlerContext.read().ChannelFutureresetStream(ChannelHandlerContext ctx, int streamId, long errorCode, ChannelPromise promise)Ensure the stream identified bystreamIdis reset.private ChannelFutureresetStream(ChannelHandlerContext ctx, Http2Stream stream, long errorCode, ChannelPromise promise)private ChannelFutureresetUnknownStream(ChannelHandlerContext ctx, int streamId, long errorCode, ChannelPromise promise)Sends aRST_STREAMframe even if we don't know about the stream.voidwrite(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)Called once a write operation is made.-
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 class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.netty.channel.ChannelHandler
handlerRemoved
-
-
-
-
Field Detail
-
logger
private static final InternalLogger logger
-
HEADERS_TOO_LARGE_HEADERS
private static final Http2Headers HEADERS_TOO_LARGE_HEADERS
-
HTTP_1_X_BUF
private static final ByteBuf HTTP_1_X_BUF
-
decoder
private final Http2ConnectionDecoder decoder
-
encoder
private final Http2ConnectionEncoder encoder
-
initialSettings
private final Http2Settings initialSettings
-
decoupleCloseAndGoAway
private final boolean decoupleCloseAndGoAway
-
closeListener
private ChannelFutureListener closeListener
-
byteDecoder
private Http2ConnectionHandler.BaseDecoder byteDecoder
-
gracefulShutdownTimeoutMillis
private long gracefulShutdownTimeoutMillis
-
-
Constructor Detail
-
Http2ConnectionHandler
protected Http2ConnectionHandler(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings)
-
Http2ConnectionHandler
protected Http2ConnectionHandler(Http2ConnectionDecoder decoder, Http2ConnectionEncoder encoder, Http2Settings initialSettings, boolean decoupleCloseAndGoAway)
-
-
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.
-
connection
public Http2Connection connection()
-
decoder
public Http2ConnectionDecoder decoder()
-
encoder
public Http2ConnectionEncoder encoder()
-
prefaceSent
private boolean prefaceSent()
-
onHttpClientUpgrade
public void onHttpClientUpgrade() throws Http2ExceptionHandles 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(ChannelHandlerContext ctx)
Description copied from interface:ChannelOutboundHandlerCalled once a flush operation is made. The flush operation will try to flush out all previous written messages that are pending.- Specified by:
flushin interfaceChannelOutboundHandler- Parameters:
ctx- theChannelHandlerContextfor which the flush operation is made
-
handlerAdded
public void handlerAdded(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from class:ChannelHandlerAdapterDo nothing by default, sub-classes may override this method.- Specified by:
handlerAddedin interfaceChannelHandler- Overrides:
handlerAddedin classChannelHandlerAdapter- Throws:
java.lang.Exception
-
handlerRemoved0
protected void handlerRemoved0(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from class:ByteToMessageDecoderGets called after theByteToMessageDecoderwas removed from the actual context and it doesn't handle events anymore.- Overrides:
handlerRemoved0in classByteToMessageDecoder- Throws:
java.lang.Exception
-
channelActive
public void channelActive(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireChannelActive()to forward to the nextChannelInboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
channelActivein interfaceChannelInboundHandler- Overrides:
channelActivein classChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
channelInactive
public void channelInactive(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireChannelInactive()to forward to the nextChannelInboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
channelInactivein interfaceChannelInboundHandler- Overrides:
channelInactivein classByteToMessageDecoder- Throws:
java.lang.Exception
-
channelWritabilityChanged
public void channelWritabilityChanged(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireChannelWritabilityChanged()to forward to the nextChannelInboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
channelWritabilityChangedin interfaceChannelInboundHandler- Overrides:
channelWritabilityChangedin classChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
decode
protected void decode(ChannelHandlerContext ctx, ByteBuf in, java.util.List<java.lang.Object> out) throws java.lang.Exception
Description copied from class:ByteToMessageDecoderDecode the from oneByteBufto an other. This method will be called till either the inputByteBufhas nothing to read when return from this method or till nothing was read from the inputByteBuf.- Specified by:
decodein classByteToMessageDecoder- Parameters:
ctx- theChannelHandlerContextwhich thisByteToMessageDecoderbelongs toin- theByteBuffrom which to read dataout- theListto which decoded messages should be added- Throws:
java.lang.Exception- is thrown if an error occurs
-
bind
public void bind(ChannelHandlerContext ctx, java.net.SocketAddress localAddress, ChannelPromise promise) throws java.lang.Exception
Description copied from interface:ChannelOutboundHandlerCalled once a bind operation is made.- Specified by:
bindin interfaceChannelOutboundHandler- Parameters:
ctx- theChannelHandlerContextfor which the bind operation is madelocalAddress- theSocketAddressto which it should boundpromise- theChannelPromiseto notify once the operation completes- Throws:
java.lang.Exception- thrown if an error occurs
-
connect
public void connect(ChannelHandlerContext ctx, java.net.SocketAddress remoteAddress, java.net.SocketAddress localAddress, ChannelPromise promise) throws java.lang.Exception
Description copied from interface:ChannelOutboundHandlerCalled once a connect operation is made.- Specified by:
connectin interfaceChannelOutboundHandler- Parameters:
ctx- theChannelHandlerContextfor which the connect operation is maderemoteAddress- theSocketAddressto which it should connectlocalAddress- theSocketAddresswhich is used as source on connectpromise- theChannelPromiseto notify once the operation completes- Throws:
java.lang.Exception- thrown if an error occurs
-
disconnect
public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) throws java.lang.Exception
Description copied from interface:ChannelOutboundHandlerCalled once a disconnect operation is made.- Specified by:
disconnectin interfaceChannelOutboundHandler- Parameters:
ctx- theChannelHandlerContextfor which the disconnect operation is madepromise- theChannelPromiseto notify once the operation completes- Throws:
java.lang.Exception- thrown if an error occurs
-
close
public void close(ChannelHandlerContext ctx, ChannelPromise promise) throws java.lang.Exception
Description copied from interface:ChannelOutboundHandlerCalled once a close operation is made.- Specified by:
closein interfaceChannelOutboundHandler- Parameters:
ctx- theChannelHandlerContextfor which the close operation is madepromise- theChannelPromiseto notify once the operation completes- Throws:
java.lang.Exception- thrown if an error occurs
-
newClosingChannelFutureListener
private ChannelFutureListener newClosingChannelFutureListener(ChannelHandlerContext ctx, ChannelPromise promise)
-
doGracefulShutdown
private void doGracefulShutdown(ChannelHandlerContext ctx, ChannelFuture future, ChannelPromise promise)
-
deregister
public void deregister(ChannelHandlerContext ctx, ChannelPromise promise) throws java.lang.Exception
Description copied from interface:ChannelOutboundHandlerCalled once a deregister operation is made from the current registeredEventLoop.- Specified by:
deregisterin interfaceChannelOutboundHandler- Parameters:
ctx- theChannelHandlerContextfor which the close operation is madepromise- theChannelPromiseto notify once the operation completes- Throws:
java.lang.Exception- thrown if an error occurs
-
read
public void read(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from interface:ChannelOutboundHandlerInterceptsChannelHandlerContext.read().- Specified by:
readin interfaceChannelOutboundHandler- Throws:
java.lang.Exception
-
write
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise) throws java.lang.Exception
Description copied from interface:ChannelOutboundHandlerCalled once a write operation is made. The write operation will write the messages through theChannelPipeline. Those are then ready to be flushed to the actualChannelonceChannel.flush()is called- Specified by:
writein interfaceChannelOutboundHandler- Parameters:
ctx- theChannelHandlerContextfor which the write operation is mademsg- the message to writepromise- theChannelPromiseto notify once the operation completes- Throws:
java.lang.Exception- thrown if an error occurs
-
channelReadComplete
public void channelReadComplete(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireChannelReadComplete()to forward to the nextChannelInboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
channelReadCompletein interfaceChannelInboundHandler- Overrides:
channelReadCompletein classByteToMessageDecoder- Throws:
java.lang.Exception
-
channelReadComplete0
final void channelReadComplete0(ChannelHandlerContext ctx)
-
exceptionCaught
public void exceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause) throws java.lang.Exception
HandlesHttp2Exceptionobjects that were thrown from other handlers. Ignores all other exceptions.- Specified by:
exceptionCaughtin interfaceChannelHandler- Specified by:
exceptionCaughtin interfaceChannelInboundHandler- Overrides:
exceptionCaughtin classChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
closeStreamLocal
public void closeStreamLocal(Http2Stream stream, 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:
closeStreamLocalin interfaceHttp2LifecycleManager- 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, 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:
closeStreamRemotein interfaceHttp2LifecycleManager- Parameters:
stream- the stream to be half closed.future- If closing, the future after which to close the channel.
-
closeStream
public void closeStream(Http2Stream stream, ChannelFuture future)
Description copied from interface:Http2LifecycleManagerCloses and deactivates the givenstream. A listener is also attached tofutureand upon completion the underlying channel will be closed ifHttp2Connection.numActiveStreams()is 0.- Specified by:
closeStreamin interfaceHttp2LifecycleManager- Parameters:
stream- the stream to be closed and deactivated.future- when completed ifHttp2Connection.numActiveStreams()is 0 then the underlying channel will be closed.
-
onError
public void onError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause)
Central handler for all exceptions caught during HTTP/2 processing.- Specified by:
onErrorin interfaceHttp2LifecycleManager- Parameters:
ctx- The context used for communication and buffer allocation if necessary.outbound-trueif the error was caused by an outbound operation and so the correspondingChannelPromisewas 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. Returnstrueif 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(ChannelHandlerContext ctx, boolean outbound, java.lang.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 contextoutbound-trueif the error was caused by an outbound operation.cause- the exception that was caughthttp2Ex- theHttp2Exceptionthat is embedded in the causality chain. This may benullif it's an unknown exception.
-
onStreamError
protected void onStreamError(ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, Http2Exception.StreamException http2Ex)
Handler for a stream error. Sends aRST_STREAMframe to the remote endpoint and closes the stream.- Parameters:
ctx- the channel contextoutbound-trueif the error was caused by an outbound operation.cause- the exception that was caughthttp2Ex- theHttp2Exception.StreamExceptionthat is embedded in the causality chain.
-
handleServerHeaderDecodeSizeError
protected void handleServerHeaderDecodeSizeError(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 contextstream- the Http2Stream on which the header was received
-
frameWriter
protected Http2FrameWriter frameWriter()
-
resetUnknownStream
private ChannelFuture resetUnknownStream(ChannelHandlerContext ctx, int streamId, long errorCode, ChannelPromise promise)
Sends aRST_STREAMframe even if we don't know about the stream. This error condition is most likely triggered by the first frame of a stream being invalid. That is, there was an error reading the frame before we could create a new stream.
-
resetStream
public ChannelFuture resetStream(ChannelHandlerContext ctx, int streamId, long errorCode, ChannelPromise promise)
Description copied from interface:Http2LifecycleManagerEnsure the stream identified bystreamIdis reset. If our local state does not indicate the stream has been reset yet then aRST_STREAMwill 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:
resetStreamin interfaceHttp2LifecycleManager- 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. SeeHttp2Error.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_STREAMframe has been sent to the peer. If the stream state has already been updated and aRST_STREAMframe has been sent then the return status may indicate success immediately.
-
resetStream
private ChannelFuture resetStream(ChannelHandlerContext ctx, Http2Stream stream, long errorCode, ChannelPromise promise)
-
goAway
public ChannelFuture goAway(ChannelHandlerContext ctx, int lastStreamId, long errorCode, ByteBuf debugData, ChannelPromise promise)
Description copied from interface:Http2LifecycleManagerPrevents the peer from creating streams and close the connection iferrorCodeis notHttp2Error.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 withstream identifier <= lastStreamId. This may result in sending aGO_AWAYframe (assuming we have not already sent one withLast-Stream-ID <= lastStreamId), or may just return success if aGO_AWAYhas previously been sent.- Specified by:
goAwayin interfaceHttp2LifecycleManager- 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. SeeHttp2Error.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_AWAYframe has been sent to the peer. If the stream state has already been updated and aGO_AWAYframe has been sent then the return status may indicate success immediately.
-
checkCloseConnection
private void checkCloseConnection(ChannelFuture future)
Closes the connection if the graceful shutdown process has completed.- Parameters:
future- Represents the status that will be passed to thecloseListener.
-
goAway
private ChannelFuture goAway(ChannelHandlerContext ctx, Http2Exception cause, ChannelPromise promise)
Close the remote endpoint with with aGO_AWAYframe. Does not flush immediately, this is the responsibility of the caller.
-
processRstStreamWriteResult
private void processRstStreamWriteResult(ChannelHandlerContext ctx, Http2Stream stream, ChannelFuture future)
-
closeConnectionOnError
private void closeConnectionOnError(ChannelHandlerContext ctx, ChannelFuture future)
-
clientPrefaceString
private static ByteBuf clientPrefaceString(Http2Connection connection)
Returns the client preface string if this is a client connection, otherwise returnsnull.
-
processGoAwayWriteResult
private static void processGoAwayWriteResult(ChannelHandlerContext ctx, int lastStreamId, long errorCode, ByteBuf debugData, ChannelFuture future)
-
-