Package org.apache.coyote.http2
Class Http2AsyncUpgradeHandler
- java.lang.Object
-
- org.apache.coyote.http2.Http2AsyncUpgradeHandler
-
- All Implemented Interfaces:
HttpUpgradeHandler,InternalHttpUpgradeHandler
public class Http2AsyncUpgradeHandler extends Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classHttp2AsyncUpgradeHandler.AsyncPingManagerprotected classHttp2AsyncUpgradeHandler.SendfileCompletionHandler
-
Field Summary
Fields Modifier and Type Field Description protected AtomicIntegeractiveRemoteStreamCountprotected StringconnectionIdprotected static intFLAG_END_OF_HEADERSprotected static intFLAG_END_OF_STREAMprotected static byte[]GOAWAYprotected org.apache.coyote.http2.ConnectionSettingsLocallocalSettingsLocal settings are settings defined by Tomcat and sent to the client that the client must use when communicating with Tomcat.protected static Loglogprotected static byte[]PINGprotected static byte[]PING_ACKprotected Http2Protocolprotocolprotected static byte[]SETTINGS_ACKprotected static StringManagersmprotected SocketWrapperBase<?>socketWrapper
-
Constructor Summary
Constructors Constructor Description Http2AsyncUpgradeHandler(Http2Protocol protocol, Adapter adapter, Request coyoteRequest)
-
Method Summary
All Methods Instance Methods Concrete Methods Default Methods Modifier and Type Method Description protected byte[]createWindowUpdateForSettings()voiddestroy()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 StringgetConnectionId()protected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffersgetHeaderFrameBuffers(int initialPayloadSize)HpackDecodergetHpackDecoder()protected org.apache.coyote.http2.HpackEncodergetHpackEncoder()intgetMaxFrameSize()protected org.apache.coyote.http2.Http2ParsergetParser(String connectionId)protected org.apache.coyote.http2.Http2UpgradeHandler.PingManagergetPingManager()protected intgetWeight()voidgoaway(int lastStreamId, long errorCode, String debugData)protected voidhandleAppInitiatedIOException(IOException ioe)booleanhasAsyncIO()voidheadersContinue(int payloadSize, boolean endOfHeaders)voidheadersEnd(int streamId)org.apache.coyote.http2.HpackDecoder.HeaderEmitterheadersStart(int streamId, boolean headersEndStream)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()voidpingReceive(byte[] payload, boolean ack)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 voidprocessWrites()voidreceivedEndOfStream(int streamId)voidreprioritise(int streamId, int parentStreamId, boolean exclusive, int weight)voidreset(int streamId, long errorCode)protected voidsetConnectionTimeoutForStreamCount(int streamCount)voidsetSocketWrapper(SocketWrapperBase<?> wrapper)voidsetSslSupport(SSLSupport sslSupport)voidsetting(org.apache.coyote.http2.Setting setting, long value)voidsettingsEnd(boolean ack)ByteBufferstartRequestBodyFrame(int streamId, int payloadSize, boolean endOfStream)voidtimeoutAsync(long now)AbstractEndpoint.Handler.SocketStateupgradeDispatch(SocketEvent status)protected voidwriteGoAwayFrame(int maxStreamId, long errorCode, byte[] debugMsg)protected voidwriteSettings()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 Detail
-
log
protected static final Log log
-
sm
protected static final StringManager sm
-
FLAG_END_OF_STREAM
protected static final int FLAG_END_OF_STREAM
- See Also:
- Constant Field Values
-
FLAG_END_OF_HEADERS
protected static final int FLAG_END_OF_HEADERS
- See Also:
- Constant Field Values
-
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
-
connectionId
protected final String connectionId
-
protocol
protected final Http2Protocol protocol
-
socketWrapper
protected volatile SocketWrapperBase<?> socketWrapper
-
localSettings
protected final org.apache.coyote.http2.ConnectionSettingsLocal localSettings
Local settings are settings defined by Tomcat and sent to the client that the client must use when communicating with Tomcat.
-
activeRemoteStreamCount
protected final AtomicInteger activeRemoteStreamCount
-
-
Constructor Detail
-
Http2AsyncUpgradeHandler
public Http2AsyncUpgradeHandler(Http2Protocol protocol, Adapter adapter, Request coyoteRequest)
-
-
Method Detail
-
getParser
protected org.apache.coyote.http2.Http2Parser getParser(String connectionId)
-
getPingManager
protected org.apache.coyote.http2.Http2UpgradeHandler.PingManager getPingManager()
-
hasAsyncIO
public boolean hasAsyncIO()
-
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
public void settingsEnd(boolean ack) throws IOException- Throws:
IOException
-
processSendfile
protected SendfileState processSendfile(org.apache.coyote.http2.SendfileData sendfile)
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
public void init(WebConnection webConnection)
Description copied from interface:javax.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)
-
setSocketWrapper
public void setSocketWrapper(SocketWrapperBase<?> wrapper)
- Specified by:
setSocketWrapperin interfaceInternalHttpUpgradeHandler
-
setSslSupport
public void setSslSupport(SSLSupport sslSupport)
- Specified by:
setSslSupportin interfaceInternalHttpUpgradeHandler
-
upgradeDispatch
public AbstractEndpoint.Handler.SocketState upgradeDispatch(SocketEvent status)
- Specified by:
upgradeDispatchin interfaceInternalHttpUpgradeHandler
-
setConnectionTimeoutForStreamCount
protected void setConnectionTimeoutForStreamCount(int streamCount)
-
timeoutAsync
public void timeoutAsync(long now)
- Specified by:
timeoutAsyncin interfaceInternalHttpUpgradeHandler
-
pause
public void pause()
- Specified by:
pausein interfaceInternalHttpUpgradeHandler
-
destroy
public void destroy()
Description copied from interface:javax.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()
-
handleAppInitiatedIOException
protected void handleAppInitiatedIOException(IOException ioe) throws IOException
- Throws:
IOException
-
processWrites
protected void processWrites() throws IOException- Throws:
IOException
-
incrementWindowSize
protected void incrementWindowSize(int increment) throws org.apache.coyote.http2.Http2Exception- Throws:
org.apache.coyote.http2.Http2Exception
-
getConnectionId
protected final String getConnectionId()
-
getWeight
protected final int getWeight()
-
fill
public boolean fill(boolean block, byte[] data, int offset, int length) throws IOException- Throws:
IOException
-
getMaxFrameSize
public int getMaxFrameSize()
-
getHpackDecoder
public HpackDecoder 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
-
receivedEndOfStream
public void receivedEndOfStream(int streamId) throws org.apache.coyote.http2.ConnectionException- Throws:
org.apache.coyote.http2.ConnectionException
-
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
public void reprioritise(int streamId, int parentStreamId, boolean exclusive, int weight) throws org.apache.coyote.http2.Http2Exception- Throws:
org.apache.coyote.http2.Http2Exception
-
headersContinue
public void headersContinue(int payloadSize, boolean endOfHeaders)
-
headersEnd
public void headersEnd(int streamId) throws org.apache.coyote.http2.Http2Exception- Throws:
org.apache.coyote.http2.Http2Exception
-
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
public void pingReceive(byte[] payload, boolean ack) throws IOException- Throws:
IOException
-
goaway
public void goaway(int lastStreamId, long errorCode, String debugData)
-
incrementWindowSize
public void incrementWindowSize(int streamId, int increment) 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
-
fill
public default boolean fill(boolean block, byte[] data) throws IOException- Throws:
IOException
-
fill
public default boolean fill(boolean block, ByteBuffer data, int len) throws IOException- Throws:
IOException
-
-