summaryrefslogtreecommitdiff
path: root/src/node_http2.cc
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2018-03-16 13:28:51 -0700
committerJames M Snell <jasnell@gmail.com>2018-03-18 09:08:30 -0700
commit224941bd8cd70ead9e19d2b0afb4f58833a40541 (patch)
tree4ea1b968fd27e73af28cc7010bfbd2cdfd64d25e /src/node_http2.cc
parent49799f3163be5dbae6639cd4dc475a46e1da7722 (diff)
downloadandroid-node-v8-224941bd8cd70ead9e19d2b0afb4f58833a40541.tar.gz
android-node-v8-224941bd8cd70ead9e19d2b0afb4f58833a40541.tar.bz2
android-node-v8-224941bd8cd70ead9e19d2b0afb4f58833a40541.zip
http2: clean up Http2Settings
Use of a MaybeStackBuffer was just silly. Fix a long standing todo Reduce code duplication a bit. PR-URL: https://github.com/nodejs/node/pull/19400 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'src/node_http2.cc')
-rw-r--r--src/node_http2.cc62
1 files changed, 15 insertions, 47 deletions
diff --git a/src/node_http2.cc b/src/node_http2.cc
index 5f7c42b690..d6f1d6e765 100644
--- a/src/node_http2.cc
+++ b/src/node_http2.cc
@@ -190,60 +190,28 @@ Http2Options::Http2Options(Environment* env) {
}
void Http2Session::Http2Settings::Init() {
- entries_.AllocateSufficientStorage(IDX_SETTINGS_COUNT);
AliasedBuffer<uint32_t, v8::Uint32Array>& buffer =
env()->http2_state()->settings_buffer;
uint32_t flags = buffer[IDX_SETTINGS_COUNT];
size_t n = 0;
- if (flags & (1 << IDX_SETTINGS_HEADER_TABLE_SIZE)) {
- uint32_t val = buffer[IDX_SETTINGS_HEADER_TABLE_SIZE];
- DEBUG_HTTP2SESSION2(session_, "setting header table size: %d\n", val);
- entries_[n].settings_id = NGHTTP2_SETTINGS_HEADER_TABLE_SIZE;
- entries_[n].value = val;
- n++;
+#define GRABSETTING(N, trace) \
+ if (flags & (1 << IDX_SETTINGS_##N)) { \
+ uint32_t val = buffer[IDX_SETTINGS_##N]; \
+ DEBUG_HTTP2SESSION2(session_, "setting " trace ": %d\n", val); \
+ entries_[n++] = \
+ nghttp2_settings_entry {NGHTTP2_SETTINGS_##N, val}; \
}
- if (flags & (1 << IDX_SETTINGS_MAX_CONCURRENT_STREAMS)) {
- uint32_t val = buffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS];
- DEBUG_HTTP2SESSION2(session_, "setting max concurrent streams: %d\n", val);
- entries_[n].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS;
- entries_[n].value = val;
- n++;
- }
-
- if (flags & (1 << IDX_SETTINGS_MAX_FRAME_SIZE)) {
- uint32_t val = buffer[IDX_SETTINGS_MAX_FRAME_SIZE];
- DEBUG_HTTP2SESSION2(session_, "setting max frame size: %d\n", val);
- entries_[n].settings_id = NGHTTP2_SETTINGS_MAX_FRAME_SIZE;
- entries_[n].value = val;
- n++;
- }
-
- if (flags & (1 << IDX_SETTINGS_INITIAL_WINDOW_SIZE)) {
- uint32_t val = buffer[IDX_SETTINGS_INITIAL_WINDOW_SIZE];
- DEBUG_HTTP2SESSION2(session_, "setting initial window size: %d\n", val);
- entries_[n].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
- entries_[n].value = val;
- n++;
- }
-
- if (flags & (1 << IDX_SETTINGS_MAX_HEADER_LIST_SIZE)) {
- uint32_t val = buffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE];
- DEBUG_HTTP2SESSION2(session_, "setting max header list size: %d\n", val);
- entries_[n].settings_id = NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE;
- entries_[n].value = val;
- n++;
- }
+ GRABSETTING(HEADER_TABLE_SIZE, "header table size");
+ GRABSETTING(MAX_CONCURRENT_STREAMS, "max concurrent streams");
+ GRABSETTING(MAX_FRAME_SIZE, "max frame size");
+ GRABSETTING(INITIAL_WINDOW_SIZE, "initial window size");
+ GRABSETTING(MAX_HEADER_LIST_SIZE, "max header list size");
+ GRABSETTING(ENABLE_PUSH, "enable push");
- if (flags & (1 << IDX_SETTINGS_ENABLE_PUSH)) {
- uint32_t val = buffer[IDX_SETTINGS_ENABLE_PUSH];
- DEBUG_HTTP2SESSION2(session_, "setting enable push: %d\n", val);
- entries_[n].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH;
- entries_[n].value = val;
- n++;
- }
+#undef GRABSETTING
count_ = n;
}
@@ -289,7 +257,7 @@ Local<Value> Http2Session::Http2Settings::Pack() {
ssize_t ret =
nghttp2_pack_settings_payload(
reinterpret_cast<uint8_t*>(Buffer::Data(buf)), len,
- *entries_, count_);
+ &entries_[0], count_);
if (ret >= 0)
return buf;
else
@@ -344,7 +312,7 @@ void Http2Session::Http2Settings::RefreshDefaults(Environment* env) {
void Http2Session::Http2Settings::Send() {
Http2Scope h2scope(session_);
CHECK_EQ(nghttp2_submit_settings(**session_, NGHTTP2_FLAG_NONE,
- *entries_, length()), 0);
+ &entries_[0], count_), 0);
}
void Http2Session::Http2Settings::Done(bool ack) {