Package org.apache.coyote.http11

# Class Http11Processor

java.lang.Object
org.apache.coyote.AbstractProcessorLight
org.apache.coyote.AbstractProcessor
org.apache.coyote.http11.Http11Processor

All Implemented Interfaces:
  `ActionHook`, `Processor`

public class Http11Processor extends AbstractProcessor

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected int`
  `connectionUploadTimeout`
  Maximum timeout on uploads. 5 minutes as in Apache HTTPD server.
  `protected boolean`
  `contentDelimitation`
  Content delimiter for the request (if false, the connection will be closed at the end of the request).
  `protected boolean`
  `disableUploadTimeout`
  Flag to disable setting a different time-out on uploads.
  `protected boolean`
  `http09`
  HTTP/0.9 flag.
  `protected boolean`
  `http11`
  HTTP/1.1 flag.
  `protected final Http11InputBuffer`
  `inputBuffer`
  Input.
  `protected boolean`
  `keepAlive`
  Keep-alive.
  `protected int`
  `maxKeepAliveRequests`
  Maximum number of Keep-Alive requests to honor.
  `protected int`
  `maxSavePostSize`
  Max saved post size.
  `protected boolean`
  `openSocket`
  Flag used to indicate that the socket should be kept open (e.g. for keep alive or send file).
  `protected final Http11OutputBuffer`
  `outputBuffer`
  Output.
  `protected boolean`
  `readComplete`
  Flag that indicates if the request headers have been completely read.
  `protected Pattern`
  `restrictedUserAgents`
  Regular expression that defines the restricted user agents.
  `protected SendfileDataBase`
  `sendfileData`
  Sendfile data.
  `protected UpgradeToken`
  `upgradeToken`
  Instance of the new protocol to use after the HTTP connection has been upgraded.

  ### Fields inherited from class org.apache.coyote.AbstractProcessor

  `adapter, asyncStateMachine, endpoint, hostNameC, request, response, socketWrapper, sslSupport, userDataHelper`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Http11Processor(AbstractHttp11Protocol<?> protocol, AbstractEndpoint<?,?> endpoint)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected final void`
  `ack()`
  `protected final void`
  `ack(ContinueResponseTiming continueResponseTiming)`
  `protected final int`
  `available(boolean doRead)`
  `protected final void`
  `disableSwallowRequest()`
  `protected AbstractEndpoint.Handler.SocketState`
  `dispatchEndRequest()`
  Perform any necessary clean-up processing if the dispatch resulted in the completion of processing for the current request.
  `protected final void`
  `doHttpUpgrade(UpgradeToken upgradeToken)`
  Process an HTTP upgrade.
  `protected final void`
  `finishResponse()`
  `protected final void`
  `flush()`
  `protected boolean`
  `flushBufferedWrite()`
  Flush any pending writes.
  `String`
  `getCompression()`
  Deprecated.
  Use `AbstractHttp11Protocol.getCompression()`
  `int`
  `getConnectionUploadTimeout()`
  Get the upload timeout.
  `boolean`
  `getDisableUploadTimeout()`
  Get the flag that controls upload time-outs.
  `ByteBuffer`
  `getLeftoverInput()`
  Allows retrieving additional input during the upgrade process.
  `protected Log`
  `getLog()`
  `int`
  `getMaxKeepAliveRequests()`
  Get the maximum number of Keep-Alive requests allowed.
  `int`
  `getMaxSavePostSize()`
  Return the maximum size of a POST which will be buffered in SSL mode.
  `UpgradeToken`
  `getUpgradeToken()`
  Generate an upgrade token.
  `protected final boolean`
  `isReadyForWrite()`
  `protected final boolean`
  `isRequestBodyFullyRead()`
  `boolean`
  `isUpgrade()`
  Processors that implement HTTP upgrade must override this method.
  `void`
  `pause()`
  Informs the processor that the underlying I/O layer has stopped accepting new connections.
  `protected void`
  `populatePort()`
  Called when a host header is not present or is empty in the request (e.g.
  `protected final void`
  `prepareResponse()`
  When committing the response, we have to validate the set of headers, as well as setup the response filters.
  `final void`
  `recycle()`
  Recycle the processor, ready for the next request which may be on the same connection or a different connection.
  `protected final void`
  `registerReadInterest()`
  `AbstractEndpoint.Handler.SocketState`
  `service(SocketWrapperBase<?> socketWrapper)`
  Service a 'standard' HTTP request.
  `void`
  `setCompressableMimeTypes(String[] compressibleMimeTypes)`
  Deprecated.
  Use `AbstractHttp11Protocol.setCompressibleMimeType(String)`
  `void`
  `setCompressibleMimeTypes(String[] compressibleMimeTypes)`
  Deprecated.
  Use `AbstractHttp11Protocol.setCompressibleMimeType(String)`
  `void`
  `setCompression(String compression)`
  Deprecated.
  Use `AbstractHttp11Protocol.setCompression(String)`
  `void`
  `setCompressionMinSize(int compressionMinSize)`
  Deprecated.
  Use `AbstractHttp11Protocol.setCompressionMinSize(int)`
  `void`
  `setConnectionUploadTimeout(int timeout)`
  Set the upload timeout.
  `void`
  `setDisableUploadTimeout(boolean isDisabled)`
  Set the flag to control whether a separate connection timeout is used during upload of a request body.
  `void`
  `setMaxKeepAliveRequests(int mkar)`
  Set the maximum number of Keep-Alive requests to allow.
  `void`
  `setMaxSavePostSize(int msps)`
  Set the maximum size of a POST which will be buffered in SSL mode.
  `void`
  `setNoCompressionUserAgents(String noCompressionUserAgents)`
  Deprecated.
  Use `AbstractHttp11Protocol.setNoCompressionUserAgents(String)`
  `protected final void`
  `setRequestBody(ByteChunk body)`
  `void`
  `setRestrictedUserAgents(String restrictedUserAgents)`
  Set restricted user agent list (which will downgrade the connector to HTTP/1.0 mode).
  `void`
  `setServer(String server)`
  Deprecated.
  Use `AbstractHttp11Protocol.setServer(String)`
  `void`
  `setServerRemoveAppProvidedValues(boolean serverRemoveAppProvidedValues)`
  Deprecated.
  `protected final void`
  `setSocketWrapper(SocketWrapperBase<?> socketWrapper)`
  Set the socket wrapper being used.
  `protected final void`
  `setSwallowResponse()`
  `protected final void`
  `sslReHandShake()`
  Processors that can perform a TLS re-handshake (e.g.

  ### Methods inherited from class org.apache.coyote.AbstractProcessor

  `action, asyncPostProcess, checkAsyncTimeoutGeneration, dispatch, dispatchNonBlockingRead, doPush, executeDispatches, getAdapter, getAsyncTimeout, getConnectionID, getErrorState, getExecutor, getPopulateRequestAttributesFromSocket, getRequest, getSocketWrapper, getStreamID, isAsync, isPushSupported, isReadyForRead, logAccess, parseHost, populateHost, populateRequestAttributeRemoteHost, populateSslRequestAttributes, processSocketEvent, setAdapter, setAsyncTimeout, setErrorState, setSslSupport, timeoutAsync`

  ### Methods inherited from class org.apache.coyote.AbstractProcessorLight

  `addDispatch, clearDispatches, getIteratorAndClearDispatches, process`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### inputBuffer

    protected final Http11InputBuffer inputBuffer
    Input.

  - ### outputBuffer

    protected final Http11OutputBuffer outputBuffer
    Output.

  - ### keepAlive

    protected volatile boolean keepAlive
    Keep-alive.

  - ### openSocket

    protected volatile boolean openSocket
    Flag used to indicate that the socket should be kept open (e.g. for keep alive or send file).

  - ### readComplete

    protected volatile boolean readComplete
    Flag that indicates if the request headers have been completely read.

  - ### http11

    protected boolean http11
    HTTP/1.1 flag.

  - ### http09

    protected boolean http09
    HTTP/0.9 flag.

  - ### contentDelimitation

    protected boolean contentDelimitation
    Content delimiter for the request (if false, the connection will be closed at the end of the request).

  - ### restrictedUserAgents

    protected Pattern restrictedUserAgents
    Regular expression that defines the restricted user agents.

  - ### maxKeepAliveRequests

    protected int maxKeepAliveRequests
    Maximum number of Keep-Alive requests to honor.

  - ### connectionUploadTimeout

    protected int connectionUploadTimeout
    Maximum timeout on uploads. 5 minutes as in Apache HTTPD server.

  - ### disableUploadTimeout

    protected boolean disableUploadTimeout
    Flag to disable setting a different time-out on uploads.

  - ### maxSavePostSize

    protected int maxSavePostSize
    Max saved post size.

  - ### upgradeToken

    protected UpgradeToken upgradeToken
    Instance of the new protocol to use after the HTTP connection has been upgraded.

  - ### sendfileData

    protected SendfileDataBase sendfileData
    Sendfile data.

- ## Constructor Details

  - ### Http11Processor

    public Http11Processor(AbstractHttp11Protocol<?> protocol, AbstractEndpoint<?,?> endpoint)

- ## Method Details

  - ### setCompression

    @Deprecated public void setCompression(String compression)
    Deprecated.
    Use `AbstractHttp11Protocol.setCompression(String)`
    Set compression level.
    Parameters:
      `compression` - One of `on`, `force`, `off` or the minimum compression size in bytes which implies `on`

  - ### setCompressionMinSize

    @Deprecated public void setCompressionMinSize(int compressionMinSize)
    Deprecated.
    Use `AbstractHttp11Protocol.setCompressionMinSize(int)`
    Set Minimum size to trigger compression.
    Parameters:
      `compressionMinSize` - The minimum content length required for compression in bytes

  - ### setNoCompressionUserAgents

    @Deprecated public void setNoCompressionUserAgents(String noCompressionUserAgents)
    Deprecated.
    Use `AbstractHttp11Protocol.setNoCompressionUserAgents(String)`
    Set no compression user agent pattern. Regular expression as supported by `Pattern`. e.g.: `gorilla|desesplorer|tigrus`.
    Parameters:
      `noCompressionUserAgents` - The regular expression for user agent strings for which compression should not be applied

  - ### setCompressableMimeTypes

    @Deprecated public void setCompressableMimeTypes(String[] compressibleMimeTypes)
    Deprecated.
    Use `AbstractHttp11Protocol.setCompressibleMimeType(String)`
    Parameters:
      `compressibleMimeTypes` - See `setCompressibleMimeTypes(String[])`

  - ### setCompressibleMimeTypes

    @Deprecated public void setCompressibleMimeTypes(String[] compressibleMimeTypes)
    Deprecated.
    Use `AbstractHttp11Protocol.setCompressibleMimeType(String)`
    Set compressible mime-type list.
    Parameters:
      `compressibleMimeTypes` - MIME types for which compression should be enabled

  - ### getCompression

    @Deprecated public String getCompression()
    Deprecated.
    Use `AbstractHttp11Protocol.getCompression()`
    Return compression level.
    Returns:
      The current compression level in string form (off/on/force)

  - ### setRestrictedUserAgents

    public void setRestrictedUserAgents(String restrictedUserAgents)
    Set restricted user agent list (which will downgrade the connector to HTTP/1.0 mode). Regular expression as supported by `Pattern`.
    Parameters:
      `restrictedUserAgents` - The regular expression as supported by `Pattern` for the user agents e.g. "gorilla|desesplorer|tigrus"

  - ### setMaxKeepAliveRequests

    public void setMaxKeepAliveRequests(int mkar)
    Set the maximum number of Keep-Alive requests to allow. This is to safeguard from DoS attacks. Setting to a negative value disables the limit.
    Parameters:
      `mkar` - The new maximum number of Keep-Alive requests allowed

  - ### getMaxKeepAliveRequests

    public int getMaxKeepAliveRequests()
    Get the maximum number of Keep-Alive requests allowed. A negative value means there is no limit.
    Returns:
      the number of Keep-Alive requests that we will allow.

  - ### setMaxSavePostSize

    public void setMaxSavePostSize(int msps)
    Set the maximum size of a POST which will be buffered in SSL mode. When a POST is received where the security constraints require a client certificate, the POST body needs to be buffered while an SSL handshake takes place to obtain the certificate.
    Parameters:
      `msps` - The maximum size POST body to buffer in bytes

  - ### getMaxSavePostSize

    public int getMaxSavePostSize()
    Return the maximum size of a POST which will be buffered in SSL mode.
    Returns:
      The size in bytes

  - ### setDisableUploadTimeout

    public void setDisableUploadTimeout(boolean isDisabled)
    Set the flag to control whether a separate connection timeout is used during upload of a request body.
    Parameters:
      `isDisabled` - `true` if the separate upload timeout should be disabled

  - ### getDisableUploadTimeout

    public boolean getDisableUploadTimeout()
    Get the flag that controls upload time-outs.
    Returns:
      `true` if the separate upload timeout is disabled

  - ### setConnectionUploadTimeout

    public void setConnectionUploadTimeout(int timeout)
    Set the upload timeout.
    Parameters:
      `timeout` - Upload timeout in milliseconds

  - ### getConnectionUploadTimeout

    public int getConnectionUploadTimeout()
    Get the upload timeout.
    Returns:
      Upload timeout in milliseconds

  - ### setServer

    @Deprecated public void setServer(String server)
    Deprecated.
    Use `AbstractHttp11Protocol.setServer(String)`
    Set the server header name.
    Parameters:
      `server` - The new value to use for the server header

  - ### setServerRemoveAppProvidedValues

    @Deprecated public void setServerRemoveAppProvidedValues(boolean serverRemoveAppProvidedValues)
    Deprecated.

  - ### service

    public AbstractEndpoint.Handler.SocketState service(SocketWrapperBase<?> socketWrapper) throws IOException
    Description copied from class: `AbstractProcessorLight`
    Service a 'standard' HTTP request. This method is called for both new requests and for requests that have partially read the HTTP request line or HTTP headers. Once the headers have been fully read this method is not called again until there is a new HTTP request to process. Note that the request type may change during processing which may result in one or more calls to `AbstractProcessorLight.dispatch(SocketEvent)`. Requests may be pipe-lined.
    Specified by:
      `service` in class `AbstractProcessorLight`
    Parameters:
      `socketWrapper` - The connection to process
    Returns:
      The state the caller should put the socket in when this method returns
    Throws:
      `IOException` - If an I/O error occurs during the processing of the request

  - ### setSocketWrapper

    protected final void setSocketWrapper(SocketWrapperBase<?> socketWrapper)
    Description copied from class: `AbstractProcessor`
    Set the socket wrapper being used.
    Overrides:
      `setSocketWrapper` in class `AbstractProcessor`
    Parameters:
      `socketWrapper` - The socket wrapper

  - ### prepareResponse

    protected final void prepareResponse() throws IOException
    When committing the response, we have to validate the set of headers, as well as setup the response filters.
    Specified by:
      `prepareResponse` in class `AbstractProcessor`
    Throws:
      `IOException`

  - ### populatePort

    protected void populatePort()
    Called when a host header is not present or is empty in the request (e.g. HTTP/1.0). It populates the server port with appropriate information. The source is expected to vary by protocol.

    The default implementation is a NO-OP.

    This implementation provides the server port from the local port.

    Overrides:
      `populatePort` in class `AbstractProcessor`

  - ### flushBufferedWrite

    protected boolean flushBufferedWrite() throws IOException
    Description copied from class: `AbstractProcessor`
    Flush any pending writes. Used during non-blocking writes to flush any remaining data from a previous incomplete write.
    Specified by:
      `flushBufferedWrite` in class `AbstractProcessor`
    Returns:
      `true` if data remains to be flushed at the end of method
    Throws:
      `IOException` - If an I/O error occurs while attempting to flush the data

  - ### dispatchEndRequest

    protected AbstractEndpoint.Handler.SocketState dispatchEndRequest()
    Description copied from class: `AbstractProcessor`
    Perform any necessary clean-up processing if the dispatch resulted in the completion of processing for the current request.
    Specified by:
      `dispatchEndRequest` in class `AbstractProcessor`
    Returns:
      The state to return for the socket once the clean-up for the current request has completed

  - ### getLog

    protected Log getLog()
    Specified by:
      `getLog` in class `AbstractProcessorLight`

  - ### finishResponse

    protected final void finishResponse() throws IOException
    Specified by:
      `finishResponse` in class `AbstractProcessor`
    Throws:
      `IOException`

  - ### ack

    protected final void ack()
    Overrides:
      `ack` in class `AbstractProcessor`

  - ### ack

    protected final void ack(ContinueResponseTiming continueResponseTiming)
    Specified by:
      `ack` in class `AbstractProcessor`

  - ### flush

    protected final void flush() throws IOException
    Specified by:
      `flush` in class `AbstractProcessor`
    Throws:
      `IOException`

  - ### available

    protected final int available(boolean doRead)
    Specified by:
      `available` in class `AbstractProcessor`

  - ### setRequestBody

    protected final void setRequestBody(ByteChunk body)
    Specified by:
      `setRequestBody` in class `AbstractProcessor`

  - ### setSwallowResponse

    protected final void setSwallowResponse()
    Specified by:
      `setSwallowResponse` in class `AbstractProcessor`

  - ### disableSwallowRequest

    protected final void disableSwallowRequest()
    Specified by:
      `disableSwallowRequest` in class `AbstractProcessor`

  - ### sslReHandShake

    protected final void sslReHandShake() throws IOException
    Description copied from class: `AbstractProcessor`
    Processors that can perform a TLS re-handshake (e.g. HTTP/1.1) should override this method and implement the re-handshake.
    Overrides:
      `sslReHandShake` in class `AbstractProcessor`
    Throws:
      `IOException` - If authentication is required then there will be I/O with the client and this exception will be thrown if that goes wrong

  - ### isRequestBodyFullyRead

    protected final boolean isRequestBodyFullyRead()
    Specified by:
      `isRequestBodyFullyRead` in class `AbstractProcessor`

  - ### registerReadInterest

    protected final void registerReadInterest()
    Specified by:
      `registerReadInterest` in class `AbstractProcessor`

  - ### isReadyForWrite

    protected final boolean isReadyForWrite()
    Specified by:
      `isReadyForWrite` in class `AbstractProcessor`

  - ### getUpgradeToken

    public UpgradeToken getUpgradeToken()
    Description copied from class: `AbstractProcessor`
    Generate an upgrade token. Processors that implement HTTP upgrade must override this method and provide the necessary token.
    Specified by:
      `getUpgradeToken` in interface `Processor`
    Overrides:
      `getUpgradeToken` in class `AbstractProcessor`
    Returns:
      An upgrade token encapsulating the information required to process the upgrade request

  - ### doHttpUpgrade

    protected final void doHttpUpgrade(UpgradeToken upgradeToken)
    Description copied from class: `AbstractProcessor`
    Process an HTTP upgrade. Processors that support HTTP upgrade should override this method and process the provided token.
    Overrides:
      `doHttpUpgrade` in class `AbstractProcessor`
    Parameters:
      `upgradeToken` - Contains all the information necessary for the Processor to process the upgrade

  - ### getLeftoverInput

    public ByteBuffer getLeftoverInput()
    Description copied from class: `AbstractProcessor`
    Allows retrieving additional input during the upgrade process. Processors that implement HTTP upgrade must override this method.
    Specified by:
      `getLeftoverInput` in interface `Processor`
    Overrides:
      `getLeftoverInput` in class `AbstractProcessor`
    Returns:
      leftover bytes

  - ### isUpgrade

    public boolean isUpgrade()
    Description copied from class: `AbstractProcessor`
    Processors that implement HTTP upgrade must override this method.
    Specified by:
      `isUpgrade` in interface `Processor`
    Overrides:
      `isUpgrade` in class `AbstractProcessor`
    Returns:
      `true` if the Processor is currently processing an upgrade request, otherwise `false`

  - ### recycle

    public final void recycle()
    Description copied from interface: `Processor`
    Recycle the processor, ready for the next request which may be on the same connection or a different connection.
    Specified by:
      `recycle` in interface `Processor`
    Overrides:
      `recycle` in class `AbstractProcessor`

  - ### pause

    public void pause()
    Description copied from interface: `Processor`
    Informs the processor that the underlying I/O layer has stopped accepting new connections. This is primarily intended to enable processors that use multiplexed connections to prevent further 'streams' being added to an existing multiplexed connection.