Package org.apache.coyote.http2

## Class Http2AsyncUpgradeHandler

- java.lang.Object
- - org.apache.coyote.http2.Http2AsyncUpgradeHandler

- All Implemented Interfaces:
    `HttpUpgradeHandler`, `InternalHttpUpgradeHandler`

      public class Http2AsyncUpgradeHandler
      extends java.lang.Object

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected class` | `Http2AsyncUpgradeHandler.AsyncPingManager` |
    `protected class` | `Http2AsyncUpgradeHandler.SendfileCompletionHandler` |

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected java.util.concurrent.atomic.AtomicInteger` | `activeRemoteStreamCount` |
    `protected java.lang.String` | `connectionId` |
    `protected static int` | `FLAG_END_OF_HEADERS` |
    `protected static int` | `FLAG_END_OF_STREAM` |
    `protected static byte[]` | `GOAWAY` |
    `protected 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.
    `protected static Log` | `log` |
    `protected static byte[]` | `PING` |
    `protected static byte[]` | `PING_ACK` |
    `protected Http2Protocol` | `protocol` |
    `protected static byte[]` | `SETTINGS_ACK` |
    `protected static StringManager` | `sm` |
    `protected SocketWrapperBase<?>` | `socketWrapper` |
    `protected UserDataHelper` | `userDataHelper` |

  - ### 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()` |
    `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, java.nio.ByteBuffer data, int len)` |
    `protected java.lang.String` | `getConnectionId()` |
    `protected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffers` | `getHeaderFrameBuffers​(int initialPayloadSize)` |
    `HpackDecoder` | `getHpackDecoder()` |
    `protected org.apache.coyote.http2.HpackEncoder` | `getHpackEncoder()` |
    `int` | `getMaxFrameSize()` |
    `protected org.apache.coyote.http2.Http2Parser` | `getParser​(java.lang.String connectionId)` |
    `protected org.apache.coyote.http2.Http2UpgradeHandler.PingManager` | `getPingManager()` |
    `protected int` | `getWeight()` |
    `void` | `goaway​(int lastStreamId, long errorCode, java.lang.String debugData)` |
    `protected void` | `handleAppInitiatedIOException​(java.io.IOException ioe)` |
    `boolean` | `hasAsyncIO()` |
    `void` | `headersContinue​(int payloadSize, boolean endOfHeaders)` |
    `void` | `headersEnd​(int streamId)` |
    `org.apache.coyote.http2.HpackDecoder.HeaderEmitter` | `headersStart​(int streamId, boolean headersEndStream)` |
    `protected void` | `incrementWindowSize​(int increment)` |
    `void` | `incrementWindowSize​(int streamId, int increment)` |
    `void` | `init​(WebConnection webConnection)` | This method is called once the request/response pair where `HttpServletRequest.upgrade(Class)` is called has completed processing and is the point where control of the connection passes from the container to the `HttpUpgradeHandler`.
    `void` | `onSwallowedDataFramePayload​(int streamId, int swallowedDataBytesCount)` |
    `void` | `onSwallowedUnknownFrame​(int streamId, int frameTypeId, int flags, int size)` |
    `void` | `pause()` |
    `void` | `pingReceive​(byte[] payload, boolean ack)` |
    `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` | `processWrites()` |
    `void` | `receivedEndOfStream​(int streamId)` |
    `void` | `reprioritise​(int streamId, int parentStreamId, boolean exclusive, int weight)` |
    `void` | `reset​(int streamId, long errorCode)` |
    `protected void` | `setConnectionTimeoutForStreamCount​(int streamCount)` |
    `void` | `setSocketWrapper​(SocketWrapperBase<?> wrapper)` |
    `void` | `setSslSupport​(SSLSupport sslSupport)` |
    `void` | `setting​(org.apache.coyote.http2.Setting setting, long value)` |
    `void` | `settingsEnd​(boolean ack)` |
    `java.nio.ByteBuffer` | `startRequestBodyFrame​(int streamId, int payloadSize, boolean endOfStream)` |
    `void` | `timeoutAsync​(long now)` |
    `AbstractEndpoint.Handler.SocketState` | `upgradeDispatch​(SocketEvent status)` |
    `protected void` | `writeGoAwayFrame​(int maxStreamId, long errorCode, byte[] debugMsg)` |
    `protected void` | `writeSettings()` | 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 java.lang.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 java.util.concurrent.atomic.AtomicInteger activeRemoteStreamCount

    - #### userDataHelper

          protected final UserDataHelper userDataHelper

  - ### Constructor Detail

    - #### Http2AsyncUpgradeHandler

          public Http2AsyncUpgradeHandler​(Http2Protocol protocol,
                                          Adapter adapter,
                                          Request coyoteRequest)

  - ### Method Detail

    - #### getParser

          protected org.apache.coyote.http2.Http2Parser getParser​(java.lang.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 java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getHeaderFrameBuffers

          protected org.apache.coyote.http2.Http2UpgradeHandler.HeaderFrameBuffers getHeaderFrameBuffers​(int initialPayloadSize)

    - #### settingsEnd

          public void settingsEnd​(boolean ack)
                           throws java.io.IOException

      Throws:
        `java.io.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: `jakarta.servlet.http.HttpUpgradeHandler`
      This method is called once the request/response pair where `HttpServletRequest.upgrade(Class)` is called has completed processing and is the point where control of the connection passes from the container to the `HttpUpgradeHandler`.
      Specified by:
        `init` in interface `HttpUpgradeHandler`
      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:
        `setSocketWrapper` in interface `InternalHttpUpgradeHandler`

    - #### setSslSupport

          public void setSslSupport​(SSLSupport sslSupport)

      Specified by:
        `setSslSupport` in interface `InternalHttpUpgradeHandler`

    - #### upgradeDispatch

          public AbstractEndpoint.Handler.SocketState upgradeDispatch​(SocketEvent status)

      Specified by:
        `upgradeDispatch` in interface `InternalHttpUpgradeHandler`

    - #### setConnectionTimeoutForStreamCount

          protected void setConnectionTimeoutForStreamCount​(int streamCount)

    - #### timeoutAsync

          public void timeoutAsync​(long now)

      Specified by:
        `timeoutAsync` in interface `InternalHttpUpgradeHandler`

    - #### pause

          public void pause()

      Specified by:
        `pause` in interface `InternalHttpUpgradeHandler`

    - #### 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 interface `HttpUpgradeHandler`

    - #### 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 java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getHpackEncoder

          protected org.apache.coyote.http2.HpackEncoder getHpackEncoder()

    - #### handleAppInitiatedIOException

          protected void handleAppInitiatedIOException​(java.io.IOException ioe)
                                                throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### processWrites

          protected void processWrites()
                                throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### incrementWindowSize

          protected void incrementWindowSize​(int increment)
                                      throws org.apache.coyote.http2.Http2Exception

      Throws:
        `org.apache.coyote.http2.Http2Exception`

    - #### getConnectionId

          protected final java.lang.String getConnectionId()

    - #### getWeight

          protected final int getWeight()

    - #### fill

          public boolean fill​(boolean block,
                              byte[] data,
                              int offset,
                              int length)
                       throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getMaxFrameSize

          public int getMaxFrameSize()

    - #### getHpackDecoder

          public HpackDecoder getHpackDecoder()

    - #### startRequestBodyFrame

          public java.nio.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,
                                          java.io.IOException

      Throws:
        `org.apache.coyote.http2.Http2Exception`
        `java.io.IOException`

    - #### 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 java.io.IOException

      Throws:
        `java.io.IOException`

    - #### headersStart

          public org.apache.coyote.http2.HpackDecoder.HeaderEmitter headersStart​(int streamId,
                                                                                 boolean headersEndStream)
                                                                          throws org.apache.coyote.http2.Http2Exception,
                                                                                 java.io.IOException

      Throws:
        `org.apache.coyote.http2.Http2Exception`
        `java.io.IOException`

    - #### 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 java.io.IOException

      Throws:
        `java.io.IOException`

    - #### goaway

          public void goaway​(int lastStreamId,
                             long errorCode,
                             java.lang.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 java.io.IOException

      Throws:
        `java.io.IOException`

    - #### fill

          public default boolean fill​(boolean block,
                                      byte[] data)
                               throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### fill

          public default boolean fill​(boolean block,
                                      java.nio.ByteBuffer data,
                                      int len)
                               throws java.io.IOException

      Throws:
        `java.io.IOException`