Class HttpReceiver

java.lang.Object
org.eclipse.jetty.client.HttpReceiver
Direct Known Subclasses:
HttpReceiverOverFCGI, HttpReceiverOverHTTP, HttpReceiverOverHTTP2, HttpReceiverOverHTTP3

public abstract class HttpReceiver extends Object
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:

  1. responseBegin(HttpExchange), when the HTTP response data containing the HTTP status code is available
  2. responseHeader(HttpExchange, HttpField), when an HTTP field is available
  3. responseHeaders(HttpExchange), when all HTTP headers are available
  4. responseContent(HttpExchange, ByteBuffer, Callback), when HTTP content is available
  5. responseSuccess(HttpExchange), when the response is successful
At any time, subclasses may invoke responseFailure(Throwable) 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) 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 Details

    • HttpReceiver

      protected HttpReceiver(HttpChannel channel)
  • Method Details

    • getHttpChannel

      protected HttpChannel getHttpChannel()
    • demand

      protected long demand()
    • hasDemandOrStall

      protected boolean hasDemandOrStall()
    • getHttpExchange

      protected HttpExchange getHttpExchange()
    • getHttpDestination

      protected HttpDestination getHttpDestination()
    • isFailed

      public boolean isFailed()
    • receive

      protected void receive()
    • responseBegin

      protected boolean responseBegin(HttpExchange exchange)
      Method to be invoked when the response status code is available.

      Subclasses must have set the response status code on the Response object of the HttpExchange prior invoking this method.

      This method takes case of notifying Response.BeginListeners.

      Parameters:
      exchange - the HTTP exchange
      Returns:
      whether the processing should continue
    • responseHeader

      protected boolean responseHeader(HttpExchange exchange, HttpField field)
      Method to be invoked when a response HTTP header is available.

      Subclasses must not have added the header to the Response object of the HttpExchange prior invoking this method.

      This method takes case of notifying Response.HeaderListeners and storing cookies.

      Parameters:
      exchange - the HTTP exchange
      field - the response HTTP field
      Returns:
      whether the processing should continue
    • storeCookie

      protected void storeCookie(URI uri, HttpField field)
    • responseHeaders

      protected boolean responseHeaders(HttpExchange exchange)
      Method to be invoked after all response HTTP headers are available.

      This method takes case of notifying Response.HeadersListeners.

      Parameters:
      exchange - the HTTP exchange
      Returns:
      whether the processing should continue
    • responseContent

      protected boolean responseContent(HttpExchange exchange, ByteBuffer buffer, Callback callback)
      Method to be invoked when response HTTP content is available.

      This method takes case of decoding the content, if necessary, and notifying Response.ContentListeners.

      Parameters:
      exchange - the HTTP exchange
      buffer - the response HTTP content buffer
      callback - the callback
      Returns:
      whether the processing should continue
    • responseSuccess

      protected boolean responseSuccess(HttpExchange exchange)
      Method to be invoked when the response is successful.

      This method takes case of notifying Response.SuccessListeners and possibly Response.CompleteListeners (if the exchange is completed).

      Parameters:
      exchange - the HTTP exchange
      Returns:
      whether the response was processed as successful
    • responseFailure

      protected boolean responseFailure(Throwable failure)
      Method to be invoked when the response is failed.

      This method takes care of notifying Response.FailureListeners.

      Parameters:
      failure - the response failure
      Returns:
      whether the response was processed as failed
    • 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

      public boolean abort(HttpExchange exchange, Throwable failure)
    • toString

      public String toString()
      Overrides:
      toString in class Object