Class HttpReceiver
- Direct Known Subclasses:
HttpReceiverOverFCGI
,HttpReceiverOverHTTP
,HttpReceiverOverHTTP2
HttpReceiver
provides the abstract code to implement the various steps of the receive of HTTP responses.
HttpReceiver
maintains a state machine that is updated when the steps of receiving a response are executed.
Subclasses must handle the transport-specific details, for example how to read from the raw socket and how to parse the bytes read from the socket. Then they have to call the methods defined in this class in the following order:
responseBegin(HttpExchange)
, when the HTTP response data containing the HTTP status code is availableresponseHeader(HttpExchange, HttpField)
, when an HTTP field is availableresponseHeaders(HttpExchange)
, when all HTTP headers are availableresponseSuccess(HttpExchange, Runnable)
, when the response is successful
responseFailure(Throwable, Promise)
to indicate that the response has failed
(for example, because of I/O exceptions).
At any time, user threads may abort the response which will cause responseFailure(Throwable, Promise)
to be
invoked.
The state machine maintained by this class ensures that the response steps are not executed by an I/O thread if the response has already been failed.
- See Also:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
abort
(HttpExchange exchange, Throwable failure, Promise<Boolean> promise) protected void
dispose()
Disposes the state of this HttpReceiver.protected abstract void
failAndClose
(Throwable failure) Fails the receiver and closes the underlying stream.protected HttpChannel
protected HttpDestination
protected HttpExchange
protected boolean
boolean
isFailed()
protected abstract void
Prepare for the next step after an interim response was read.protected abstract Content.Chunk
read
(boolean fillInterestIfNeeded) Reads a chunk of data.protected void
reset()
Resets the state of this HttpReceiver.protected void
responseBegin
(HttpExchange exchange) Method to be invoked when the response status code is available.protected void
responseContentAvailable
(HttpExchange exchange) Method to be invoked when response content is available to be read.protected void
responseFailure
(Throwable failure, Promise<Boolean> promise) Method to be invoked when the response is failed.protected void
responseHeader
(HttpExchange exchange, HttpField field) Method to be invoked when a response HTTP header is available.protected void
responseHeaders
(HttpExchange exchange) Method to be invoked after all response HTTP headers are available.protected void
responseSuccess
(HttpExchange exchange, Runnable afterSuccessTask) Method to be invoked when the response is successful.protected void
storeCookie
(URI uri, HttpField field) toString()
-
Constructor Details
-
HttpReceiver
-
-
Method Details
-
read
Reads a chunk of data.If no data was read,
null
is returned and iffillInterestIfNeeded
istrue
then fill interest is registered.The returned chunk of data may be the last one or an error exactly like
Content.Source.read()
specifies.- Parameters:
fillInterestIfNeeded
- true to register for fill interest when no data was read.- Returns:
- the chunk of data that was read, or
null
if nothing was read.
-
onInterim
protected abstract void onInterim()Prepare for the next step after an interim response was read. -
failAndClose
Fails the receiver and closes the underlying stream.- Parameters:
failure
- the failure.
-
getHttpChannel
-
getHttpExchange
-
getHttpDestination
-
isFailed
public boolean isFailed() -
hasContent
protected boolean hasContent() -
responseBegin
Method to be invoked when the response status code is available.Subclasses must have set the response status code on the
Response
object of theHttpExchange
prior invoking this method.This method takes case of notifying
Response.BeginListener
s.- Parameters:
exchange
- the HTTP exchange
-
responseHeader
Method to be invoked when a response HTTP header is available.Subclasses must not have added the header to the
Response
object of theHttpExchange
prior invoking this method.This method takes case of notifying
Response.HeaderListener
s and storing cookies.- Parameters:
exchange
- the HTTP exchangefield
- the response HTTP field
-
storeCookie
-
responseHeaders
Method to be invoked after all response HTTP headers are available.This method takes care of notifying
Response.HeadersListener
s.- Parameters:
exchange
- the HTTP exchange
-
responseContentAvailable
Method to be invoked when response content is available to be read.This method takes care of ensuring the
Content.Source
passed toResponse.ContentSourceListener.onContentSource(Response, Content.Source)
calls the demand callback. The call to the demand callback is serialized with other events. -
responseSuccess
Method to be invoked when the response is successful.This method takes care of notifying
Response.SuccessListener
s and possiblyResponse.CompleteListener
s (if the exchange is completed).- Parameters:
exchange
- the HTTP exchangeafterSuccessTask
- an optional task to invoke afterwards
-
responseFailure
Method to be invoked when the response is failed.This method takes care of notifying
Response.FailureListener
s.- Parameters:
failure
- the response failure
-
reset
protected void reset()Resets the state of this HttpReceiver.Subclasses should override (but remember to call
super
) to reset their own state.Either this method or
dispose()
is called. -
dispose
protected void dispose()Disposes the state of this HttpReceiver.Subclasses should override (but remember to call
super
) to dispose their own state.Either this method or
reset()
is called. -
abort
-
toString
-