TEST_F(HeaderTableTests, add) { HeaderTable table(4096); table.add(HPACKHeader("accept-encoding", "gzip")); table.add(HPACKHeader("accept-encoding", "gzip")); table.add(HPACKHeader("accept-encoding", "gzip")); EXPECT_EQ(table.names().size(), 1); EXPECT_EQ(table.hasName("accept-encoding"), true); auto it = table.names().find("accept-encoding"); EXPECT_EQ(it->second.size(), 3); EXPECT_EQ(table.nameIndex("accept-encoding"), 1); }
TEST_F(HeaderTableTests, print) { stringstream out; HeaderTable t(128); t.add(HPACKHeader("Accept-Encoding", "gzip")); t.addReference(1); out << t; EXPECT_EQ(out.str(), "\n[1] (s=51) Accept-Encoding: gzip\nreference set: [1, ]\ntotal size: 51\n"); }
void HTTPArchive::extractHeadersFromPublic(folly::dynamic& obj, vector<HPACKHeader> &msg) { msg.clear(); auto& headersObj = obj["headers"]; for (size_t i = 0; i < headersObj.size(); i++) { auto& headerObj = headersObj[i]; for (auto& k: headerObj.keys()) { string name = k.asString(); string value = headerObj[name].asString(); std::transform(name.begin(), name.end(), name.begin(), ::tolower); msg.push_back(HPACKHeader(name, value)); } } }
void HTTPArchive::extractHeaders(folly::dynamic& obj, vector<HPACKHeader> &msg) { msg.clear(); auto& headersObj = obj["headers"]; for (size_t i = 0; i < headersObj.size(); i++) { string name = headersObj[i]["name"].asString(); std::transform(name.begin(), name.end(), name.begin(), ::tolower); msg.push_back( HPACKHeader( name, headersObj[i]["value"].asString()) ); } }
StaticHeaderTable::StaticHeaderTable( const char* entries[][2], int size) : HeaderTable(0) { // calculate the size list<HPACKHeader> hlist; uint32_t byteCount = 0; for (int i = 0; i < size; ++i) { hlist.push_back(HPACKHeader(entries[i][0], entries[i][1])); byteCount += hlist.back().bytes(); } // initialize with a capacity that will exactly fit the static headers init(byteCount); hlist.reverse(); for (auto& header : hlist) { add(std::move(header)); } }