Home / Class/ AbstractQPackStreamInitializer Class — netty Architecture

AbstractQPackStreamInitializer Class — netty Architecture

Architecture documentation for the AbstractQPackStreamInitializer class in Http3ControlStreamInboundHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  4b53bebf_0e3a_cf76_df02_11de8f793418["AbstractQPackStreamInitializer"]
  962d9bec_657d_ee43_1a3c_6ac7f20104fb["Http3ControlStreamInboundHandler.java"]
  4b53bebf_0e3a_cf76_df02_11de8f793418 -->|defined in| 962d9bec_657d_ee43_1a3c_6ac7f20104fb
  a13cab40_7baf_5d23_a501_1a07dc097379["AbstractQPackStreamInitializer()"]
  4b53bebf_0e3a_cf76_df02_11de8f793418 -->|method| a13cab40_7baf_5d23_a501_1a07dc097379
  b69250c2_be16_a5db_abd7_24a07172a086["channelActive()"]
  4b53bebf_0e3a_cf76_df02_11de8f793418 -->|method| b69250c2_be16_a5db_abd7_24a07172a086
  1d74b42c_0a59_1c4f_c8b6_4c39c330d903["userEventTriggered()"]
  4b53bebf_0e3a_cf76_df02_11de8f793418 -->|method| 1d74b42c_0a59_1c4f_c8b6_4c39c330d903
  5c4ff6fe_bd8a_81fd_76c1_e0a1356f740a["channelInactive()"]
  4b53bebf_0e3a_cf76_df02_11de8f793418 -->|method| 5c4ff6fe_bd8a_81fd_76c1_e0a1356f740a
  4b29b43a_f6b6_eeec_b5cd_3a6cdc7c785b["streamAvailable()"]
  4b53bebf_0e3a_cf76_df02_11de8f793418 -->|method| 4b29b43a_f6b6_eeec_b5cd_3a6cdc7c785b
  b8782597_9d58_5399_b503_13ddd6c30b3d["streamClosed()"]
  4b53bebf_0e3a_cf76_df02_11de8f793418 -->|method| b8782597_9d58_5399_b503_13ddd6c30b3d

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java lines 226–268

    private abstract static class AbstractQPackStreamInitializer extends ChannelInboundHandlerAdapter {
        private final int streamType;
        protected final QpackAttributes attributes;

        AbstractQPackStreamInitializer(int streamType, QpackAttributes attributes) {
            this.streamType = streamType;
            this.attributes = attributes;
        }

        @Override
        public final void channelActive(ChannelHandlerContext ctx) {
            // We need to write the streamType into the stream before doing anything else.
            // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-6.2.1
            // Just allocate 8 bytes which would be the max needed.
            ByteBuf buffer = ctx.alloc().buffer(8);
            Http3CodecUtils.writeVariableLengthInteger(buffer, streamType);
            closeOnFailure(ctx.writeAndFlush(buffer));
            streamAvailable(ctx);
            ctx.fireChannelActive();
        }

        @Override
        public final void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
            streamClosed(ctx);
            if (evt instanceof ChannelInputShutdownEvent) {
                // See https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#section-4.2
                criticalStreamClosed(ctx);
            }
            ctx.fireUserEventTriggered(evt);
        }

        @Override
        public void channelInactive(ChannelHandlerContext ctx) {
            streamClosed(ctx);
            // See https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#section-4.2
            criticalStreamClosed(ctx);
            ctx.fireChannelInactive();
        }

        protected abstract void streamAvailable(ChannelHandlerContext ctx);

        protected abstract void streamClosed(ChannelHandlerContext ctx);
    }

Frequently Asked Questions

What is the AbstractQPackStreamInitializer class?
AbstractQPackStreamInitializer is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java.
Where is AbstractQPackStreamInitializer defined?
AbstractQPackStreamInitializer is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java at line 226.

Analyze Your Own Codebase

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

Try Supermodel Free