Skip to content

Commit f97aafd

Browse files
Joanna Jofacebook-github-bot
Joanna Jo
authored andcommitted
Consolidate disallowedModernHTTPFields()
Summary: Cleaning up duplicate perHopHeaderCodes by introducing disallowedModernHTTPFields. perHopHeaderCodes is for all HTTP versions and disallowedModernHTTPFields is specifically for RFC 9113, or H2. Reviewed By: afrind Differential Revision: D71986737 fbshipit-source-id: 5de0da57af6e7e1ebc302ce1ce7054db2b128c71
1 parent fe579e8 commit f97aafd

File tree

4 files changed

+9
-21
lines changed

4 files changed

+9
-21
lines changed

proxygen/lib/http/codec/CodecUtil.cpp

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,9 @@ bool CodecUtil::appendHeaders(const HTTPHeaders& inputHeaders,
8989
inputHeaders.forEachWithCode([&](HTTPHeaderCode code,
9090
const std::string& name,
9191
const std::string& value) {
92-
static const std::bitset<256> s_perHopHeaderCodes{[] {
93-
std::bitset<256> bs;
94-
// HTTP/1.x per-hop headers that have no meaning in HTTP/2
95-
bs[HTTP_HEADER_CONNECTION] = true;
96-
bs[HTTP_HEADER_HOST] = true;
97-
bs[HTTP_HEADER_KEEP_ALIVE] = true;
98-
bs[HTTP_HEADER_PROXY_CONNECTION] = true;
99-
bs[HTTP_HEADER_TRANSFER_ENCODING] = true;
100-
bs[HTTP_HEADER_UPGRADE] = true;
101-
bs[HTTP_HEADER_SEC_WEBSOCKET_KEY] = true;
102-
bs[HTTP_HEADER_SEC_WEBSOCKET_ACCEPT] = true;
103-
return bs;
104-
}()};
105-
106-
if (s_perHopHeaderCodes[code] || name.size() == 0 || name[0] == ':') {
92+
auto s_disallowedModernHTTPFields = disallowedModernHTTPFields();
93+
if (s_disallowedModernHTTPFields[code] || name.size() == 0 ||
94+
name[0] == ':') {
10795
DCHECK_GT(name.size(), 0) << "Empty header";
10896
DCHECK_NE(name[0], ':') << "Invalid header=" << name;
10997
return;
@@ -124,8 +112,8 @@ bool CodecUtil::appendHeaders(const HTTPHeaders& inputHeaders,
124112
return headerToCheckExists;
125113
}
126114

127-
const std::bitset<256>& CodecUtil::perHopHeaderCodes() {
128-
static const std::bitset<256> s_perHopHeaderCodes{[] {
115+
const std::bitset<256>& CodecUtil::disallowedModernHTTPFields() {
116+
static const std::bitset<256> s_disallowedModernHTTPFields{[] {
129117
std::bitset<256> bs;
130118
// HTTP/1.x per-hop headers that have no meaning in HTTP/2
131119
bs[HTTP_HEADER_CONNECTION] = true;
@@ -138,7 +126,7 @@ const std::bitset<256>& CodecUtil::perHopHeaderCodes() {
138126
bs[HTTP_HEADER_SEC_WEBSOCKET_ACCEPT] = true;
139127
return bs;
140128
}()};
141-
return s_perHopHeaderCodes;
129+
return s_disallowedModernHTTPFields;
142130
}
143131

144132
std::string CodecUtil::debugString(const HTTPMessage& msg, uint8_t debugLevel) {

proxygen/lib/http/codec/CodecUtil.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ class CodecUtil {
192192
std::vector<compress::Header>& headers,
193193
HTTPHeaderCode headerToCheck);
194194

195-
static const std::bitset<256>& perHopHeaderCodes();
195+
static const std::bitset<256>& disallowedModernHTTPFields();
196196

197197
/**
198198
* Generates debug strings that omit the header values

proxygen/lib/http/codec/compress/HPACKCodec.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ void HPACKCodec::encodeHTTP(
119119
auto headerEncodeHelper = [&](HTTPHeaderCode code,
120120
const std::string& name,
121121
const std::string& value) {
122-
if (CodecUtil::perHopHeaderCodes()[code] || name.empty() ||
122+
if (CodecUtil::disallowedModernHTTPFields()[code] || name.empty() ||
123123
name[0] == ':') {
124124
DCHECK(!name.empty()) << "Empty header";
125125
DCHECK_NE(name[0], ':') << "Invalid header=" << name;

proxygen/lib/http/codec/compress/QPACKCodec.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ std::unique_ptr<folly::IOBuf> QPACKCodec::encodeHTTP(
140140
auto headerEncodeHelper = [&](HTTPHeaderCode code,
141141
folly::StringPiece name,
142142
folly::StringPiece value) {
143-
if (CodecUtil::perHopHeaderCodes()[code] || name.empty() ||
143+
if (CodecUtil::disallowedModernHTTPFields()[code] || name.empty() ||
144144
name[0] == ':') {
145145
DCHECK(!name.empty()) << "Empty header";
146146
DCHECK_NE(name[0], ':') << "Invalid header=" << name;

0 commit comments

Comments
 (0)