// Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.24 package http3 type qpackEncoder struct { // The encoder has no state for now, // but that'll change once we add dynamic table support. // // TODO: dynamic table support. } func (qe *qpackEncoder) init() { staticTableOnce.Do(initStaticTableMaps) } // encode encodes a list of headers into a QPACK encoded field section. // // The headers func must produce the same headers on repeated calls, // although the order may vary. func (qe *qpackEncoder) encode(headers func(func(itype indexType, name, value string))) []byte { // Encoded Field Section prefix. // // We don't yet use the dynamic table, so both values here are zero. var b []byte b = appendPrefixedInt(b, 0, 8, 0) // Required Insert Count b = appendPrefixedInt(b, 0, 7, 0) // Delta Base headers(func(itype indexType, name, value string) { if itype == mayIndex { if i, ok := staticTableByNameValue[tableEntry{name, value}]; ok { b = appendIndexedFieldLine(b, staticTable, i) return } } if i, ok := staticTableByName[name]; ok { b = appendLiteralFieldLineWithNameReference(b, staticTable, itype, i, value) } else { b = appendLiteralFieldLineWithLiteralName(b, itype, name, value) } }) return b }