Home / Class/ EmbeddedQuicChannel Class — netty Architecture

EmbeddedQuicChannel Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  95e61221_4cd7_7cb2_42da_fdc002019d19["EmbeddedQuicChannel"]
  3fbea9a1_5a1c_6ef5_a036_f662c8f451f4["EmbeddedQuicChannel.java"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|defined in| 3fbea9a1_5a1c_6ef5_a036_f662c8f451f4
  1f4eeed0_a36a_7c51_3f64_bad3cc2f82a1["EmbeddedQuicChannel()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| 1f4eeed0_a36a_7c51_3f64_bad3cc2f82a1
  516a4785_7a53_bdfc_9f69_62bc81acd11d["prependChannelConsumer()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| 516a4785_7a53_bdfc_9f69_62bc81acd11d
  96d372f6_8cbc_2265_8fdb_5bbae16479b3["QuicConnectionAddress()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| 96d372f6_8cbc_2265_8fdb_5bbae16479b3
  fba60fd4_9a48_cb21_e414_9874ad149909["SocketAddress()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| fba60fd4_9a48_cb21_e414_9874ad149909
  b4318cbf_a700_ed44_ed21_50d1532634c1["isTimedOut()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| b4318cbf_a700_ed44_ed21_50d1532634c1
  cf9203ab_faee_0370_7026_0c54fb0e96b3["SSLEngine()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| cf9203ab_faee_0370_7026_0c54fb0e96b3
  43d061bb_33f5_1287_c477_39cc172a9495["QuicChannelConfig()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| 43d061bb_33f5_1287_c477_39cc172a9495
  73fe62f1_9562_3533_115d_463f5c8eb459["QuicChannel()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| 73fe62f1_9562_3533_115d_463f5c8eb459
  7fc389a6_0736_35eb_f6c6_1ea24af09e9f["peerAllowedStreams()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| 7fc389a6_0736_35eb_f6c6_1ea24af09e9f
  cb48f58b_72fd_70f8_2bb1_850828105f60["createStream()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| cb48f58b_72fd_70f8_2bb1_850828105f60
  a43076f3_7682_6ea4_b75e_e2b546584dd5["ChannelFuture()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| a43076f3_7682_6ea4_b75e_e2b546584dd5
  d748ad91_7320_cd74_503d_a54093febb9c["collectStats()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| d748ad91_7320_cd74_503d_a54093febb9c
  a45aeada_5cf5_3615_2de4_64f1a26bd11d["collectPathStats()"]
  95e61221_4cd7_7cb2_42da_fdc002019d19 -->|method| a45aeada_5cf5_3615_2de4_64f1a26bd11d

Relationship Graph

Source Code

codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicChannel.java lines 59–359

final class EmbeddedQuicChannel extends EmbeddedChannel implements QuicChannel {
    private static final AttributeKey<AtomicLong> streamIdGeneratorKey =
            valueOf("embedded_channel_stream_id_generator");
    private final Map<QuicStreamType, Long> peerAllowedStreams = new EnumMap<>(QuicStreamType.class);
    private final AtomicBoolean closed = new AtomicBoolean();
    private final ConcurrentLinkedQueue<Integer> closeErrorCodes = new ConcurrentLinkedQueue<>();
    private QuicChannelConfig config;

    /**
     * TWO bits reserved for Variable-Length Integer Encoding
     * <a href="https://datatracker.ietf.org/doc/html/rfc9000?#name-variable-length-integer-enc">rfc9000</a>
     * TWO LSB used for distinguish Client/Server initiated stream & Bi/unidirection
     * these are not reserved but part of it
     * <a href="https://datatracker.ietf.org/doc/html/rfc9000?#name-stream-types-and-identifier">rfc9000</a>
     * so we can max stream per stream type (bi/uni) = (2^62-1)/2
     */
    private static final long MAX_PEER_STREAMS_PER_STREAM_TYPE = ((1L << 62) - 1) / 2;

    EmbeddedQuicChannel(boolean server) {
        this(server, new ChannelHandler[0]);
    }

    EmbeddedQuicChannel(boolean server, ChannelHandler... handlers) {
        super(prependChannelConsumer(channel -> channel.attr(streamIdGeneratorKey).set(new AtomicLong(server ? 1 : 0)),
                handlers));
    }

    static ChannelHandler[] prependChannelConsumer(Consumer<Channel> channelConsumer,
                                                   ChannelHandler... handlers) {
        ChannelHandler[] toReturn = new ChannelHandler[handlers.length + 1];
        toReturn[0] = new ChannelInboundHandlerAdapter() {
            @Override
            public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
                channelConsumer.accept(ctx.channel());
                super.handlerAdded(ctx);
            }
        };
        arraycopy(handlers, 0, toReturn, 1, handlers.length);
        return toReturn;
    }

    @Override
    public QuicConnectionAddress localAddress() {
        return null;
    }

    @Override
    public QuicConnectionAddress remoteAddress() {
        return null;
    }

    @Override
    public SocketAddress localSocketAddress() {
        return null;
    }

    @Override
    public SocketAddress remoteSocketAddress() {
        return null;
    }

    @Override
    public boolean isTimedOut() {
        return false;
    }

    @Override
    @Nullable
    public SSLEngine sslEngine() {
        return null;
    }

    @Override
    public QuicChannelConfig config() {
        if (config == null) {
            config = new EmbeddedQuicChannelConfig(super.config());
        }
        return config;
    }

    @Override

Frequently Asked Questions

What is the EmbeddedQuicChannel class?
EmbeddedQuicChannel is a class in the netty codebase, defined in codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicChannel.java.
Where is EmbeddedQuicChannel defined?
EmbeddedQuicChannel is defined in codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicChannel.java at line 59.

Analyze Your Own Codebase

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

Try Supermodel Free