Class DefaultHttp2ConnectionEncoder.FlowControlledHeaders

java.lang.Object
io.netty.handler.codec.http2.DefaultHttp2ConnectionEncoder.FlowControlledBase
io.netty.handler.codec.http2.DefaultHttp2ConnectionEncoder.FlowControlledHeaders
All Implemented Interfaces:
ChannelFutureListener, Http2RemoteFlowController.FlowControlled, GenericFutureListener<ChannelFuture>, java.util.EventListener
Enclosing class:
DefaultHttp2ConnectionEncoder

private final class DefaultHttp2ConnectionEncoder.FlowControlledHeaders extends DefaultHttp2ConnectionEncoder.FlowControlledBase
Wrap headers so they can be written subject to flow-control. While headers do not have cost against the flow-control window their order with respect to other frames must be maintained, hence if a DATA frame is blocked on flow-control a HEADER frame must wait until this frame has been written.
  • Field Details

    • headers

      private final Http2Headers headers
    • hasPriority

      private final boolean hasPriority
    • streamDependency

      private final int streamDependency
    • weight

      private final short weight
    • exclusive

      private final boolean exclusive
  • Constructor Details

    • FlowControlledHeaders

      FlowControlledHeaders(Http2Stream stream, Http2Headers headers, boolean hasPriority, int streamDependency, short weight, boolean exclusive, int padding, boolean endOfStream, ChannelPromise promise)
  • Method Details

    • size

      public int size()
      Description copied from interface: Http2RemoteFlowController.FlowControlled
      The size of the payload in terms of bytes applied to the flow-control window. Some payloads like HEADER frames have no cost against flow control and would return 0 for this value even though they produce a non-zero number of bytes on the wire. Other frames like DATA frames have both their payload and padding count against flow-control.
    • error

      public void error(ChannelHandlerContext ctx, java.lang.Throwable cause)
      Description copied from interface: Http2RemoteFlowController.FlowControlled
      Called to indicate that an error occurred before this object could be completely written.

      The Http2RemoteFlowController will make exactly one call to either this method or Http2RemoteFlowController.FlowControlled.writeComplete().

      Parameters:
      ctx - The context to use if any communication needs to occur as a result of the error. This may be null if an exception occurs when the connection has not been established yet.
      cause - of the error.
    • write

      public void write(ChannelHandlerContext ctx, int allowedBytes)
      Description copied from interface: Http2RemoteFlowController.FlowControlled
      Writes up to allowedBytes of the encapsulated payload to the stream. Note that a value of 0 may be passed which will allow payloads with flow-control size == 0 to be written. The flow-controller may call this method multiple times with different values until the payload is fully written, i.e it's size after the write is 0.

      When an exception is thrown the Http2RemoteFlowController will make a call to Http2RemoteFlowController.FlowControlled.error(ChannelHandlerContext, Throwable).

      Parameters:
      ctx - The context to use for writing.
      allowedBytes - an upper bound on the number of bytes the payload can write at this time.
    • merge

      Description copied from interface: Http2RemoteFlowController.FlowControlled
      Merge the contents of the next message into this message so they can be written out as one unit. This allows many small messages to be written as a single DATA frame.
      Returns:
      true if next was successfully merged and does not need to be enqueued, false otherwise.