Class HttpChannelOverHttp

java.lang.Object
org.eclipse.jetty.server.HttpChannel
org.eclipse.jetty.server.HttpChannelOverHttp
All Implemented Interfaces:
Runnable, ComplianceViolation.Listener, HttpParser.HttpHandler, HttpParser.RequestHandler, HttpOutput.Interceptor

public class HttpChannelOverHttp extends HttpChannel implements HttpParser.RequestHandler, ComplianceViolation.Listener
An HttpChannel customized to be transported over the HTTP/1 protocol
  • Constructor Details

  • Method Details

    • abort

      public void abort(Throwable failure)
      Description copied from class: HttpChannel
      If a write or similar operation to this channel fails, then this method should be called.

      The standard implementation calls HttpTransport.abort(Throwable).

      Overrides:
      abort in class HttpChannel
      Parameters:
      failure - the failure that caused the abort.
    • needContent

      public boolean needContent()
      Description copied from class: HttpChannel
      Notify the channel that content is needed. If some content is immediately available, true is returned and HttpChannel.produceContent() has to be called and will return a non-null object. If no content is immediately available, an attempt to produce content must be made; if new content has been produced, true is returned; otherwise HttpInput.onContentProducible() is called once some content arrives and HttpChannel.produceContent() can be called without returning null. If a failure happens, then HttpInput.onContentProducible() will be called and an error content will return the error on the next call to HttpChannel.produceContent().
      Specified by:
      needContent in class HttpChannel
      Returns:
      true if content is immediately available.
    • produceContent

      public HttpInput.Content produceContent()
      Description copied from class: HttpChannel
      Produce a HttpInput.Content object with data currently stored within the channel. The produced content can be special (meaning calling HttpInput.Content.isSpecial() returns true) if the channel reached a special state, like EOF or an error. Once a special content has been returned, all subsequent calls to this method will always return a special content of the same kind and HttpChannel.needContent() will always return true. The returned content is "raw", i.e.: not decoded.
      Specified by:
      produceContent in class HttpChannel
      Returns:
      a HttpInput.Content object if one is immediately available without blocking, null otherwise.
    • failAllContent

      public boolean failAllContent(Throwable failure)
      Description copied from class: HttpChannel
      Fail all content that is currently stored within the channel.
      Specified by:
      failAllContent in class HttpChannel
      Parameters:
      failure - the failure to fail the content with.
      Returns:
      true if EOF was reached while failing all content, false otherwise.
    • badMessage

      public void badMessage(BadMessageException failure)
      Description copied from interface: HttpParser.HttpHandler
      Called to signal that a bad HTTP message has been received.
      Specified by:
      badMessage in interface HttpParser.HttpHandler
      Parameters:
      failure - the failure with the bad message information
    • content

      public boolean content(ByteBuffer buffer)
      Specified by:
      content in interface HttpParser.HttpHandler
    • contentComplete

      public boolean contentComplete()
      Specified by:
      contentComplete in interface HttpParser.HttpHandler
    • continue100

      public void continue100(int available) throws IOException
      If the associated response has the Expect header set to 100 Continue, then accessing the input stream indicates that the handler/servlet is ready for the request body and thus a 100 Continue response is sent.
      Overrides:
      continue100 in class HttpChannel
      Parameters:
      available - estimate of the number of bytes that are available
      Throws:
      IOException - if the InputStream cannot be created
    • earlyEOF

      public void earlyEOF()
      Description copied from interface: HttpParser.HttpHandler
      Called to signal that an EOF was received unexpectedly during the parsing of an HTTP message
      Specified by:
      earlyEOF in interface HttpParser.HttpHandler
    • eof

      protected boolean eof()
      Description copied from class: HttpChannel
      Mark the channel's input as EOF.
      Specified by:
      eof in class HttpChannel
      Returns:
      true if the channel needs to be rescheduled.
    • failed

      public boolean failed(Throwable x)
      Description copied from class: HttpChannel
      Fail the channel's input.
      Specified by:
      failed in class HttpChannel
      Parameters:
      x - the failure.
      Returns:
      true if the channel needs to be rescheduled.
    • getTunnellingEndPoint

      public EndPoint getTunnellingEndPoint()
      Overrides:
      getTunnellingEndPoint in class HttpChannel
    • headerComplete

      public boolean headerComplete()
      Specified by:
      headerComplete in interface HttpParser.HttpHandler
    • isExpecting100Continue

      public boolean isExpecting100Continue()
      Overrides:
      isExpecting100Continue in class HttpChannel
    • isExpecting102Processing

      public boolean isExpecting102Processing()
      Overrides:
      isExpecting102Processing in class HttpChannel
    • isTunnellingSupported

      public boolean isTunnellingSupported()
      Overrides:
      isTunnellingSupported in class HttpChannel
    • isUseOutputDirectByteBuffers

      public boolean isUseOutputDirectByteBuffers()
      Overrides:
      isUseOutputDirectByteBuffers in class HttpChannel
    • messageComplete

      public boolean messageComplete()
      Specified by:
      messageComplete in interface HttpParser.HttpHandler
    • onComplianceViolation

      public void onComplianceViolation(ComplianceViolation.Mode mode, ComplianceViolation violation, String details)
      Specified by:
      onComplianceViolation in interface ComplianceViolation.Listener
    • parsedHeader

      public void parsedHeader(HttpField field)
      Description copied from interface: HttpParser.HttpHandler
      This is the method called by parser when an HTTP Header name and value is found
      Specified by:
      parsedHeader in interface HttpParser.HttpHandler
      Parameters:
      field - The field parsed
    • parsedTrailer

      public void parsedTrailer(HttpField field)
      Description copied from interface: HttpParser.HttpHandler
      This is the method called by parser when an HTTP Trailer name and value is found
      Specified by:
      parsedTrailer in interface HttpParser.HttpHandler
      Parameters:
      field - The field parsed
    • recycle

      public void recycle()
      Overrides:
      recycle in class HttpChannel
    • servletUpgrade

      public void servletUpgrade()
    • startRequest

      public void startRequest(String method, String uri, HttpVersion version)
      Description copied from interface: HttpParser.RequestHandler
      This is the method called by parser when the HTTP request line is parsed
      Specified by:
      startRequest in interface HttpParser.RequestHandler
      Parameters:
      method - The method
      uri - The raw bytes of the URI. These are copied into a ByteBuffer that will not be changed until this parser is reset and reused.
      version - the http version in use
    • checkAndPrepareUpgrade

      protected boolean checkAndPrepareUpgrade()
      Description copied from class: HttpChannel

      Checks whether the processing of the request resulted in an upgrade, and if so performs upgrade preparation steps before the upgrade response is sent back to the client.

      This avoids a race where the server is unprepared if the client sends data immediately after having received the upgrade response.

      Overrides:
      checkAndPrepareUpgrade in class HttpChannel
      Returns:
      true if the channel is not complete and more processing is required, typically because sendError has been called.
    • handleException

      protected void handleException(Throwable x)
      Description copied from class: HttpChannel

      Sends an error 500, performing a special logic to detect whether the request is suspended, to avoid concurrent writes from the application.

      It may happen that the application suspends, and then throws an exception, while an application spawned thread writes the response content; in such case, we attempt to commit the error directly bypassing the ErrorHandler mechanisms and the response OutputStream.

      Overrides:
      handleException in class HttpChannel
      Parameters:
      x - the Throwable that caused the problem