Home / Function/ tryAddToDynamicTable() — netty Function Reference

tryAddToDynamicTable() — netty Function Reference

Architecture documentation for the tryAddToDynamicTable() function in QpackEncoder.java from the netty codebase.

Function java Buffer Allocators calls 4 called by 3

Entity Profile

Dependency Diagram

graph TD
  ff05e54c_ab86_28f0_9c02_ca61844188a2["tryAddToDynamicTable()"]
  9e578dbc_12be_4439_554b_24e265961ea5["QpackEncoder"]
  ff05e54c_ab86_28f0_9c02_ca61844188a2 -->|defined in| 9e578dbc_12be_4439_554b_24e265961ea5
  4290254a_d002_4407_68f0_95045618c5ff["encodeHeader()"]
  4290254a_d002_4407_68f0_95045618c5ff -->|calls| ff05e54c_ab86_28f0_9c02_ca61844188a2
  e6a8c78f_612c_a898_3946_dd974c0e8e72["encodeWithDynamicTable()"]
  e6a8c78f_612c_a898_3946_dd974c0e8e72 -->|calls| ff05e54c_ab86_28f0_9c02_ca61844188a2
  e5dd0675_23b6_2e4d_161a_a83f05c006a9["tryEncodeWithDynamicTable()"]
  e5dd0675_23b6_2e4d_161a_a83f05c006a9 -->|calls| ff05e54c_ab86_28f0_9c02_ca61844188a2
  a8642bed_b3de_8bb7_a79f_f18b39f7cc89["add()"]
  ff05e54c_ab86_28f0_9c02_ca61844188a2 -->|calls| a8642bed_b3de_8bb7_a79f_f18b39f7cc89
  1d1129bf_521d_60d8_41f4_656041274adf["encodeLengthPrefixedHuffmanEncodedLiteral()"]
  ff05e54c_ab86_28f0_9c02_ca61844188a2 -->|calls| 1d1129bf_521d_60d8_41f4_656041274adf
  8c4148c2_fd3d_471d_6dd9_a42039bbcbac["encodeStringLiteral()"]
  ff05e54c_ab86_28f0_9c02_ca61844188a2 -->|calls| 8c4148c2_fd3d_471d_6dd9_a42039bbcbac
  42ffacf2_0327_c0cf_782a_13b619b56936["mayNotBlockStream()"]
  ff05e54c_ab86_28f0_9c02_ca61844188a2 -->|calls| 42ffacf2_0327_c0cf_782a_13b619b56936
  style ff05e54c_ab86_28f0_9c02_ca61844188a2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java lines 348–401

    private int tryAddToDynamicTable(QpackAttributes qpackAttributes, boolean staticTableNameRef, int nameIdx,
                                     CharSequence name, CharSequence value) {
        if (qpackAttributes.dynamicTableDisabled()) {
            return DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE;
        }
        assert qpackAttributes.encoderStreamAvailable();
        final QuicStreamChannel encoderStream = qpackAttributes.encoderStream();

        int idx = dynamicTable.add(name, value, sizeOf(name, value));
        if (idx >= 0) {
            ByteBuf insert = null;
            try {
                if (nameIdx >= 0) {
                    // 2 prefixed integers (name index and value length) each requires a maximum of 8 bytes
                    insert = encoderStream.alloc().buffer(value.length() + 16);
                    // https://www.rfc-editor.org/rfc/rfc9204.html#name-insert-with-name-reference
                    //    0   1   2   3   4   5   6   7
                    // +---+---+---+---+---+---+---+---+
                    // | 1 | T |    Name Index (6+)    |
                    // +---+---+-----------------------+
                    encodePrefixedInteger(insert, (byte) (staticTableNameRef ? 0b1100_0000 : 0b1000_0000), 6, nameIdx);
                } else {
                    // 2 prefixed integers (name and value length) each requires a maximum of 8 bytes
                    insert = encoderStream.alloc().buffer(name.length() + value.length() + 16);
                    // https://www.rfc-editor.org/rfc/rfc9204.html#name-insert-with-literal-name
                    //     0   1   2   3   4   5   6   7
                    //   +---+---+---+---+---+---+---+---+
                    //   | 0 | 1 | H | Name Length (5+)  |
                    //   +---+---+---+-------------------+
                    //   |  Name String (Length bytes)   |
                    //   +---+---------------------------+
                    // TODO: Force H = 1 till we support sensitivity detector
                    encodeLengthPrefixedHuffmanEncodedLiteral(insert, (byte) 0b0110_0000, 5, name);
                }
                //    0   1   2   3   4   5   6   7
                // +---+---+-----------------------+
                // | H |     Value Length (7+)     |
                // +---+---------------------------+
                // |  Value String (Length bytes)  |
                // +-------------------------------+
                encodeStringLiteral(insert, value);
            } catch (Exception e) {
                ReferenceCountUtil.release(insert);
                return DYNAMIC_TABLE_ENCODE_NOT_DONE;
            }
            closeOnFailure(encoderStream.writeAndFlush(insert));
            if (mayNotBlockStream()) {
                // Add to the table but do not use the entry in the header block to avoid blocking.
                return DYNAMIC_TABLE_ENCODE_NOT_DONE;
            }
            blockedStreams++;
        }
        return idx;
    }

Domain

Subdomains

Frequently Asked Questions

What does tryAddToDynamicTable() do?
tryAddToDynamicTable() is a function in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java.
Where is tryAddToDynamicTable() defined?
tryAddToDynamicTable() is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java at line 348.
What does tryAddToDynamicTable() call?
tryAddToDynamicTable() calls 4 function(s): add, encodeLengthPrefixedHuffmanEncodedLiteral, encodeStringLiteral, mayNotBlockStream.
What calls tryAddToDynamicTable()?
tryAddToDynamicTable() is called by 3 function(s): encodeHeader, encodeWithDynamicTable, tryEncodeWithDynamicTable.

Analyze Your Own Codebase

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

Try Supermodel Free