org.apache.coyote.ajp

## Class AbstractAjpProcessor<S>

- java.lang.Object
- - org.apache.coyote.AbstractProcessor<S>
  - - org.apache.coyote.ajp.AbstractAjpProcessor<S>

All Implemented Interfaces:
  ActionHook, Processor<S>

Direct Known Subclasses:
  AjpAprProcessor, AjpNioProcessor, AjpProcessor

    public abstract class AbstractAjpProcessor<S>
    extends AbstractProcessor<S>

Base class for AJP Processor implementations.

### Nested Class Summary

Nested Classes
`protected class` `AbstractAjpProcessor.SocketInputBuffer` This class is an input buffer which will read its data from an input stream.
`protected class` `AbstractAjpProcessor.SocketOutputBuffer` This class is an output buffer which will write data to an output stream.

### Field Summary

Fields
`protected MessageBytes` `bodyBytes` Body message.
`protected AjpMessage` `bodyMessage` Body message.
`protected long` `bytesWritten` Bytes written to client for the current request.
`protected MessageBytes` `certificates` Byte chunk for certs.
`protected String` `clientCertProvider` When client certificate information is presented in a form other than instances of `X509Certificate` it needs to be converted before it can be used and this property controls which JSSE provider is used to perform the conversion.
`protected boolean` `empty` Body empty flag.
`protected static byte[]` `endAndCloseMessageArray`
`protected static byte[]` `endMessageArray` End message array.
`protected boolean` `endOfStream` End of stream flag.
`protected boolean` `error` Error flag.
`protected boolean` `finished` Finished response.
`protected boolean` `first` First read.
`protected static byte[]` `flushMessageArray` Flush message array.
`protected byte[]` `getBodyMessageArray` GetBody message array.
`protected char[]` `hostNameC` Host name (used to avoid useless B2C conversion on the host name).
`protected int` `keepAliveTimeout` The number of milliseconds Tomcat will wait for a subsequent request before closing the connection.
`protected int` `packetSize` AJP packet size.
`protected static byte[]` `pongMessageArray` Pong message array.
`protected boolean` `replay` Replay read.
`protected AjpMessage` `requestHeaderMessage` Header message.
`protected String` `requiredSecret` Required secret.
`protected AjpMessage` `responseMessage` Message used for response composition.
`protected static StringManager` `sm` The string manager for this package.
`protected MessageBytes` `tmpMB` Temp message bytes used for processing.
`protected boolean` `tomcatAuthentication` Use Tomcat authentication ?

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

`adapter, asyncStateMachine, endpoint, request, response, socketWrapper`

### Constructor Summary

Constructors
Constructor and Description
`AbstractAjpProcessor(int packetSize, AbstractEndpoint endpoint)`

### Method Summary

Methods
`void` `action(ActionCode actionCode, Object param)` Send an action to the connector.
`protected abstract void` `actionInternal(ActionCode actionCode, Object param)`
`AbstractEndpoint.Handler.SocketState` `asyncDispatch(SocketStatus status)` Process in-progress Servlet 3.0 Async requests.
`AbstractEndpoint.Handler.SocketState` `event(SocketStatus status)` Process in-progress Comet requests.
`protected void` `finish()` Finish AJP response.
`protected void` `flush(boolean explicit)` Callback to write data from the buffer.
`String` `getClientCertProvider()`
`HttpUpgradeHandler` `getHttpUpgradeHandler()`
`int` `getKeepAliveTimeout()`
`protected abstract Log` `getLog()`
`boolean` `getTomcatAuthentication()`
`UpgradeInbound` `getUpgradeInbound()` Deprecated. Will be removed in Tomcat 8.0.x.
`boolean` `isComet()`
`boolean` `isUpgrade()`
`protected abstract void` `output(byte[] src, int offset, int length)`
`protected void` `parseHost(MessageBytes valueMB)` Parse host.
`protected void` `prepareRequest()` After reading the request headers, we have to setup the request filters.
`protected void` `prepareResponse()` When committing the response, we have to validate the set of headers, as well as setup the response filters.
`protected abstract boolean` `receive()`
`void` `recycle(boolean socketClosing)` Recycle the processor, ready for the next request which may be on the same connection or a different connection.
`protected boolean` `refillReadBuffer()` Get more request body data from the web server and store it in the internal buffer.
`protected abstract void` `resetTimeouts()` Provides a mechanism for those connector implementations (currently only NIO) that need to reset timeouts from Async timeouts to standard HTTP timeouts once async processing completes.
`void` `setClientCertProvider(String s)`
`void` `setKeepAliveTimeout(int timeout)`
`void` `setRequiredSecret(String requiredSecret)`
`void` `setSslSupport(SSLSupport sslSupport)`
`void` `setTomcatAuthentication(boolean tomcatAuthentication)`
`AbstractEndpoint.Handler.SocketState` `upgradeDispatch()` Processes data received on a connection that has been through an HTTP upgrade.
`AbstractEndpoint.Handler.SocketState` `upgradeDispatch(SocketStatus status)`

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

`asyncPostProcess, getAdapter, getEndpoint, getExecutor, getRequest, getSocketWrapper, isAsync, process, setAdapter, setSocketWrapper`

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

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

### Field Detail

#### sm

    protected static final StringManager sm

The string manager for this package.

#### endMessageArray

    protected static final byte[] endMessageArray

End message array.

#### endAndCloseMessageArray

    protected static final byte[] endAndCloseMessageArray

#### flushMessageArray

    protected static final byte[] flushMessageArray

Flush message array.

#### pongMessageArray

    protected static final byte[] pongMessageArray

Pong message array.

#### getBodyMessageArray

    protected final byte[] getBodyMessageArray

GetBody message array. Not static like the other message arrays since the message varies with packetSize and that can vary per connector.

#### packetSize

    protected int packetSize

AJP packet size.

#### requestHeaderMessage

    protected AjpMessage requestHeaderMessage

Header message. Note that this header is merely the one used during the processing of the first message of a "request", so it might not be a request header. It will stay unchanged during the processing of the whole request.

#### responseMessage

    protected AjpMessage responseMessage

Message used for response composition.

#### bodyMessage

    protected AjpMessage bodyMessage

Body message.

#### bodyBytes

    protected MessageBytes bodyBytes

Body message.

#### error

    protected boolean error

Error flag.

#### hostNameC

    protected char[] hostNameC

Host name (used to avoid useless B2C conversion on the host name).

#### tmpMB

    protected MessageBytes tmpMB

Temp message bytes used for processing.

#### certificates

    protected MessageBytes certificates

Byte chunk for certs.

#### endOfStream

    protected boolean endOfStream

End of stream flag.

#### empty

    protected boolean empty

Body empty flag.

#### first

    protected boolean first

First read.

#### replay

    protected boolean replay

Replay read.

#### finished

    protected boolean finished

Finished response.

#### bytesWritten

    protected long bytesWritten

Bytes written to client for the current request.

#### keepAliveTimeout

    protected int keepAliveTimeout

The number of milliseconds Tomcat will wait for a subsequent request before closing the connection. The default is the same as for Apache HTTP Server (15 000 milliseconds).

#### tomcatAuthentication

    protected boolean tomcatAuthentication

Use Tomcat authentication ?

#### requiredSecret

    protected String requiredSecret

Required secret.

#### clientCertProvider

    protected String clientCertProvider

When client certificate information is presented in a form other than instances of `X509Certificate` it needs to be converted before it can be used and this property controls which JSSE provider is used to perform the conversion. For example it is used with the AJP connectors, the HTTP APR connector and with the `SSLValve`. If not specified, the default provider will be used.

### Constructor Detail

#### AbstractAjpProcessor

    public AbstractAjpProcessor(int packetSize,
                        AbstractEndpoint endpoint)

### Method Detail

#### getLog

    protected abstract Log getLog()

#### getKeepAliveTimeout

    public int getKeepAliveTimeout()

#### setKeepAliveTimeout

    public void setKeepAliveTimeout(int timeout)

#### getTomcatAuthentication

    public boolean getTomcatAuthentication()

#### setTomcatAuthentication

    public void setTomcatAuthentication(boolean tomcatAuthentication)

#### setRequiredSecret

    public void setRequiredSecret(String requiredSecret)

#### getClientCertProvider

    public String getClientCertProvider()

#### setClientCertProvider

    public void setClientCertProvider(String s)

#### action

    public final void action(ActionCode actionCode,
              Object param)

Send an action to the connector.

Parameters:
  `actionCode` - Type of the action
  `param` - Action parameter

#### asyncDispatch

    public AbstractEndpoint.Handler.SocketState asyncDispatch(SocketStatus status)

Description copied from class: `AbstractProcessor`
Process in-progress Servlet 3.0 Async requests. These will start as HTTP requests.

Specified by:
  `asyncDispatch` in interface `Processor<S>`
Specified by:
  `asyncDispatch` in class `AbstractProcessor<S>`

#### setSslSupport

    public void setSslSupport(SSLSupport sslSupport)

#### event

    public AbstractEndpoint.Handler.SocketState event(SocketStatus status)
                                               throws IOException

Description copied from class: `AbstractProcessor`
Process in-progress Comet requests. These will start as HTTP requests.

Specified by:
  `event` in interface `Processor<S>`
Specified by:
  `event` in class `AbstractProcessor<S>`
Throws:
  `IOException`

#### upgradeDispatch

    public AbstractEndpoint.Handler.SocketState upgradeDispatch()
                                                         throws IOException

Description copied from class: `AbstractProcessor`
Processes data received on a connection that has been through an HTTP upgrade.

Specified by:
  `upgradeDispatch` in interface `Processor<S>`
Specified by:
  `upgradeDispatch` in class `AbstractProcessor<S>`
Throws:
  `IOException`

#### getUpgradeInbound

    @Deprecated
    public UpgradeInbound getUpgradeInbound()

Deprecated. Will be removed in Tomcat 8.0.x.

Specified by:
  `getUpgradeInbound` in interface `Processor<S>`
Specified by:
  `getUpgradeInbound` in class `AbstractProcessor<S>`

#### upgradeDispatch

    public AbstractEndpoint.Handler.SocketState upgradeDispatch(SocketStatus status)
                                                         throws IOException

Throws:
  `IOException`

#### getHttpUpgradeHandler

    public HttpUpgradeHandler getHttpUpgradeHandler()

#### recycle

    public void recycle(boolean socketClosing)

Recycle the processor, ready for the next request which may be on the same connection or a different connection.

Parameters:
  `socketClosing` - Indicates if the socket is about to be closed allowing the processor to perform any additional clean-up that may be required

#### actionInternal

    protected abstract void actionInternal(ActionCode actionCode,
                      Object param)

#### resetTimeouts

    protected abstract void resetTimeouts()

Provides a mechanism for those connector implementations (currently only NIO) that need to reset timeouts from Async timeouts to standard HTTP timeouts once async processing completes.

#### output

    protected abstract void output(byte[] src,
              int offset,
              int length)
                            throws IOException

Throws:
  `IOException`

#### receive

    protected abstract boolean receive()
                                throws IOException

Throws:
  `IOException`

#### isComet

    public final boolean isComet()

Specified by:
  `isComet` in interface `Processor<S>`
Specified by:
  `isComet` in class `AbstractProcessor<S>`

#### isUpgrade

    public final boolean isUpgrade()

Specified by:
  `isUpgrade` in interface `Processor<S>`
Specified by:
  `isUpgrade` in class `AbstractProcessor<S>`

#### refillReadBuffer

    protected boolean refillReadBuffer()
                                throws IOException

Get more request body data from the web server and store it in the internal buffer.

Returns:
  true if there is more data, false if not.
Throws:
  `IOException`

#### prepareRequest

    protected void prepareRequest()

After reading the request headers, we have to setup the request filters.

#### parseHost

    protected void parseHost(MessageBytes valueMB)

Parse host.

#### prepareResponse

    protected void prepareResponse()
                            throws IOException

When committing the response, we have to validate the set of headers, as well as setup the response filters.

Throws:
  `IOException`

#### flush

    protected void flush(boolean explicit)
                  throws IOException

Callback to write data from the buffer.

Throws:
  `IOException`

#### finish

    protected void finish()
                   throws IOException

Finish AJP response.

Throws:
  `IOException`