Home / Class/ AbstractHttp2StreamChannel Class — netty Architecture

AbstractHttp2StreamChannel Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388["AbstractHttp2StreamChannel"]
  53b73d84_de3f_a5ff_9f0d_ff98834dbbb4["AbstractHttp2StreamChannel.java"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|defined in| 53b73d84_de3f_a5ff_9f0d_ff98834dbbb4
  fb715e07_c12a_8071_8ba2_a2563036031e["windowUpdateFrameWriteComplete()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| fb715e07_c12a_8071_8ba2_a2563036031e
  913eecb4_a5fd_00ee_6dbc_41735192e10a["AbstractHttp2StreamChannel()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 913eecb4_a5fd_00ee_6dbc_41735192e10a
  c9703b2f_6638_8afe_037a_9077f1bed51c["incrementPendingOutboundBytes()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| c9703b2f_6638_8afe_037a_9077f1bed51c
  7134f1fa_478b_d2e6_89ea_148d0d477e26["decrementPendingOutboundBytes()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 7134f1fa_478b_d2e6_89ea_148d0d477e26
  31e22389_48c3_fa0d_d6a8_eccb2b0b119b["trySetWritable()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 31e22389_48c3_fa0d_d6a8_eccb2b0b119b
  83a9ef69_d166_c780_667b_643909762238["setWritable()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 83a9ef69_d166_c780_667b_643909762238
  0e69b272_0119_282e_1d37_1a15c86716b8["setUnwritable()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 0e69b272_0119_282e_1d37_1a15c86716b8
  a896dd21_356b_4301_0b7c_d2512527d029["fireChannelWritabilityChanged()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| a896dd21_356b_4301_0b7c_d2512527d029
  71a0e7c0_a8ce_4118_8ca3_9f5c4258c1e1["Http2FrameStream()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 71a0e7c0_a8ce_4118_8ca3_9f5c4258c1e1
  09f1c7af_1307_c63a_a3fa_d40081433ed2["closeOutbound()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 09f1c7af_1307_c63a_a3fa_d40081433ed2
  743f5577_bb22_31db_6036_66e3afe5136f["streamClosed()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 743f5577_bb22_31db_6036_66e3afe5136f
  085c1f5c_75e2_7e5d_b85d_6c24107b378f["ChannelMetadata()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 085c1f5c_75e2_7e5d_b85d_6c24107b378f
  4bc62bc6_dff3_bda3_b698_3d2cc11f8ff5["ChannelConfig()"]
  bcb58015_0c85_17e2_f1b3_0c1ad3aaa388 -->|method| 4bc62bc6_dff3_bda3_b698_3d2cc11f8ff5

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/AbstractHttp2StreamChannel.java lines 65–1289

abstract class AbstractHttp2StreamChannel extends DefaultAttributeMap implements Http2StreamChannel {

    static final Http2FrameStreamVisitor WRITABLE_VISITOR = new Http2FrameStreamVisitor() {
        @Override
        public boolean visit(Http2FrameStream stream) {
            final AbstractHttp2StreamChannel childChannel = (AbstractHttp2StreamChannel)
                    ((DefaultHttp2FrameStream) stream).attachment;
            childChannel.trySetWritable();
            return true;
        }
    };

    static final Http2FrameStreamVisitor CHANNEL_INPUT_SHUTDOWN_READ_COMPLETE_VISITOR =
            new UserEventStreamVisitor(ChannelInputShutdownReadComplete.INSTANCE);

    static final Http2FrameStreamVisitor CHANNEL_OUTPUT_SHUTDOWN_EVENT_VISITOR =
            new UserEventStreamVisitor(ChannelOutputShutdownEvent.INSTANCE);

    static final Http2FrameStreamVisitor SSL_CLOSE_COMPLETION_EVENT_VISITOR =
            new UserEventStreamVisitor(SslCloseCompletionEvent.SUCCESS);

    private static final InternalLogger logger = InternalLoggerFactory.getInstance(AbstractHttp2StreamChannel.class);

    private static final ChannelMetadata METADATA = new ChannelMetadata(false, 16);

    /**
     * Number of bytes to consider non-payload messages. 9 is arbitrary, but also the minimum size of an HTTP/2 frame.
     * Primarily is non-zero.
     */
    private static final int MIN_HTTP2_FRAME_SIZE = 9;

    /**
     * {@link Http2FrameStreamVisitor} that fires the user event for every active stream pipeline.
     */
    private static final class UserEventStreamVisitor implements Http2FrameStreamVisitor {

        private final Object event;

        UserEventStreamVisitor(Object event) {
            this.event = checkNotNull(event, "event");
        }

        @Override
        public boolean visit(Http2FrameStream stream) {
            final AbstractHttp2StreamChannel childChannel = (AbstractHttp2StreamChannel)
                    ((DefaultHttp2FrameStream) stream).attachment;
            childChannel.pipeline().fireUserEventTriggered(event);
            return true;
        }
    }

    /**
     * Returns the flow-control size for DATA frames, and {@value MIN_HTTP2_FRAME_SIZE} for all other frames.
     */
    private static final class FlowControlledFrameSizeEstimator implements MessageSizeEstimator {

        static final FlowControlledFrameSizeEstimator INSTANCE = new FlowControlledFrameSizeEstimator();

        private static final Handle HANDLE_INSTANCE = new Handle() {
            @Override
            public int size(Object msg) {
                return msg instanceof Http2DataFrame ?
                        // Guard against overflow.
                        (int) min(Integer.MAX_VALUE, ((Http2DataFrame) msg).initialFlowControlledBytes() +
                                (long) MIN_HTTP2_FRAME_SIZE) : MIN_HTTP2_FRAME_SIZE;
            }
        };

        @Override
        public Handle newHandle() {
            return HANDLE_INSTANCE;
        }
    }

    private static final AtomicLongFieldUpdater<AbstractHttp2StreamChannel> TOTAL_PENDING_SIZE_UPDATER =
            AtomicLongFieldUpdater.newUpdater(AbstractHttp2StreamChannel.class, "totalPendingSize");

    private static final AtomicIntegerFieldUpdater<AbstractHttp2StreamChannel> UNWRITABLE_UPDATER =
            AtomicIntegerFieldUpdater.newUpdater(AbstractHttp2StreamChannel.class, "unwritable");

    private static void windowUpdateFrameWriteComplete(ChannelFuture future, Channel streamChannel) {

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free