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
Source
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