Encode headers to HPACK binary format.
198 {
199 std::vector<uint8_t> result;
200
201 for (
const auto& header :
headers)
202 {
203
205 if (static_index > 0)
206 {
207
209 result.insert(result.end(), encoded.begin(), encoded.end());
210 continue;
211 }
212
213
214 auto dynamic_index =
table_.
find(header.name, header.value);
215 if (dynamic_index.has_value())
216 {
217
220 result.insert(result.end(), encoded.begin(), encoded.end());
221 continue;
222 }
223
224
226 if (name_index > 0)
227 {
228
230 result.insert(result.end(), encoded.begin(), encoded.end());
232 }
233 else
234 {
235
236 auto dynamic_name_index =
table_.
find(header.name,
"");
237 if (dynamic_name_index.has_value())
238 {
241 result.insert(result.end(), encoded.begin(), encoded.end());
243 }
244 else
245 {
246
248 result.insert(result.end(), encoded.begin(), encoded.end());
250 }
251 }
252 }
253
254 return result;
255 }
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.