Package org.apache.coyote.http2
Class Http2AsyncUpgradeHandler
java.lang.Object
org.apache.coyote.http2.Http2AsyncUpgradeHandler
- All Implemented Interfaces:
HttpUpgradeHandler,InternalHttpUpgradeHandler
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classprotected class -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final AtomicIntegerprotected final Stringprotected static final intprotected static final intprotected static final byte[]protected static final org.apache.coyote.http2.HeaderSinkprotected final org.apache.coyote.http2.ConnectionSettingsLocalLocal settings are settings defined by Tomcat and sent to the client that the client must use when communicating with Tomcat.protected static final Logprotected static final byte[]protected static final byte[]protected final Http2Protocolprotected static final byte[]protected static final StringManagerprotected final SocketWrapperBase<?> protected final UserDataHelperprotected final Conditionprotected final Lock -
Constructor Summary
ConstructorsConstructorDescriptionHttp2AsyncUpgradeHandler(Http2Protocol protocol, Adapter adapter, Request coyoteRequest, SocketWrapperBase<?> socketWrapper) -
Method Summary
Modifier and TypeMethodDescriptionprotected byte[]protected voidvoiddestroy()This method is called after the upgraded connection has been closed.protected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffersdoWriteHeaders(org.apache.coyote.http2.Stream stream, int pushedStreamId, MimeHeaders mimeHeaders, boolean endOfStream, int payloadSize) voidendRequestBodyFrame(int streamId, int dataLength) default booleanfill(boolean block, byte[] data) booleanfill(boolean block, byte[] data, int offset, int length) default booleanfill(boolean block, ByteBuffer data, int len) protected final Stringprotected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffersgetHeaderFrameBuffers(int initialPayloadSize) protected org.apache.coyote.http2.HpackEncoderintprotected org.apache.coyote.http2.Http2Parserprotected org.apache.coyote.http2.Http2UpgradeHandler.PingManagervoidprotected voidbooleanvoidheadersContinue(int payloadSize, boolean endOfHeaders) voidheadersEnd(int streamId, boolean endOfStream) org.apache.coyote.http2.HpackDecoder.HeaderEmitterheadersStart(int streamId, boolean headersEndStream) voidincreaseOverheadCount(org.apache.coyote.http2.FrameType frameType) protected voidincrementWindowSize(int increment) voidincrementWindowSize(int streamId, int increment) voidinit(WebConnection webConnection) This method is called once the request/response pair whereHttpServletRequest.upgrade(Class)is called has completed processing and is the point where control of the connection passes from the container to theHttpUpgradeHandler.voidonSwallowedDataFramePayload(int streamId, int swallowedDataBytesCount) voidonSwallowedUnknownFrame(int streamId, int frameTypeId, int flags, int size) voidpause()Pause processing for the connection.voidpingReceive(byte[] payload, boolean ack) voidpriorityUpdate(int prioritizedStreamID, Priority p) protected voidprocessConnection(WebConnection webConnection, org.apache.coyote.http2.Stream stream) protected SendfileStateprocessSendfile(org.apache.coyote.http2.SendfileData sendfile) Process send file (if supported) for the given stream.protected voidprocessStreamOnContainerThread(org.apache.coyote.http2.Stream stream) protected voidvoidreceivedEndOfStream(int streamId) voidreprioritise(int streamId, int parentStreamId, boolean exclusive, int weight) Deprecated.Unused.voidreset(int streamId, long errorCode) protected voidsentEndOfStream(org.apache.coyote.http2.Stream stream) protected voidsetConnectionTimeoutForStreamCount(int streamCount) voidsetSocketWrapper(SocketWrapperBase<?> wrapper) Associate with the specified socket.voidsetSslSupport(SSLSupport sslSupport) Associate with the specified SSL support.voidsetting(org.apache.coyote.http2.Setting setting, long value) voidsettingsEnd(boolean ack) startRequestBodyFrame(int streamId, int payloadSize, boolean endOfStream) voidtimeoutAsync(long now) Check for a possible timeout.upgradeDispatch(SocketEvent status) Process the specified event.protected voidwriteGoAwayFrame(int maxStreamId, long errorCode, byte[] debugMsg) protected voidWrite the initial settings frame and any necessary supporting frames.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.coyote.http11.upgrade.InternalHttpUpgradeHandler
getUpgradeInfo
-
Field Details
-
log
-
sm
-
FLAG_END_OF_STREAM
protected static final int FLAG_END_OF_STREAM- See Also:
-
FLAG_END_OF_HEADERS
protected static final int FLAG_END_OF_HEADERS- See Also:
-
PING
protected static final byte[] PING -
PING_ACK
protected static final byte[] PING_ACK -
SETTINGS_ACK
protected static final byte[] SETTINGS_ACK -
GOAWAY
protected static final byte[] GOAWAY -
HEADER_SINK
protected static final org.apache.coyote.http2.HeaderSink HEADER_SINK -
connectionId
-
protocol
-
socketWrapper
-
localSettings
protected final org.apache.coyote.http2.ConnectionSettingsLocal localSettingsLocal settings are settings defined by Tomcat and sent to the client that the client must use when communicating with Tomcat. -
activeRemoteStreamCount
-
userDataHelper
-
windowAllocationLock
-
windowAllocationAvailable
-
-
Constructor Details
-
Http2AsyncUpgradeHandler
public Http2AsyncUpgradeHandler(Http2Protocol protocol, Adapter adapter, Request coyoteRequest, SocketWrapperBase<?> socketWrapper)
-
-
Method Details
-
getParser
-
getPingManager
protected org.apache.coyote.http2.Http2UpgradeHandler.PingManager getPingManager() -
hasAsyncIO
public boolean hasAsyncIO()- Returns:
trueif able to process asynchronous IO, default isfalse
-
processConnection
protected void processConnection(WebConnection webConnection, org.apache.coyote.http2.Stream stream) -
writeSettings
protected void writeSettings()Write the initial settings frame and any necessary supporting frames. If the initial settings increase the initial window size, it will also be necessary to send a WINDOW_UPDATE frame to increase the size of the flow control window for the connection (stream 0). -
writeGoAwayFrame
protected void writeGoAwayFrame(int maxStreamId, long errorCode, byte[] debugMsg) throws IOException - Throws:
IOException
-
getHeaderFrameBuffers
protected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffers getHeaderFrameBuffers(int initialPayloadSize) -
settingsEnd
- Throws:
IOException
-
processSendfile
Process send file (if supported) for the given stream. The appropriate request attributes should be set before calling this method.- Parameters:
sendfile- The stream and associated data to process- Returns:
- The result of the send file processing
-
init
Description copied from interface:jakarta.servlet.http.HttpUpgradeHandlerThis method is called once the request/response pair whereHttpServletRequest.upgrade(Class)is called has completed processing and is the point where control of the connection passes from the container to theHttpUpgradeHandler.- Specified by:
initin interfaceHttpUpgradeHandler- Parameters:
webConnection- The connection that has been upgraded
-
processStreamOnContainerThread
protected void processStreamOnContainerThread(org.apache.coyote.http2.Stream stream) -
decrementActiveRemoteStreamCount
protected void decrementActiveRemoteStreamCount() -
setSocketWrapper
Description copied from interface:InternalHttpUpgradeHandlerAssociate with the specified socket.- Specified by:
setSocketWrapperin interfaceInternalHttpUpgradeHandler- Parameters:
wrapper- the socket
-
setSslSupport
Description copied from interface:InternalHttpUpgradeHandlerAssociate with the specified SSL support.- Specified by:
setSslSupportin interfaceInternalHttpUpgradeHandler- Parameters:
sslSupport- the SSL support
-
upgradeDispatch
Description copied from interface:InternalHttpUpgradeHandlerProcess the specified event.- Specified by:
upgradeDispatchin interfaceInternalHttpUpgradeHandler- Parameters:
status- the event- Returns:
- the status following the event
-
setConnectionTimeoutForStreamCount
protected void setConnectionTimeoutForStreamCount(int streamCount) -
timeoutAsync
public void timeoutAsync(long now) Description copied from interface:InternalHttpUpgradeHandlerCheck for a possible timeout.- Specified by:
timeoutAsyncin interfaceInternalHttpUpgradeHandler- Parameters:
now- the time to use for the timeout check
-
pause
public void pause()Description copied from interface:InternalHttpUpgradeHandlerPause processing for the connection.- Specified by:
pausein interfaceInternalHttpUpgradeHandler
-
destroy
public void destroy()Description copied from interface:jakarta.servlet.http.HttpUpgradeHandlerThis method is called after the upgraded connection has been closed.- Specified by:
destroyin interfaceHttpUpgradeHandler
-
createWindowUpdateForSettings
protected byte[] createWindowUpdateForSettings()- Returns:
- The WINDOW_UPDATE frame if one is required or an empty array if no WINDOW_UPDATE is required.
-
doWriteHeaders
protected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffers doWriteHeaders(org.apache.coyote.http2.Stream stream, int pushedStreamId, MimeHeaders mimeHeaders, boolean endOfStream, int payloadSize) throws IOException - Throws:
IOException
-
getHpackEncoder
protected org.apache.coyote.http2.HpackEncoder getHpackEncoder() -
sentEndOfStream
protected void sentEndOfStream(org.apache.coyote.http2.Stream stream) -
handleAppInitiatedIOException
- Throws:
IOException
-
processWrites
- Throws:
IOException
-
incrementWindowSize
protected void incrementWindowSize(int increment) throws org.apache.coyote.http2.Http2Exception - Throws:
org.apache.coyote.http2.Http2Exception
-
getConnectionId
-
increaseOverheadCount
public void increaseOverheadCount(org.apache.coyote.http2.FrameType frameType) -
fill
- Throws:
IOException
-
getMaxFrameSize
public int getMaxFrameSize() -
getHpackDecoder
-
startRequestBodyFrame
public ByteBuffer startRequestBodyFrame(int streamId, int payloadSize, boolean endOfStream) throws org.apache.coyote.http2.Http2Exception - Throws:
org.apache.coyote.http2.Http2Exception
-
endRequestBodyFrame
public void endRequestBodyFrame(int streamId, int dataLength) throws org.apache.coyote.http2.Http2Exception, IOException - Throws:
org.apache.coyote.http2.Http2ExceptionIOException
-
onSwallowedDataFramePayload
public void onSwallowedDataFramePayload(int streamId, int swallowedDataBytesCount) throws IOException - Throws:
IOException
-
headersStart
public org.apache.coyote.http2.HpackDecoder.HeaderEmitter headersStart(int streamId, boolean headersEndStream) throws org.apache.coyote.http2.Http2Exception, IOException - Throws:
org.apache.coyote.http2.Http2ExceptionIOException
-
reprioritise
@Deprecated public void reprioritise(int streamId, int parentStreamId, boolean exclusive, int weight) throws org.apache.coyote.http2.Http2Exception Deprecated.Unused. Will be removed in Tomcat 11 onwards.Unused - NO-OP.- Parameters:
streamId- UnusedparentStreamId- Unusedexclusive- Unusedweight- Unused- Throws:
org.apache.coyote.http2.Http2Exception- Never thrown
-
headersContinue
public void headersContinue(int payloadSize, boolean endOfHeaders) -
headersEnd
public void headersEnd(int streamId, boolean endOfStream) throws org.apache.coyote.http2.Http2Exception - Throws:
org.apache.coyote.http2.Http2Exception
-
receivedEndOfStream
public void receivedEndOfStream(int streamId) throws org.apache.coyote.http2.ConnectionException - Throws:
org.apache.coyote.http2.ConnectionException
-
reset
public void reset(int streamId, long errorCode) throws org.apache.coyote.http2.Http2Exception - Throws:
org.apache.coyote.http2.Http2Exception
-
setting
public void setting(org.apache.coyote.http2.Setting setting, long value) throws org.apache.coyote.http2.ConnectionException - Throws:
org.apache.coyote.http2.ConnectionException
-
pingReceive
- Throws:
IOException
-
goaway
-
incrementWindowSize
public void incrementWindowSize(int streamId, int increment) throws org.apache.coyote.http2.Http2Exception - Throws:
org.apache.coyote.http2.Http2Exception
-
priorityUpdate
public void priorityUpdate(int prioritizedStreamID, Priority p) throws org.apache.coyote.http2.Http2Exception - Throws:
org.apache.coyote.http2.Http2Exception
-
onSwallowedUnknownFrame
public void onSwallowedUnknownFrame(int streamId, int frameTypeId, int flags, int size) throws IOException - Throws:
IOException
-
getServletConnection
-
fill
- Throws:
IOException
-
fill
- Throws:
IOException
-