Home / Class/ Http2StreamChannelConfig Class — netty Architecture

Http2StreamChannelConfig Class — netty Architecture

Architecture documentation for the Http2StreamChannelConfig class in AbstractHttp2StreamChannel.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  ec726ae3_04b2_4a4d_cded_16e4166256ed["Http2StreamChannelConfig"]
  53b73d84_de3f_a5ff_9f0d_ff98834dbbb4["AbstractHttp2StreamChannel.java"]
  ec726ae3_04b2_4a4d_cded_16e4166256ed -->|defined in| 53b73d84_de3f_a5ff_9f0d_ff98834dbbb4
  05c992ca_9a57_4a86_b7a9_cbccfc494f15["Http2StreamChannelConfig()"]
  ec726ae3_04b2_4a4d_cded_16e4166256ed -->|method| 05c992ca_9a57_4a86_b7a9_cbccfc494f15
  21a56d30_c450_aeb1_28e9_7a28c6922967["MessageSizeEstimator()"]
  ec726ae3_04b2_4a4d_cded_16e4166256ed -->|method| 21a56d30_c450_aeb1_28e9_7a28c6922967
  fb296a26_f998_a480_57db_2b706912d786["ChannelConfig()"]
  ec726ae3_04b2_4a4d_cded_16e4166256ed -->|method| fb296a26_f998_a480_57db_2b706912d786
  679fa3b0_2c15_4edd_fc50_4c445e33cdf1["getOptions()"]
  ec726ae3_04b2_4a4d_cded_16e4166256ed -->|method| 679fa3b0_2c15_4edd_fc50_4c445e33cdf1
  46f498ce_0941_1826_7051_85c2793588cd["T()"]
  ec726ae3_04b2_4a4d_cded_16e4166256ed -->|method| 46f498ce_0941_1826_7051_85c2793588cd
  858ecbbc_23c8_402a_e077_28f8ef14ee8b["setOption()"]
  ec726ae3_04b2_4a4d_cded_16e4166256ed -->|method| 858ecbbc_23c8_402a_e077_28f8ef14ee8b

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/AbstractHttp2StreamChannel.java lines 1198–1267

    private static final class Http2StreamChannelConfig extends DefaultChannelConfig {

        volatile boolean autoStreamFlowControl = true;
        Http2StreamChannelConfig(Channel channel) {
            super(channel);
        }

        @Override
        public MessageSizeEstimator getMessageSizeEstimator() {
            return FlowControlledFrameSizeEstimator.INSTANCE;
        }

        @Override
        public ChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) {
            throw new UnsupportedOperationException();
        }

        @Override
        public ChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) {
            if (!(allocator.newHandle() instanceof RecvByteBufAllocator.ExtendedHandle)) {
                throw new IllegalArgumentException("allocator.newHandle() must return an object of type: " +
                        RecvByteBufAllocator.ExtendedHandle.class);
            }
            super.setRecvByteBufAllocator(allocator);
            return this;
        }

        @Override
        public Map<ChannelOption<?>, Object> getOptions() {
            return getOptions(
                    super.getOptions(),
                    Http2StreamChannelOption.AUTO_STREAM_FLOW_CONTROL);
        }

        @SuppressWarnings("unchecked")
        @Override
        public <T> T getOption(ChannelOption<T> option) {
            if (option == Http2StreamChannelOption.AUTO_STREAM_FLOW_CONTROL) {
                return (T) Boolean.valueOf(autoStreamFlowControl);
            }
            return super.getOption(option);
        }

        @Override
        public <T> boolean setOption(ChannelOption<T> option, T value) {
            validate(option, value);
            if (option == Http2StreamChannelOption.AUTO_STREAM_FLOW_CONTROL) {
                boolean newValue = (Boolean) value;
                boolean changed = newValue && !autoStreamFlowControl;
                autoStreamFlowControl = (Boolean) value;
                if (changed) {
                    if (channel.isRegistered()) {
                        final Http2ChannelUnsafe unsafe = (Http2ChannelUnsafe) channel.unsafe();
                        if (channel.eventLoop().inEventLoop()) {
                            unsafe.updateLocalWindowIfNeededAndFlush();
                        } else {
                            channel.eventLoop().execute(new Runnable() {
                                @Override
                                public void run() {
                                    unsafe.updateLocalWindowIfNeededAndFlush();
                                }
                            });
                        }
                    }
                }
                return true;
            }
            return super.setOption(option, value);
        }
    }

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free