ChannelFuture() — netty Function Reference
Architecture documentation for the ChannelFuture() function in DefaultHttp2FrameWriter.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD fe7bfdb5_730f_310a_cec0_582ba7362f95["ChannelFuture()"] 15f148d0_1b4a_244f_1956_157fbe75e59a["DefaultHttp2FrameWriter"] fe7bfdb5_730f_310a_cec0_582ba7362f95 -->|defined in| 15f148d0_1b4a_244f_1956_157fbe75e59a 70c16ebc_c549_d265_0be2_1f4c7cb8e813["verifyStreamId()"] fe7bfdb5_730f_310a_cec0_582ba7362f95 -->|calls| 70c16ebc_c549_d265_0be2_1f4c7cb8e813 3c7062cb_c10f_46c2_78ff_fad8e19f9d1a["writePaddingLength()"] fe7bfdb5_730f_310a_cec0_582ba7362f95 -->|calls| 3c7062cb_c10f_46c2_78ff_fad8e19f9d1a 6a049d1f_c405_e97a_f598_c0b1f527f8b4["paddingBytes()"] fe7bfdb5_730f_310a_cec0_582ba7362f95 -->|calls| 6a049d1f_c405_e97a_f598_c0b1f527f8b4 081b2510_ce8a_a65a_45d1_06400c5c5adf["verifyStreamOrConnectionId()"] fe7bfdb5_730f_310a_cec0_582ba7362f95 -->|calls| 081b2510_ce8a_a65a_45d1_06400c5c5adf 2082dc42_7809_f8bc_b329_9ff15dc486ce["verifyWeight()"] fe7bfdb5_730f_310a_cec0_582ba7362f95 -->|calls| 2082dc42_7809_f8bc_b329_9ff15dc486ce 3f586cd7_0e4c_cc62_3d7d_314fc6116b36["verifyErrorCode()"] fe7bfdb5_730f_310a_cec0_582ba7362f95 -->|calls| 3f586cd7_0e4c_cc62_3d7d_314fc6116b36 05faaa9d_ff3e_30fe_c3d4_a242df57bfbe["verifyWindowSizeIncrement()"] fe7bfdb5_730f_310a_cec0_582ba7362f95 -->|calls| 05faaa9d_ff3e_30fe_c3d4_a242df57bfbe style fe7bfdb5_730f_310a_cec0_582ba7362f95 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2FrameWriter.java lines 147–267
@Override
public ChannelFuture writeData(ChannelHandlerContext ctx, int streamId, ByteBuf data,
int padding, boolean endStream, ChannelPromise promise) {
final SimpleChannelPromiseAggregator promiseAggregator =
new SimpleChannelPromiseAggregator(promise, ctx.channel(), ctx.executor());
ByteBuf frameHeader = null;
try {
verifyStreamId(streamId, STREAM_ID);
verifyPadding(padding);
int remainingData = data.readableBytes();
Http2Flags flags = new Http2Flags();
flags.endOfStream(false);
flags.paddingPresent(false);
// Fast path to write frames of payload size maxFrameSize first.
if (remainingData > maxFrameSize) {
frameHeader = ctx.alloc().buffer(FRAME_HEADER_LENGTH);
writeFrameHeaderInternal(frameHeader, maxFrameSize, DATA, flags, streamId);
do {
// Write the header.
ctx.write(frameHeader.retainedSlice(), promiseAggregator.newPromise());
// Write the payload.
ctx.write(data.readRetainedSlice(maxFrameSize), promiseAggregator.newPromise());
remainingData -= maxFrameSize;
// Stop iterating if remainingData == maxFrameSize so we can take care of reference counts below.
} while (remainingData > maxFrameSize);
}
if (padding == 0) {
// Write the header.
if (frameHeader != null) {
frameHeader.release();
frameHeader = null;
}
ByteBuf frameHeader2 = ctx.alloc().buffer(FRAME_HEADER_LENGTH);
flags.endOfStream(endStream);
writeFrameHeaderInternal(frameHeader2, remainingData, DATA, flags, streamId);
ctx.write(frameHeader2, promiseAggregator.newPromise());
// Write the payload.
ByteBuf lastFrame = data.readSlice(remainingData);
data = null;
ctx.write(lastFrame, promiseAggregator.newPromise());
} else {
if (remainingData != maxFrameSize) {
if (frameHeader != null) {
frameHeader.release();
frameHeader = null;
}
} else {
remainingData -= maxFrameSize;
// Write the header.
ByteBuf lastFrame;
if (frameHeader == null) {
lastFrame = ctx.alloc().buffer(FRAME_HEADER_LENGTH);
writeFrameHeaderInternal(lastFrame, maxFrameSize, DATA, flags, streamId);
} else {
lastFrame = frameHeader.slice();
frameHeader = null;
}
ctx.write(lastFrame, promiseAggregator.newPromise());
// Write the payload.
lastFrame = data.readableBytes() != maxFrameSize ? data.readSlice(maxFrameSize) : data;
data = null;
ctx.write(lastFrame, promiseAggregator.newPromise());
}
do {
int frameDataBytes = min(remainingData, maxFrameSize);
int framePaddingBytes = min(padding, max(0, maxFrameSize - 1 - frameDataBytes));
// Decrement the remaining counters.
padding -= framePaddingBytes;
remainingData -= frameDataBytes;
// Write the header.
ByteBuf frameHeader2 = ctx.alloc().buffer(DATA_FRAME_HEADER_LENGTH);
flags.endOfStream(endStream && remainingData == 0 && padding == 0);
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does ChannelFuture() do?
ChannelFuture() is a function in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2FrameWriter.java.
Where is ChannelFuture() defined?
ChannelFuture() is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2FrameWriter.java at line 147.
What does ChannelFuture() call?
ChannelFuture() calls 7 function(s): paddingBytes, verifyErrorCode, verifyStreamId, verifyStreamOrConnectionId, verifyWeight, verifyWindowSizeIncrement, writePaddingLength.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free