Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
http2: simplify settings to reduce duplicate code
Signed-off-by: James M Snell <jasnell@gmail.com>
  • Loading branch information
jasnell committed Apr 16, 2020
commit 5499c7c621d9deef9bd6b1f20df93d08bdbdea77
62 changes: 19 additions & 43 deletions src/node_http2.cc
Original file line number Diff line number Diff line change
Expand Up @@ -229,13 +229,9 @@ size_t Http2Session::Http2Settings::Init(

size_t count = 0;

GRABSETTING(entries, count, HEADER_TABLE_SIZE);
GRABSETTING(entries, count, MAX_CONCURRENT_STREAMS);
GRABSETTING(entries, count, MAX_FRAME_SIZE);
GRABSETTING(entries, count, INITIAL_WINDOW_SIZE);
GRABSETTING(entries, count, MAX_HEADER_LIST_SIZE);
GRABSETTING(entries, count, ENABLE_PUSH);
GRABSETTING(entries, count, ENABLE_CONNECT_PROTOCOL);
#define V(name) GRABSETTING(entries, count, name);
HTTP2_SETTINGS(V)
#undef V

return count;
}
Expand Down Expand Up @@ -289,48 +285,28 @@ Local<Value> Http2Session::Http2Settings::Pack(
void Http2Session::Http2Settings::Update(Http2Session* session,
get_setting fn) {
AliasedUint32Array& buffer = session->http2_state()->settings_buffer;
buffer[IDX_SETTINGS_HEADER_TABLE_SIZE] =
fn(**session, NGHTTP2_SETTINGS_HEADER_TABLE_SIZE);
buffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS] =
fn(**session, NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS);
buffer[IDX_SETTINGS_INITIAL_WINDOW_SIZE] =
fn(**session, NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE);
buffer[IDX_SETTINGS_MAX_FRAME_SIZE] =
fn(**session, NGHTTP2_SETTINGS_MAX_FRAME_SIZE);
buffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE] =
fn(**session, NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE);
buffer[IDX_SETTINGS_ENABLE_PUSH] =
fn(**session, NGHTTP2_SETTINGS_ENABLE_PUSH);
buffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] =
fn(**session, NGHTTP2_SETTINGS_ENABLE_CONNECT_PROTOCOL);

#define V(name) \
buffer[IDX_SETTINGS_ ## name] = fn(**session, NGHTTP2_SETTINGS_ ## name);
HTTP2_SETTINGS(V)
#undef V

}

// Initializes the shared TypedArray with the default settings values.
void Http2Session::Http2Settings::RefreshDefaults(Http2State* http2_state) {
AliasedUint32Array& buffer = http2_state->settings_buffer;
uint32_t flags = 0;

#define V(name) \
do { \
buffer[IDX_SETTINGS_ ## name] = DEFAULT_SETTINGS_ ## name; \
flags |= 1 << IDX_SETTINGS_ ## name; \
} while (0);
HTTP2_SETTINGS(V)
#undef V

buffer[IDX_SETTINGS_HEADER_TABLE_SIZE] =
DEFAULT_SETTINGS_HEADER_TABLE_SIZE;
buffer[IDX_SETTINGS_ENABLE_PUSH] =
DEFAULT_SETTINGS_ENABLE_PUSH;
buffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS] =
DEFAULT_SETTINGS_MAX_CONCURRENT_STREAMS;
buffer[IDX_SETTINGS_INITIAL_WINDOW_SIZE] =
DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE;
buffer[IDX_SETTINGS_MAX_FRAME_SIZE] =
DEFAULT_SETTINGS_MAX_FRAME_SIZE;
buffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE] =
DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE;
buffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] =
DEFAULT_SETTINGS_ENABLE_CONNECT_PROTOCOL;
buffer[IDX_SETTINGS_COUNT] =
(1 << IDX_SETTINGS_HEADER_TABLE_SIZE) |
(1 << IDX_SETTINGS_ENABLE_PUSH) |
(1 << IDX_SETTINGS_MAX_CONCURRENT_STREAMS) |
(1 << IDX_SETTINGS_INITIAL_WINDOW_SIZE) |
(1 << IDX_SETTINGS_MAX_FRAME_SIZE) |
(1 << IDX_SETTINGS_MAX_HEADER_LIST_SIZE) |
(1 << IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL);
buffer[IDX_SETTINGS_COUNT] = flags;
}


Expand Down
9 changes: 9 additions & 0 deletions src/node_http2.h
Original file line number Diff line number Diff line change
Expand Up @@ -1131,6 +1131,15 @@ class Origins {
V(PADDING_STRATEGY_CALLBACK) \
HTTP2_ERROR_CODES(V)

#define HTTP2_SETTINGS(V) \
V(HEADER_TABLE_SIZE) \
V(ENABLE_PUSH) \
V(MAX_CONCURRENT_STREAMS) \
V(INITIAL_WINDOW_SIZE) \
V(MAX_FRAME_SIZE) \
V(MAX_HEADER_LIST_SIZE) \
V(ENABLE_CONNECT_PROTOCOL) \

} // namespace http2
} // namespace node

Expand Down