Package org.apache.coyote.http2
Class Http2AsyncUpgradeHandler
java.lang.Object
org.apache.coyote.http2.Http2AsyncUpgradeHandler
- All Implemented Interfaces:
HttpUpgradeHandler
,InternalHttpUpgradeHandler
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected class
protected class
-
Field Summary
Modifier and TypeFieldDescriptionprotected final AtomicInteger
protected final String
protected static final int
protected static final int
protected static final byte[]
protected static final org.apache.coyote.http2.HeaderSink
protected final org.apache.coyote.http2.ConnectionSettingsLocal
Local settings are settings defined by Tomcat and sent to the client that the client must use when communicating with Tomcat.protected static final Log
protected static final byte[]
protected static final byte[]
protected final Http2Protocol
protected static final byte[]
protected static final StringManager
protected final SocketWrapperBase
<?> protected final UserDataHelper
protected final Condition
protected final Lock
-
Constructor Summary
ConstructorDescriptionHttp2AsyncUpgradeHandler
(Http2Protocol protocol, Adapter adapter, Request coyoteRequest, SocketWrapperBase<?> socketWrapper) -
Method Summary
Modifier and TypeMethodDescriptionprotected byte[]
protected void
decrementActiveRemoteStreamCount
(org.apache.coyote.http2.Stream stream) void
destroy()
This method is called after the upgraded connection has been closed.protected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffers
doWriteHeaders
(org.apache.coyote.http2.Stream stream, int pushedStreamId, MimeHeaders mimeHeaders, boolean endOfStream, int payloadSize) void
endRequestBodyFrame
(int streamId, int dataLength) default boolean
fill
(boolean block, byte[] data) boolean
fill
(boolean block, byte[] data, int offset, int length) default boolean
fill
(boolean block, ByteBuffer data, int len) protected final String
protected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffers
getHeaderFrameBuffers
(int initialPayloadSize) protected org.apache.coyote.http2.HpackEncoder
int
protected org.apache.coyote.http2.Http2Parser
protected org.apache.coyote.http2.Http2UpgradeHandler.PingManager
void
protected void
boolean
void
headersContinue
(int payloadSize, boolean endOfHeaders) void
headersEnd
(int streamId, boolean endOfStream) org.apache.coyote.http2.HpackDecoder.HeaderEmitter
headersStart
(int streamId, boolean headersEndStream) void
increaseOverheadCount
(org.apache.coyote.http2.FrameType frameType) protected void
incrementWindowSize
(int increment) void
incrementWindowSize
(int streamId, int increment) void
init
(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
.void
onSwallowedDataFramePayload
(int streamId, int swallowedDataBytesCount) void
onSwallowedUnknownFrame
(int streamId, int frameTypeId, int flags, int size) void
pause()
Pause processing for the connection.void
pingReceive
(byte[] payload, boolean ack) void
priorityUpdate
(int prioritizedStreamID, Priority p) protected void
processConnection
(WebConnection webConnection, org.apache.coyote.http2.Stream stream) protected SendfileState
processSendfile
(org.apache.coyote.http2.SendfileData sendfile) Process send file (if supported) for the given stream.protected void
processStreamOnContainerThread
(org.apache.coyote.http2.Stream stream) protected void
void
receivedEndOfStream
(int streamId) void
reprioritise
(int streamId, int parentStreamId, boolean exclusive, int weight) Deprecated.Unused.void
reset
(int streamId, long errorCode) protected void
sentEndOfStream
(org.apache.coyote.http2.Stream stream) protected void
setConnectionTimeoutForStreamCount
(int streamCount) void
setSocketWrapper
(SocketWrapperBase<?> wrapper) Associate with the specified socket.void
setSslSupport
(SSLSupport sslSupport) Associate with the specified SSL support.void
setting
(org.apache.coyote.http2.Setting setting, long value) void
settingsEnd
(boolean ack) startRequestBodyFrame
(int streamId, int payloadSize, boolean endOfStream) void
timeoutAsync
(long now) Check for a possible timeout.upgradeDispatch
(SocketEvent status) Process the specified event.protected void
writeGoAwayFrame
(int maxStreamId, long errorCode, byte[] debugMsg) protected void
Write 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, wait
Methods 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:
true
if 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.HttpUpgradeHandler
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
.- Specified by:
init
in interfaceHttpUpgradeHandler
- Parameters:
webConnection
- The connection that has been upgraded
-
processStreamOnContainerThread
protected void processStreamOnContainerThread(org.apache.coyote.http2.Stream stream) -
decrementActiveRemoteStreamCount
protected void decrementActiveRemoteStreamCount(org.apache.coyote.http2.Stream stream) -
setSocketWrapper
Description copied from interface:InternalHttpUpgradeHandler
Associate with the specified socket.- Specified by:
setSocketWrapper
in interfaceInternalHttpUpgradeHandler
- Parameters:
wrapper
- the socket
-
setSslSupport
Description copied from interface:InternalHttpUpgradeHandler
Associate with the specified SSL support.- Specified by:
setSslSupport
in interfaceInternalHttpUpgradeHandler
- Parameters:
sslSupport
- the SSL support
-
upgradeDispatch
Description copied from interface:InternalHttpUpgradeHandler
Process the specified event.- Specified by:
upgradeDispatch
in 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:InternalHttpUpgradeHandler
Check for a possible timeout.- Specified by:
timeoutAsync
in interfaceInternalHttpUpgradeHandler
- Parameters:
now
- the time to use for the timeout check
-
pause
public void pause()Description copied from interface:InternalHttpUpgradeHandler
Pause processing for the connection.- Specified by:
pause
in interfaceInternalHttpUpgradeHandler
-
destroy
public void destroy()Description copied from interface:jakarta.servlet.http.HttpUpgradeHandler
This method is called after the upgraded connection has been closed.- Specified by:
destroy
in 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.Http2Exception
IOException
-
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.Http2Exception
IOException
-
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
-