Interface ContentProducer


public interface ContentProducer
ContentProducer is the bridge between HttpInput and HttpChannel. It wraps a HttpChannel and uses the HttpChannel.needContent(), HttpChannel.produceContent() and HttpChannel.failAllContent(Throwable) methods, tracks the current state of the channel's input by updating the HttpChannelState and provides the necessary mechanism to unblock the reader thread when using a blocking implementation or to know if the reader thread has to be rescheduled when using an async implementation.
  • Method Details

    • lock

      AutoLock lock()
      Lock this instance. The lock must be held before any of this instance's method can be called, and must be released afterward.
      Returns:
      the lock that is guarding this instance.
    • recycle

      void recycle()
      Clear the interceptor and call Destroyable.destroy() on it if it implements Destroyable. A recycled ContentProducer will only produce special content with a non-null error until reopen() is called.
    • reopen

      void reopen()
      Reset all internal state, making this is instance logically equivalent to a freshly allocated one.
    • consumeAll

      boolean consumeAll()
      Fail all content currently available in this ContentProducer instance as well as in the underlying HttpChannel. This call is always non-blocking. Doesn't change state.
      Returns:
      true if EOF was reached.
    • checkMinDataRate

      void checkMinDataRate()
      Check if the current data rate consumption is above the minimal rate. Abort the channel, fail the content currently available and throw a BadMessageException(REQUEST_TIMEOUT_408) if the check fails.
    • getRawContentArrived

      long getRawContentArrived()
      Get the byte count produced by the underlying HttpChannel. This call is always non-blocking. Doesn't change state.
      Returns:
      the byte count produced by the underlying HttpChannel.
    • available

      int available()
      Get the byte count that can immediately be read from this ContentProducer instance or the underlying HttpChannel. This call is always non-blocking. Doesn't change state.
      Returns:
      the available byte count.
    • hasContent

      boolean hasContent()
      Check if this ContentProducer instance contains some content without querying the underlying HttpChannel. This call is always non-blocking. Doesn't change state. Doesn't query the HttpChannel.
      Returns:
      true if this ContentProducer instance contains content, false otherwise.
    • isError

      boolean isError()
      Check if the underlying HttpChannel reached an error content. This call is always non-blocking. Doesn't change state. Doesn't query the HttpChannel.
      Returns:
      true if the underlying HttpChannel reached an error content, false otherwise.
    • nextContent

      HttpInput.Content nextContent()
      Get the next content that can be read from or that describes the special condition that was reached (error, eof). This call may or may not block until some content is available, depending on the implementation. The returned content is decoded by the interceptor set with setInterceptor(HttpInput.Interceptor) or left as-is if no intercept is set. After this call, state can be either of UNREADY or IDLE.
      Returns:
      the next content that can be read from or null if the implementation does not block and has no available content.
    • reclaim

      void reclaim(HttpInput.Content content)
      Free up the content by calling Callback.succeeded() on it and updating this instance' internal state.
    • isReady

      boolean isReady()
      Check if this ContentProducer instance has some content that can be read without blocking. If there is some, the next call to nextContent() will not block. If there isn't any and the implementation does not block, this method will trigger a ReadListener callback once some content is available. This call is always non-blocking.
      Returns:
      true if some content is immediately available, false otherwise.
    • getInterceptor

      HttpInput.Interceptor getInterceptor()
      Returns:
      The HttpInput.Interceptor, or null if none set.
    • setInterceptor

      void setInterceptor(HttpInput.Interceptor interceptor)
      Set the interceptor.
      Parameters:
      interceptor - The interceptor to use.
    • onContentProducible

      boolean onContentProducible()
      Wake up the thread that is waiting for the next content. After this call, state can be READY.
      Returns:
      true if the thread has to be rescheduled, false otherwise.