QpackEncoderDynamicTable Class — netty Architecture
Architecture documentation for the QpackEncoderDynamicTable class in QpackEncoderDynamicTable.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 4f2fd884_2460_757f_867b_2f1f2c79f9b9["QpackEncoderDynamicTable"] e46b63f7_a325_3795_be25_17be3a787249["QpackEncoderDynamicTable.java"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|defined in| e46b63f7_a325_3795_be25_17be3a787249 b4159dce_fe68_534e_68db_02f7c19dfb60["QpackEncoderDynamicTable()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| b4159dce_fe68_534e_68db_02f7c19dfb60 ef672b49_5f7c_b883_8dcc_2b6479f4097c["add()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| ef672b49_5f7c_b883_8dcc_2b6479f4097c 0a901964_d825_b903_5e9a_9b0a52054e86["acknowledgeInsertCountOnAck()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 0a901964_d825_b903_5e9a_9b0a52054e86 7ad0adeb_aa99_f682_5545_846f56b11697["acknowledgeInsertCountOnCancellation()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 7ad0adeb_aa99_f682_5545_846f56b11697 4f153071_c170_fc5c_fb3b_551b3a5e579e["acknowledgeInsertCount()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 4f153071_c170_fc5c_fb3b_551b3a5e579e 9a14e250_717c_465f_08fd_352c3d9743cf["incrementKnownReceivedCount()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 9a14e250_717c_465f_08fd_352c3d9743cf cba5fe41_0a21_a783_5182_bccb6fb8d9c9["insertCount()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| cba5fe41_0a21_a783_5182_bccb6fb8d9c9 1b0bdefb_23b9_c13d_cb67_e8e9f354f031["encodedRequiredInsertCount()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 1b0bdefb_23b9_c13d_cb67_e8e9f354f031 67115d8b_6ff8_dc77_25fb_4e867b23fef2["encodedKnownReceivedCount()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 67115d8b_6ff8_dc77_25fb_4e867b23fef2 7bee1cc8_fb10_4557_d83c_ebacd2e5f371["maxTableCapacity()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 7bee1cc8_fb10_4557_d83c_ebacd2e5f371 5c17adfe_8f56_570d_084c_469304601afe["relativeIndexForEncoderInstructions()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 5c17adfe_8f56_570d_084c_469304601afe f75601b2_b056_67da_709d_f36cf23dfab5["getEntryIndex()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| f75601b2_b056_67da_709d_f36cf23dfab5 072609f9_81d2_a5c1_f916_0a22a93b134d["addReferenceToEntry()"] 4f2fd884_2460_757f_867b_2f1f2c79f9b9 -->|method| 072609f9_81d2_a5c1_f916_0a22a93b134d
Relationship Graph
Source Code
codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java lines 31–490
final class QpackEncoderDynamicTable {
private static final QpackException INVALID_KNOW_RECEIVED_COUNT_INCREMENT =
QpackException.newStatic(QpackDecoder.class, "incrementKnownReceivedCount(...)",
"QPACK - invalid known received count increment.");
private static final QpackException INVALID_REQUIRED_INSERT_COUNT_INCREMENT =
QpackException.newStatic(QpackDecoder.class, "acknowledgeInsertCount(...)",
"QPACK - invalid required insert count acknowledgment.");
private static final QpackException INVALID_TABLE_CAPACITY =
QpackException.newStatic(QpackDecoder.class, "validateCapacity(...)",
"QPACK - dynamic table capacity is invalid.");
private static final QpackException CAPACITY_ALREADY_SET =
QpackException.newStatic(QpackDecoder.class, "maxTableCapacity(...)",
"QPACK - dynamic table capacity is already set.");
/**
* Special return value of {@link #getEntryIndex(CharSequence, CharSequence)} when the entry is not found.
*/
public static final int NOT_FOUND = Integer.MIN_VALUE;
/**
* A hashmap of header entries.
*/
private final HeaderEntry[] fields;
/**
* Percentage of capacity that we expect to be free after eviction of old entries.
*/
private final int expectedFreeCapacityPercentage;
/**
* Hash mask for all entries in the hashmap.
*/
private final byte hashMask;
/**
* <a href="https://www.rfc-editor.org/rfc/rfc9204.html#name-dynamic-table-size">Current size of the table</a>.
*/
private long size;
/**
* <a href="https://www.rfc-editor.org/rfc/rfc9204.html#name-maximum-dynamic-table-capac">
* Maximum capacity of the table</a>. This is set once based on the
* {@link Http3SettingsFrame#HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY} received by the remote peer.
*/
private long maxTableCapacity = -1;
/*
* The below indexes follow the suggested heuristics in Section 2.1.1.1 Avoiding Prohibited insertions
* https://www.rfc-editor.org/rfc/rfc9204.html#name-avoiding-prohibited-inserti
*
* Tail Drain Head
* | | |
* v v v
* +--------+---------------------------------+----------+
* | Unused | Referenceable | Draining |
* | Space | Entries | Entries |
* +--------+---------------------------------+----------+
* ^ ^ ^
* | | |
* Insertion Index Draining Index Dropping Index
*/
/**
* Head of the entries, such that {@link HeaderEntry#index} is the {@code droppingIndex}.
*/
private final HeaderEntry head;
/**
* Pointer before which entries are marked for eviction post {@link #incrementKnownReceivedCount(int)}.
* {@link HeaderEntry#index} is the {@code drainingIndex}.
*/
private HeaderEntry drain;
/**
* Pointer to the entry representing the <a
* href="https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#name-known-received-count">
* known received count</a>.
*/
private HeaderEntry knownReceived;
/**
* Tail of the entries, such that {@link HeaderEntry#index} is the {@code insertionIndex}.
Source
Frequently Asked Questions
What is the QpackEncoderDynamicTable class?
QpackEncoderDynamicTable is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java.
Where is QpackEncoderDynamicTable defined?
QpackEncoderDynamicTable is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java at line 31.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free