Package org.apache.coyote
Class AbstractProcessor
java.lang.Object
org.apache.coyote.AbstractProcessorLight
org.apache.coyote.AbstractProcessor
- All Implemented Interfaces:
ActionHook,Processor
- Direct Known Subclasses:
AjpProcessor,Http11Processor
Provides functionality and attributes common to all supported protocols (currently HTTP and AJP) for processing a
single request/response.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Adapterprotected final org.apache.coyote.AsyncStateMachineprotected final Requestprotected final Responseprotected SocketWrapperBase<?> protected SSLSupportprotected final UserDataHelper -
Constructor Summary
ConstructorsModifierConstructorDescriptionAbstractProcessor(Adapter adapter) protectedAbstractProcessor(Adapter adapter, Request coyoteRequest, Response coyoteResponse) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract voidack(ContinueResponseTiming continueResponseTiming) final voidaction(ActionCode actionCode, Object param) Send an action to the connector.protected abstract intavailable(boolean doRead) booleanCheck to see if the async generation (each cycle of async increments the generation of the AsyncStateMachine) is the same as the generation when the most recent async timeout was triggered.protected abstract voiddispatch(SocketEvent status) Process an in-progress request that is not longer in standard HTTP mode.protected abstract AbstractEndpoint.Handler.SocketStatePerform any necessary clean-up processing if the dispatch resulted in the completion of processing for the current request.protected voidPerform any necessary processing for a non-blocking read before dispatching to the adapter.protected voiddoHttpUpgrade(UpgradeToken upgradeToken) Process an HTTP upgrade.protected voidProcess a push.protected voidProvides a mechanism to trigger processing on a container thread.protected voidprotected abstract voidprotected abstract voidflush()protected abstract booleanFlush any pending writes.Get the associated adapter.longprotected ErrorStateAllows retrieving additional input during the upgrade process.protected booleanProcessors that populate request attributes directly (e.g.protected ObjectProtocols that provide per HTTP request IDs (e.g.protected abstract ServletConnectionProtocols must override this method and return an appropriate ServletConnection instanceprotected final SocketWrapperBase<?> Generate an upgrade token.booleanisAsync()protected booleanProtocols that support push should override this method and returntrue.protected booleanprotected abstract booleanprotected abstract booleanprotected abstract booleanprotected booleanProtocols that support trailer fields should override this method and returntrue.booleanProcessors that implement HTTP upgrade must override this method.protected final voidlogAccess(SocketWrapperBase<?> socketWrapper) Add an entry to the access log for a failed connection attempt.protected voidparseHost(MessageBytes valueMB) protected voidCalled when a host header is not present in the request (e.g.protected voidCalled when a host header is not present or is empty in the request (e.g.protected voidPopulate the remote host request attribute.protected voidPopulate the TLS related request attributes from theSSLSupportinstance associated with this processor.protected abstract voidprotected voidprocessSocketEvent(SocketEvent event, boolean dispatch) voidrecycle()Recycle the processor, ready for the next request which may be on the same connection or a different connection.protected abstract voidvoidsetAsyncTimeout(long timeout) protected voidsetErrorState(ErrorState errorState, Throwable t) Update the current error state to the new error state if the new error state is more severe than the current error state.protected abstract voidsetRequestBody(ByteChunk body) protected voidsetSocketWrapper(SocketWrapperBase<?> socketWrapper) Set the socket wrapper being used.final voidsetSslSupport(SSLSupport sslSupport) Set the SSL information for this HTTP connection.protected abstract voidprotected voidProcessors that can perform a TLS re-handshake (e.g.voidtimeoutAsync(long now) Check this processor to see if the timeout has expired and process a timeout if that is that case.Methods inherited from class org.apache.coyote.AbstractProcessorLight
addDispatch, clearDispatches, getIteratorAndClearDispatches, getLog, process, service
-
Field Details
-
adapter
-
asyncStateMachine
protected final org.apache.coyote.AsyncStateMachine asyncStateMachine -
request
-
response
-
socketWrapper
-
sslSupport
-
userDataHelper
-
-
Constructor Details
-
AbstractProcessor
-
AbstractProcessor
-
-
Method Details
-
setErrorState
Update the current error state to the new error state if the new error state is more severe than the current error state.- Parameters:
errorState- The error status detailst- The error which occurred
-
getErrorState
-
getRequest
- Specified by:
getRequestin interfaceProcessor- Returns:
- The request associated with this processor.
-
getAdapter
Get the associated adapter.- Returns:
- the associated adapter
-
setSocketWrapper
Set the socket wrapper being used.- Parameters:
socketWrapper- The socket wrapper
-
getSocketWrapper
- Returns:
- the socket wrapper being used.
-
setSslSupport
Description copied from interface:ProcessorSet the SSL information for this HTTP connection.- Specified by:
setSslSupportin interfaceProcessor- Parameters:
sslSupport- The SSL support object to use for this connection
-
execute
Provides a mechanism to trigger processing on a container thread.- Parameters:
runnable- The task representing the processing that needs to take place on a container thread
-
isAsync
public boolean isAsync() -
asyncPostProcess
- Specified by:
asyncPostProcessin classAbstractProcessorLight
-
dispatch
Description copied from class:AbstractProcessorLightProcess an in-progress request that is not longer in standard HTTP mode. Uses currently include Servlet 3.0 Async and HTTP upgrade connections. Further uses may be added in the future. These will typically start as HTTP requests.- Specified by:
dispatchin classAbstractProcessorLight- Parameters:
status- The event 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
-
parseHost
-
populateHost
protected void populateHost()Called when a host header is not present in the request (e.g. HTTP/1.0). It populates the server name with appropriate information. The source is expected to vary by protocol.The default implementation is a NO-OP.
-
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.
-
action
Description copied from interface:ActionHookSend an action to the connector.- Specified by:
actionin interfaceActionHook- Parameters:
actionCode- Type of the actionparam- Action parameter
-
dispatchNonBlockingRead
protected void dispatchNonBlockingRead()Perform any necessary processing for a non-blocking read before dispatching to the adapter. -
timeoutAsync
public void timeoutAsync(long now) Check this processor to see if the timeout has expired and process a timeout if that is that case.Note: The name of this method originated with the Servlet 3.0 asynchronous processing but evolved over time to represent a timeout that is triggered independently of the socket read/write timeouts.
Sub-classes of this base class represent a single request/response pair. The timeout to be processed is, therefore, the Servlet asynchronous processing timeout.
- Specified by:
timeoutAsyncin interfaceProcessor- Parameters:
now- The time (as returned bySystem.currentTimeMillis()to use as the current time to determine whether the timeout has expired. If negative, the timeout will always be treated as ifq it has expired.
-
checkAsyncTimeoutGeneration
public boolean checkAsyncTimeoutGeneration()Description copied from interface:ProcessorCheck to see if the async generation (each cycle of async increments the generation of the AsyncStateMachine) is the same as the generation when the most recent async timeout was triggered. This is intended to be used to avoid unnecessary processing.- Specified by:
checkAsyncTimeoutGenerationin interfaceProcessor- Returns:
trueIf the async generation has not changed since the async timeout was triggered
-
setAsyncTimeout
public void setAsyncTimeout(long timeout) -
getAsyncTimeout
public long getAsyncTimeout() -
recycle
public void recycle()Description copied from interface:ProcessorRecycle the processor, ready for the next request which may be on the same connection or a different connection. -
prepareResponse
- Throws:
IOException
-
finishResponse
- Throws:
IOException
-
ack
-
flush
- Throws:
IOException
-
available
protected abstract int available(boolean doRead) -
setRequestBody
-
setSwallowResponse
protected abstract void setSwallowResponse() -
disableSwallowRequest
protected abstract void disableSwallowRequest() -
getPopulateRequestAttributesFromSocket
protected boolean getPopulateRequestAttributesFromSocket()Processors that populate request attributes directly (e.g. AJP) should over-ride this method and returnfalse.- Returns:
trueif the SocketWrapper should be used to populate the request attributes, otherwisefalse.
-
populateRequestAttributeRemoteHost
protected void populateRequestAttributeRemoteHost()Populate the remote host request attribute. Processors (e.g. AJP) that populate this from an alternative source should override this method. -
populateSslRequestAttributes
protected void populateSslRequestAttributes()Populate the TLS related request attributes from theSSLSupportinstance associated with this processor. Protocols that populate TLS attributes from a different source (e.g. AJP) should override this method. -
sslReHandShake
Processors that can perform a TLS re-handshake (e.g. HTTP/1.1) should override this method and implement the re-handshake.- 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
-
processSocketEvent
-
isReadyForRead
protected boolean isReadyForRead() -
isRequestBodyFullyRead
protected abstract boolean isRequestBodyFullyRead() -
registerReadInterest
protected abstract void registerReadInterest() -
isReadyForWrite
protected abstract boolean isReadyForWrite() -
executeDispatches
protected void executeDispatches() -
getUpgradeToken
Generate an upgrade token. Processors that implement HTTP upgrade must override this method and provide the necessary token.- Specified by:
getUpgradeTokenin interfaceProcessor- Returns:
- An upgrade token encapsulating the information required to process the upgrade request
-
doHttpUpgrade
Process an HTTP upgrade. Processors that support HTTP upgrade should override this method and process the provided token.- Parameters:
upgradeToken- Contains all the information necessary for the Processor to process the upgrade- Throws:
UnsupportedOperationException- if the protocol does not support HTTP upgrade
-
getLeftoverInput
Allows retrieving additional input during the upgrade process. Processors that implement HTTP upgrade must override this method.- Specified by:
getLeftoverInputin interfaceProcessor- Returns:
- leftover bytes
-
isUpgrade
public boolean isUpgrade()Processors that implement HTTP upgrade must override this method. -
isPushSupported
protected boolean isPushSupported()Protocols that support push should override this method and returntrue.- Returns:
trueif push is supported by this processor, otherwisefalse.
-
doPush
Process a push. Processors that support push should override this method and process the provided token.- Parameters:
pushTarget- Contains all the information necessary for the Processor to process the push request- Throws:
UnsupportedOperationException- if the protocol does not support push
-
isTrailerFieldsReady
protected abstract boolean isTrailerFieldsReady() -
isTrailerFieldsSupported
protected boolean isTrailerFieldsSupported()Protocols that support trailer fields should override this method and returntrue.- Returns:
trueif trailer fields are supported by this processor, otherwisefalse.
-
getProtocolRequestId
Protocols that provide per HTTP request IDs (e.g. Stream ID for HTTP/2) should override this method and return the appropriate ID.- Returns:
- The ID associated with this request or the empty string if no such ID is defined
-
getServletConnection
Protocols must override this method and return an appropriate ServletConnection instance- Returns:
- the ServletConnection instance associated with the current request.
-
flushBufferedWrite
Flush any pending writes. Used during non-blocking writes to flush any remaining data from a previous incomplete write.- Returns:
trueif 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
Perform any necessary clean-up processing if the dispatch resulted in the completion of processing for the current request.- Returns:
- The state to return for the socket once the clean-up for the current request has completed
- Throws:
IOException- If an I/O error occurs while attempting to end the request
-
logAccess
Description copied from class:AbstractProcessorLightAdd an entry to the access log for a failed connection attempt.- Overrides:
logAccessin classAbstractProcessorLight- Parameters:
socketWrapper- The connection to process- Throws:
IOException- If an I/O error occurs during the processing of the request
-