Encode headers to HPACK binary format.
199 {
200 std::vector<uint8_t> result;
201
202 for (
const auto& header :
headers)
203 {
204
206 if (static_index > 0)
207 {
208
210 result.insert(result.end(), encoded.begin(), encoded.end());
211 continue;
212 }
213
214
215 auto dynamic_index =
table_.
find(header.name, header.value);
216 if (dynamic_index.has_value())
217 {
218
221 result.insert(result.end(), encoded.begin(), encoded.end());
222 continue;
223 }
224
225
227 if (name_index > 0)
228 {
229
231 result.insert(result.end(), encoded.begin(), encoded.end());
233 }
234 else
235 {
236
237 auto dynamic_name_index =
table_.
find(header.name,
"");
238 if (dynamic_name_index.has_value())
239 {
242 result.insert(result.end(), encoded.begin(), encoded.end());
244 }
245 else
246 {
247
249 result.insert(result.end(), encoded.begin(), encoded.end());
251 }
252 }
253 }
254
255 return result;
256 }
auto find(std::string_view name, std::string_view value="") const -> std::optional< size_t >
Find header in dynamic table.
auto insert(std::string_view name, std::string_view value) -> void
Insert header at beginning of table.
auto encode_literal_with_indexing(std::string_view name, std::string_view value) -> std::vector< uint8_t >
auto encode_indexed(size_t index) -> std::vector< uint8_t >
static constexpr auto size() -> size_t
Get static table size.
static auto find(std::string_view name, std::string_view value="") -> size_t
Find index of header in static table.