Home / Class/ QuicheQuicChannel Class — netty Architecture

QuicheQuicChannel Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  3c534d05_bb5b_c991_5e03_7ec94e739cf7["QuicheQuicChannel"]
  e2af940f_f48c_60ab_e67f_c3708214d676["QuicheQuicChannel.java"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|defined in| e2af940f_f48c_60ab_e67f_c3708214d676
  8fab4ac4_9bdb_f950_6bda_b507354eead4["QuicheQuicChannel()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 8fab4ac4_9bdb_f950_6bda_b507354eead4
  91ad4e75_1871_05d1_0e83_42ab72e107e6["growIfNeeded()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 91ad4e75_1871_05d1_0e83_42ab72e107e6
  06c11b43_b6ba_8483_0d22_78982d8c399e["isTimedOut()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 06c11b43_b6ba_8483_0d22_78982d8c399e
  259d9397_51bc_df50_097f_60d3e0d7868d["SSLEngine()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 259d9397_51bc_df50_097f_60d3e0d7868d
  964a3852_b3e7_b070_9305_753cc91a1758["notifyAboutHandshakeCompletionIfNeeded()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 964a3852_b3e7_b070_9305_753cc91a1758
  b835dd21_64f7_7df8_433d_e629b47af47b["peerAllowedStreams()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| b835dd21_64f7_7df8_433d_e629b47af47b
  f6e857b5_5d30_f085_30c4_531d4e875782["attachQuicheConnection()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| f6e857b5_5d30_f085_30c4_531d4e875782
  4a98ac7e_20ab_0b82_c3e4_c1bf190a70c4["connectNow()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 4a98ac7e_20ab_0b82_c3e4_c1bf190a70c4
  7e530031_1fc0_9db2_5da3_39f49817a6b6["failConnectPromiseAndThrow()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 7e530031_1fc0_9db2_5da3_39f49817a6b6
  ae06f64f_455f_edc7_057f_27f8e23a5b93["tryFailConnectPromise()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| ae06f64f_455f_edc7_057f_27f8e23a5b93
  65547654_2a3e_d0aa_c2b9_0bfdf8072601["sourceConnectionIds()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 65547654_2a3e_d0aa_c2b9_0bfdf8072601
  ec499388_a0a7_df58_56e7_70e8dacefe0f["markInFireChannelReadCompleteQueue()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| ec499388_a0a7_df58_56e7_70e8dacefe0f
  71f869b5_f8a3_eeab_e61b_37fed86049e3["failPendingConnectPromise()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7 -->|method| 71f869b5_f8a3_eeab_e61b_37fed86049e3

Relationship Graph

Source Code

codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java lines 77–2129

final class QuicheQuicChannel extends AbstractChannel implements QuicChannel {
    private static final InternalLogger logger = InternalLoggerFactory.getInstance(QuicheQuicChannel.class);
    private static final String QLOG_FILE_EXTENSION = ".qlog";

    enum StreamRecvResult {
        /**
         * Nothing more to read from the stream.
         */
        DONE,
        /**
         * FIN flag received.
         */
        FIN,
        /**
         * Normal read without FIN flag.
         */
        OK
    }

    private enum ChannelState {
        OPEN,
        ACTIVE,
        CLOSED
    }

    private enum SendResult {
        SOME,
        NONE,
        CLOSE
    }

    private static final class CloseData implements ChannelFutureListener {
        final boolean applicationClose;
        final int err;
        final ByteBuf reason;

        CloseData(boolean applicationClose, int err, ByteBuf reason) {
            this.applicationClose = applicationClose;
            this.err = err;
            this.reason = reason;
        }

        @Override
        public void operationComplete(ChannelFuture future) {
            reason.release();
        }
    }

    private static final ChannelMetadata METADATA = new ChannelMetadata(false, 16);
    private long[] readableStreams = new long[4];
    private long[] writableStreams = new long[4];
    private final LongObjectMap<QuicheQuicStreamChannel> streams = new LongObjectHashMap<>();
    private final QuicheQuicChannelConfig config;
    private final boolean server;
    private final QuicStreamIdGenerator idGenerator;
    private final ChannelHandler streamHandler;
    private final Map.Entry<ChannelOption<?>, Object>[] streamOptionsArray;
    private final Map.Entry<AttributeKey<?>, Object>[] streamAttrsArray;
    private final TimeoutHandler timeoutHandler;
    private final QuicConnectionIdGenerator connectionIdAddressGenerator;
    private final QuicResetTokenGenerator resetTokenGenerator;
    private final Set<ByteBuffer> sourceConnectionIds = new HashSet<>();

    private Consumer<QuicheQuicChannel> freeTask;
    private Executor sslTaskExecutor;
    private boolean inFireChannelReadCompleteQueue;
    private boolean fireChannelReadCompletePending;
    private ByteBuf finBuffer;
    private ByteBuf outErrorCodeBuffer;
    private ChannelPromise connectPromise;
    private ScheduledFuture<?> connectTimeoutFuture;
    private QuicConnectionAddress connectAddress;
    private CloseData closeData;
    private QuicConnectionCloseEvent connectionCloseEvent;
    private QuicConnectionStats statsAtClose;
    private boolean supportsDatagram;
    private boolean recvDatagramPending;
    private boolean datagramReadable;
    private boolean recvStreamPending;
    private boolean streamReadable;
    private boolean handshakeCompletionNotified;

Frequently Asked Questions

What is the QuicheQuicChannel class?
QuicheQuicChannel is a class in the netty codebase, defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java.
Where is QuicheQuicChannel defined?
QuicheQuicChannel is defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java at line 77.

Analyze Your Own Codebase

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

Try Supermodel Free