Class HttpReceiver
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
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidabort(HttpExchange exchange, Throwable failure, Promise<Boolean> promise) protected voiddispose()Disposes the state of this HttpReceiver.protected abstract voidfailAndClose(Throwable failure) Fails the receiver and closes the underlying stream.protected HttpChannelprotected HttpDestinationprotected HttpExchangeprotected booleanbooleanisFailed()protected abstract voidPrepare for the next step after an interim response was read.protected abstract Content.Chunkread(boolean fillInterestIfNeeded) Reads a chunk of data.protected voidreset()Resets the state of this HttpReceiver.protected voidresponseBegin(HttpExchange exchange) Method to be invoked when the response status code is available.protected voidresponseContentAvailable(HttpExchange exchange) Method to be invoked when response content is available to be read.protected voidresponseFailure(Throwable failure, Promise<Boolean> promise) Method to be invoked when the response is failed.protected voidresponseHeader(HttpExchange exchange, HttpField field) Method to be invoked when a response HTTP header is available.protected voidresponseHeaders(HttpExchange exchange) Method to be invoked after all response HTTP headers are available.protected voidresponseSuccess(HttpExchange exchange, Runnable afterSuccessTask) Method to be invoked when the response is successful.protected voidstoreCookie(URI uri, HttpField field) toString()
-
Constructor Details
-
HttpReceiver
-
-
Method Details
-
read
Reads a chunk of data.If no data was read,
nullis returned and iffillInterestIfNeededistruethen 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
nullif 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
Responseobject of theHttpExchangeprior invoking this method.This method takes case of notifying
Response.BeginListeners.- 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
Responseobject of theHttpExchangeprior invoking this method.This method takes case of notifying
Response.HeaderListeners 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.HeadersListeners.- 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.Sourcepassed 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.SuccessListeners and possiblyResponse.CompleteListeners (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.FailureListeners.- 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
-