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 static std::string huffmanEncode(
const std::string &in);
100 struct DynEntry { std::string name; std::string value; };
101 std::deque<DynEntry> _dynTable;
102 size_t _dynTableSize = 0;
103 size_t _dynTableMaxSize = 4096;
109 static constexpr uint32_t kMaxDynTableSize = 4096;
112 bool lookupIndex(uint32_t idx, std::string &name, std::string &value)
const;
113 bool lookupIndexName(uint32_t idx, std::string &name)
const;
116 void addEntry(
const std::string &name,
const std::string &value);
117 void evict(
size_t required);
119 struct StaticEntry {
const char *name;
const char *value; };
120 static const StaticEntry STATIC_TABLE[];
121 static const size_t STATIC_TABLE_SIZE;