encodeHeaders() — netty Function Reference
Architecture documentation for the encodeHeaders() function in QpackEncoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD c02c31bf_f073_98b8_7f17_f6cd7211e31c["encodeHeaders()"] 9e578dbc_12be_4439_554b_24e265961ea5["QpackEncoder"] c02c31bf_f073_98b8_7f17_f6cd7211e31c -->|defined in| 9e578dbc_12be_4439_554b_24e265961ea5 4290254a_d002_4407_68f0_95045618c5ff["encodeHeader()"] c02c31bf_f073_98b8_7f17_f6cd7211e31c -->|calls| 4290254a_d002_4407_68f0_95045618c5ff a8642bed_b3de_8bb7_a79f_f18b39f7cc89["add()"] c02c31bf_f073_98b8_7f17_f6cd7211e31c -->|calls| a8642bed_b3de_8bb7_a79f_f18b39f7cc89 style c02c31bf_f073_98b8_7f17_f6cd7211e31c fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java lines 63–114
void encodeHeaders(QpackAttributes qpackAttributes, ByteBuf out, ByteBufAllocator allocator, long streamId,
Http3Headers headers) {
final int base = dynamicTable.insertCount();
// Allocate a new buffer as we have to go back and write a variable length base and required insert count
// later.
ByteBuf tmp = allocator.buffer();
try {
int maxDynamicTblIdx = -1;
int requiredInsertCount = 0;
Indices dynamicTableIndices = null;
for (Map.Entry<CharSequence, CharSequence> header : headers) {
CharSequence name = header.getKey();
CharSequence value = header.getValue();
int dynamicTblIdx = encodeHeader(qpackAttributes, tmp, base, name, value);
if (dynamicTblIdx >= 0) {
int req = dynamicTable.addReferenceToEntry(name, value, dynamicTblIdx);
if (dynamicTblIdx > maxDynamicTblIdx) {
maxDynamicTblIdx = dynamicTblIdx;
requiredInsertCount = req;
}
if (dynamicTableIndices == null) {
dynamicTableIndices = new Indices();
}
dynamicTableIndices.add(dynamicTblIdx);
}
}
// Track all the indices that we need to ack later.
if (dynamicTableIndices != null) {
assert streamSectionTrackers != null;
streamSectionTrackers.computeIfAbsent(streamId, __ -> new ArrayDeque<>())
.add(dynamicTableIndices);
}
// https://www.rfc-editor.org/rfc/rfc9204.html#name-encoded-field-section-prefi
// 0 1 2 3 4 5 6 7
// +---+---+---+---+---+---+---+---+
// | Required Insert Count (8+) |
// +---+---------------------------+
// | S | Delta Base (7+) |
// +---+---------------------------+
encodePrefixedInteger(out, (byte) 0b0, 8, dynamicTable.encodedRequiredInsertCount(requiredInsertCount));
if (base >= requiredInsertCount) {
encodePrefixedInteger(out, (byte) 0b0, 7, base - requiredInsertCount);
} else {
encodePrefixedInteger(out, (byte) 0b1000_0000, 7, requiredInsertCount - base - 1);
}
out.writeBytes(tmp);
} finally {
tmp.release();
}
}
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does encodeHeaders() do?
encodeHeaders() is a function in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java.
Where is encodeHeaders() defined?
encodeHeaders() is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java at line 63.
What does encodeHeaders() call?
encodeHeaders() calls 2 function(s): add, encodeHeader.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free