diff options
author | James M Snell <jasnell@gmail.com> | 2018-03-16 13:28:51 -0700 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2018-03-18 09:08:30 -0700 |
commit | 224941bd8cd70ead9e19d2b0afb4f58833a40541 (patch) | |
tree | 4ea1b968fd27e73af28cc7010bfbd2cdfd64d25e /src/node_http2.cc | |
parent | 49799f3163be5dbae6639cd4dc475a46e1da7722 (diff) | |
download | android-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.cc | 62 |
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) { |