tryAddToDynamicTable() — netty Function Reference
Architecture documentation for the tryAddToDynamicTable() function in QpackEncoder.java from the netty codebase.
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
Source
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