Home / Function/ ChannelFuture() — netty Function Reference

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

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