Home / Class/ QpackAttributes Class — netty Architecture

QpackAttributes Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d["QpackAttributes"]
  67955bcd_5000_8b05_ae86_302a711e72db["QpackAttributes.java"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|defined in| 67955bcd_5000_8b05_ae86_302a711e72db
  5df08d8c_ebd5_fa11_28d0_e8ebc6dc7cf0["QpackAttributes()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 5df08d8c_ebd5_fa11_28d0_e8ebc6dc7cf0
  9e8f5403_9fec_08c7_000b_aacd1013be16["dynamicTableDisabled()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 9e8f5403_9fec_08c7_000b_aacd1013be16
  273cf42a_b473_94d3_7f77_a14b5c8cd419["decoderStreamAvailable()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 273cf42a_b473_94d3_7f77_a14b5c8cd419
  c8c3d474_798d_12e0_671d_107be7d505ae["encoderStreamAvailable()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| c8c3d474_798d_12e0_671d_107be7d505ae
  39d1732b_995b_f625_731d_e6cd42d39e4b["whenEncoderStreamAvailable()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 39d1732b_995b_f625_731d_e6cd42d39e4b
  737eb1a2_c0db_50ee_7e4b_cadf7c74ce7e["whenDecoderStreamAvailable()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 737eb1a2_c0db_50ee_7e4b_cadf7c74ce7e
  550aa47f_cf3e_3ee5_da84_7dcffeec0aba["QuicStreamChannel()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 550aa47f_cf3e_3ee5_da84_7dcffeec0aba
  e5c80d45_b610_643d_19cf_a480dd5c8db3["decoderStream()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| e5c80d45_b610_643d_19cf_a480dd5c8db3
  0ed88fce_469a_9de6_8ca7_eec49c07f457["encoderStream()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 0ed88fce_469a_9de6_8ca7_eec49c07f457
  6efde04d_9f9a_bc32_92af_b444202e6887["encoderStreamInactive()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 6efde04d_9f9a_bc32_92af_b444202e6887
  296edc2d_4da9_9658_d644_ecd4eb520084["decoderStreamInactive()"]
  b0d470e0_b8f1_e9d9_e48f_1278fb4b284d -->|method| 296edc2d_4da9_9658_d644_ecd4eb520084

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/QpackAttributes.java lines 27–108

final class QpackAttributes {
    private final QuicChannel channel;
    private final boolean dynamicTableDisabled;
    private final Promise<QuicStreamChannel> encoderStreamPromise;
    private final Promise<QuicStreamChannel> decoderStreamPromise;

    private QuicStreamChannel encoderStream;
    private QuicStreamChannel decoderStream;

    QpackAttributes(QuicChannel channel, boolean disableDynamicTable) {
        this.channel = channel;
        dynamicTableDisabled = disableDynamicTable;
        encoderStreamPromise = dynamicTableDisabled ? null : channel.eventLoop().newPromise();
        decoderStreamPromise = dynamicTableDisabled ? null : channel.eventLoop().newPromise();
    }

    boolean dynamicTableDisabled() {
        return dynamicTableDisabled;
    }

    boolean decoderStreamAvailable() {
        return !dynamicTableDisabled && decoderStream != null;
    }

    boolean encoderStreamAvailable() {
        return !dynamicTableDisabled && encoderStream != null;
    }

    void whenEncoderStreamAvailable(GenericFutureListener<Future<? super QuicStreamChannel>> listener) {
        assert !dynamicTableDisabled;
        assert encoderStreamPromise != null;
        encoderStreamPromise.addListener(listener);
    }

    void whenDecoderStreamAvailable(GenericFutureListener<Future<? super QuicStreamChannel>> listener) {
        assert !dynamicTableDisabled;
        assert decoderStreamPromise != null;
        decoderStreamPromise.addListener(listener);
    }

    QuicStreamChannel decoderStream() {
        assert decoderStreamAvailable();
        return decoderStream;
    }

    QuicStreamChannel encoderStream() {
        assert encoderStreamAvailable();
        return encoderStream;
    }

    void decoderStream(QuicStreamChannel decoderStream) {
        assert channel.eventLoop().inEventLoop();
        assert !dynamicTableDisabled;
        assert decoderStreamPromise != null;
        assert this.decoderStream == null;
        this.decoderStream = requireNonNull(decoderStream);
        decoderStreamPromise.setSuccess(decoderStream);
    }

    void encoderStream(QuicStreamChannel encoderStream) {
        assert channel.eventLoop().inEventLoop();
        assert !dynamicTableDisabled;
        assert encoderStreamPromise != null;
        assert this.encoderStream == null;
        this.encoderStream = requireNonNull(encoderStream);
        encoderStreamPromise.setSuccess(encoderStream);
    }

    void encoderStreamInactive(Throwable cause) {
        assert channel.eventLoop().inEventLoop();
        assert !dynamicTableDisabled;
        assert encoderStreamPromise != null;
        encoderStreamPromise.tryFailure(cause);
    }

    void decoderStreamInactive(Throwable cause) {
        assert channel.eventLoop().inEventLoop();
        assert !dynamicTableDisabled;
        assert decoderStreamPromise != null;
        decoderStreamPromise.tryFailure(cause);
    }

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free