46 static std::string encodeResponseHeaders(uint16_t status_code,
47 const std::string &content_type,
48 size_t content_length,
49 const std::vector<HeaderField> &extra = {});
51 static std::string encodeRequestHeaders(
const std::string &method,
52 const std::string &path,
53 const std::string &scheme,
54 const std::string &authority,
55 const std::vector<HeaderField> &extra = {});
58 static void appendLiteral(std::string &out,
59 const std::string &name,
60 const std::string &value,
61 bool incremental_index);
62 static void appendLiteralWithNameIndex(std::string &out,
64 const std::string &value,
65 bool incremental_index);
80 void reset() { _dynTable.clear(); _dynTableSize = 0; }
83 std::vector<HeaderField> decode(
const uint8_t *data,
size_t len);
84 std::vector<HeaderField> decode(
const std::string &data);
87 static std::vector<HeaderField> decodeStateless(
const uint8_t *data,
size_t len);
90 static uint32_t decodeInt(
const uint8_t *data,
size_t len, uint8_t prefix_bits,
size_t &bytes_read);
91 static std::string decodeString(
const uint8_t *data,
size_t len,
size_t &bytes_read);
92 static std::string huffmanDecode(
const uint8_t *data,
size_t len);
96 struct DynEntry { std::string name; std::string value; };
97 std::deque<DynEntry> _dynTable;
98 size_t _dynTableSize = 0;
99 size_t _dynTableMaxSize = 4096;
102 bool lookupIndex(uint32_t idx, std::string &name, std::string &value)
const;
103 bool lookupIndexName(uint32_t idx, std::string &name)
const;
106 void addEntry(
const std::string &name,
const std::string &value);
107 void evict(
size_t required);
109 struct StaticEntry {
const char *name;
const char *value; };
110 static const StaticEntry STATIC_TABLE[];
111 static const size_t STATIC_TABLE_SIZE;