Class DefaultHttp2ConnectionEncoder.FlowControlledData
java.lang.Object
io.netty.handler.codec.http2.DefaultHttp2ConnectionEncoder.FlowControlledBase
io.netty.handler.codec.http2.DefaultHttp2ConnectionEncoder.FlowControlledData
- All Implemented Interfaces:
ChannelFutureListener, Http2RemoteFlowController.FlowControlled, GenericFutureListener<ChannelFuture>, EventListener
- Enclosing class:
DefaultHttp2ConnectionEncoder
private final class DefaultHttp2ConnectionEncoder.FlowControlledData
extends DefaultHttp2ConnectionEncoder.FlowControlledBase
Wrap a DATA frame so it can be written subject to flow-control. Note that this implementation assumes it
only writes padding once for the entire payload as opposed to writing it once per-frame. This makes the
size() calculation deterministic thereby greatly simplifying the implementation.
If frame-splitting is required to fit within max-frame-size and flow-control constraints we ensure that the passed promise is not completed until last frame write.
-
Field Summary
FieldsFields inherited from class DefaultHttp2ConnectionEncoder.FlowControlledBase
endOfStream, padding, promise, streamFields inherited from interface ChannelFutureListener
CLOSE, CLOSE_ON_FAILURE, FIRE_EXCEPTION_ON_FAILURE -
Constructor Summary
ConstructorsConstructorDescriptionFlowControlledData(Http2Stream stream, ByteBuf buf, int padding, boolean endOfStream, ChannelPromise promise) -
Method Summary
Modifier and TypeMethodDescriptionvoiderror(ChannelHandlerContext ctx, Throwable cause) Called to indicate that an error occurred before this object could be completely written.booleanMerge the contents of thenextmessage into this message so they can be written out as one unit.intsize()The size of the payload in terms of bytes applied to the flow-control window.voidwrite(ChannelHandlerContext ctx, int allowedBytes) Writes up toallowedBytesof the encapsulated payload to the stream.Methods inherited from class DefaultHttp2ConnectionEncoder.FlowControlledBase
operationComplete, writeComplete
-
Field Details
-
queue
-
dataSize
private int dataSize
-
-
Constructor Details
-
FlowControlledData
FlowControlledData(Http2Stream stream, ByteBuf buf, int padding, boolean endOfStream, ChannelPromise promise)
-
-
Method Details
-
size
public int size()Description copied from interface:Http2RemoteFlowController.FlowControlledThe size of the payload in terms of bytes applied to the flow-control window. Some payloads likeHEADERframes 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 likeDATAframes have both their payload and padding count against flow-control. -
error
Description copied from interface:Http2RemoteFlowController.FlowControlledCalled to indicate that an error occurred before this object could be completely written.The
Http2RemoteFlowControllerwill make exactly one call to either this method orHttp2RemoteFlowController.FlowControlled.writeComplete().- Parameters:
ctx- The context to use if any communication needs to occur as a result of the error. This may benullif an exception occurs when the connection has not been established yet.cause- of the error.
-
write
Description copied from interface:Http2RemoteFlowController.FlowControlledWrites up toallowedBytesof 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
Http2RemoteFlowControllerwill make a call toHttp2RemoteFlowController.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.FlowControlledMerge the contents of thenextmessage 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:
trueifnextwas successfully merged and does not need to be enqueued,falseotherwise.
-