diff options
Diffstat (limited to 'lib/internal/http2/util.js')
-rw-r--r-- | lib/internal/http2/util.js | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/internal/http2/util.js b/lib/internal/http2/util.js index 99466b36d3..94dc1198ea 100644 --- a/lib/internal/http2/util.js +++ b/lib/internal/http2/util.js @@ -20,6 +20,7 @@ const { HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_SCHEME, HTTP2_HEADER_PATH, + HTTP2_HEADER_PROTOCOL, HTTP2_HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS, HTTP2_HEADER_ACCESS_CONTROL_MAX_AGE, HTTP2_HEADER_ACCESS_CONTROL_REQUEST_METHOD, @@ -78,7 +79,8 @@ const kValidPseudoHeaders = new Set([ HTTP2_HEADER_METHOD, HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_SCHEME, - HTTP2_HEADER_PATH + HTTP2_HEADER_PATH, + HTTP2_HEADER_PROTOCOL ]); // This set contains headers that are permitted to have only a single @@ -89,6 +91,7 @@ const kSingleValueHeaders = new Set([ HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_SCHEME, HTTP2_HEADER_PATH, + HTTP2_HEADER_PROTOCOL, HTTP2_HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS, HTTP2_HEADER_ACCESS_CONTROL_MAX_AGE, HTTP2_HEADER_ACCESS_CONTROL_REQUEST_METHOD, @@ -155,7 +158,8 @@ const IDX_SETTINGS_INITIAL_WINDOW_SIZE = 2; const IDX_SETTINGS_MAX_FRAME_SIZE = 3; const IDX_SETTINGS_MAX_CONCURRENT_STREAMS = 4; const IDX_SETTINGS_MAX_HEADER_LIST_SIZE = 5; -const IDX_SETTINGS_FLAGS = 6; +const IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL = 6; +const IDX_SETTINGS_FLAGS = 7; const IDX_SESSION_STATE_EFFECTIVE_LOCAL_WINDOW_SIZE = 0; const IDX_SESSION_STATE_EFFECTIVE_RECV_DATA_LENGTH = 1; @@ -277,6 +281,12 @@ function getDefaultSettings() { settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE]; } + if ((flags & (1 << IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL)) === + (1 << IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL)) { + holder.enableConnectProtocol = + settingsBuffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL]; + } + return holder; } @@ -294,7 +304,8 @@ function getSettings(session, remote) { initialWindowSize: settingsBuffer[IDX_SETTINGS_INITIAL_WINDOW_SIZE], maxFrameSize: settingsBuffer[IDX_SETTINGS_MAX_FRAME_SIZE], maxConcurrentStreams: settingsBuffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS], - maxHeaderListSize: settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE] + maxHeaderListSize: settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE], + enableConnectProtocol: settingsBuffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] }; } @@ -329,6 +340,11 @@ function updateSettingsBuffer(settings) { flags |= (1 << IDX_SETTINGS_ENABLE_PUSH); settingsBuffer[IDX_SETTINGS_ENABLE_PUSH] = Number(settings.enablePush); } + if (typeof settings.enableConnectProtocol === 'boolean') { + flags |= (1 << IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL); + settingsBuffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] = + Number(settings.enableConnectProtocol); + } settingsBuffer[IDX_SETTINGS_FLAGS] = flags; } |