Class Http2AsyncUpgradeHandler

java.lang.Object
org.apache.coyote.http2.Http2AsyncUpgradeHandler
All Implemented Interfaces:
HttpUpgradeHandler, InternalHttpUpgradeHandler

public class Http2AsyncUpgradeHandler extends Object
  • Field Details

    • 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:
    • 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

      protected final String connectionId
    • protocol

      protected final Http2Protocol protocol
    • socketWrapper

      protected final 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
    • userDataHelper

      protected final UserDataHelper userDataHelper
    • windowAllocationLock

      protected final Lock windowAllocationLock
    • windowAllocationAvailable

      protected final Condition windowAllocationAvailable
  • Constructor Details

  • Method Details

    • getParser

      protected org.apache.coyote.http2.Http2Parser getParser(String connectionId)
    • getPingManager

      protected org.apache.coyote.http2.Http2UpgradeHandler.PingManager getPingManager()
    • hasAsyncIO

      public boolean hasAsyncIO()
      Returns:
      true if able to process asynchronous IO, default is false
    • 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: 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)
    • decrementActiveRemoteStreamCount

      protected void decrementActiveRemoteStreamCount(org.apache.coyote.http2.Stream stream)
    • setSocketWrapper

      public void setSocketWrapper(SocketWrapperBase<?> wrapper)
      Description copied from interface: InternalHttpUpgradeHandler
      Associate with the specified socket.
      Specified by:
      setSocketWrapper in interface InternalHttpUpgradeHandler
      Parameters:
      wrapper - the socket
    • setSslSupport

      public void setSslSupport(SSLSupport sslSupport)
      Description copied from interface: InternalHttpUpgradeHandler
      Associate with the specified SSL support.
      Specified by:
      setSslSupport in interface InternalHttpUpgradeHandler
      Parameters:
      sslSupport - the SSL support
    • upgradeDispatch

      public AbstractEndpoint.Handler.SocketState upgradeDispatch(SocketEvent status)
      Description copied from interface: InternalHttpUpgradeHandler
      Process the specified event.
      Specified by:
      upgradeDispatch in interface InternalHttpUpgradeHandler
      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 interface InternalHttpUpgradeHandler
      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 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 IOException
      Throws:
      IOException
    • getHpackEncoder

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

      protected void sentEndOfStream(org.apache.coyote.http2.Stream stream)
    • 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()
    • increaseOverheadCount

      public void increaseOverheadCount(org.apache.coyote.http2.FrameType frameType)
    • 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.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 - Unused
      parentStreamId - Unused
      exclusive - Unused
      weight - 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

      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
    • 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

      public ServletConnection getServletConnection()
    • fill

      default boolean fill(boolean block, byte[] data) throws IOException
      Throws:
      IOException
    • fill

      default boolean fill(boolean block, ByteBuffer data, int len) throws IOException
      Throws:
      IOException