Home / Class/ FlowControlledHeaders Class — netty Architecture

FlowControlledHeaders Class — netty Architecture

Architecture documentation for the FlowControlledHeaders class in DefaultHttp2ConnectionEncoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  744ef0a5_0445_f8d5_b780_329fc3f741f7["FlowControlledHeaders"]
  6ee2373c_9254_f504_1a3e_e58265550287["DefaultHttp2ConnectionEncoder.java"]
  744ef0a5_0445_f8d5_b780_329fc3f741f7 -->|defined in| 6ee2373c_9254_f504_1a3e_e58265550287
  3cbf6447_3cb5_f2c9_125c_6b623cb2aab0["FlowControlledHeaders()"]
  744ef0a5_0445_f8d5_b780_329fc3f741f7 -->|method| 3cbf6447_3cb5_f2c9_125c_6b623cb2aab0
  6dda0308_832e_31f8_38c9_0a9e3e2d0dab["size()"]
  744ef0a5_0445_f8d5_b780_329fc3f741f7 -->|method| 6dda0308_832e_31f8_38c9_0a9e3e2d0dab
  68ae7f94_6431_c8f3_425c_0abbb5fa9c40["error()"]
  744ef0a5_0445_f8d5_b780_329fc3f741f7 -->|method| 68ae7f94_6431_c8f3_425c_0abbb5fa9c40
  d9006e3b_57b1_d5dd_3732_26d895ab9344["write()"]
  744ef0a5_0445_f8d5_b780_329fc3f741f7 -->|method| d9006e3b_57b1_d5dd_3732_26d895ab9344
  54ad0ead_8814_ee90_ecf9_bbcffdf29559["merge()"]
  744ef0a5_0445_f8d5_b780_329fc3f741f7 -->|method| 54ad0ead_8814_ee90_ecf9_bbcffdf29559

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder.java lines 541–594

    private final class FlowControlledHeaders extends FlowControlledBase {
        private final Http2Headers headers;
        private final boolean hasPriority;
        private final int streamDependency;
        private final short weight;
        private final boolean exclusive;

        FlowControlledHeaders(Http2Stream stream, Http2Headers headers, boolean hasPriority,
                              int streamDependency, short weight, boolean exclusive,
                              int padding, boolean endOfStream, ChannelPromise promise) {
            super(stream, padding, endOfStream, promise.unvoid());
            this.headers = headers;
            this.hasPriority = hasPriority;
            this.streamDependency = streamDependency;
            this.weight = weight;
            this.exclusive = exclusive;
        }

        @Override
        public int size() {
            return 0;
        }

        @Override
        public void error(ChannelHandlerContext ctx, Throwable cause) {
            if (ctx != null) {
                lifecycleManager.onError(ctx, true, cause);
            }
            promise.tryFailure(cause);
        }

        @Override
        public void write(ChannelHandlerContext ctx, int allowedBytes) {
            boolean isInformational = validateHeadersSentState(stream, headers, connection.isServer(), endOfStream);
            // The code is currently requiring adding this listener before writing, in order to call onError() before
            // closeStreamLocal().
            promise.addListener(this);

            ChannelFuture f = sendHeaders(frameWriter, ctx, stream.id(), headers, hasPriority, streamDependency,
                    weight, exclusive, padding, endOfStream, promise);
            // Writing headers may fail during the encode state if they violate HPACK limits.
            Throwable failureCause = f.cause();
            if (failureCause == null) {
                // This just sets internal stream state which is used elsewhere in the codec and doesn't
                // necessarily mean the write will complete successfully.
                stream.headersSent(isInformational);
            }
        }

        @Override
        public boolean merge(ChannelHandlerContext ctx, Http2RemoteFlowController.FlowControlled next) {
            return false;
        }
    }

Frequently Asked Questions

What is the FlowControlledHeaders class?
FlowControlledHeaders is a class in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder.java.
Where is FlowControlledHeaders defined?
FlowControlledHeaders is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder.java at line 541.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free