| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 35b7ba6 commit 5dd7c92
7 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2420,7 +2420,7 @@ properties. | |||
| 2420 | 2420 | header compression. The minimum allowed value is 0. The maximum allowed value | |
| 2421 | 2421 | is 2<sup>32</sup>-1. **Default:** `4,096 octets`. | |
| 2422 | 2422 | * `enablePush` {boolean} Specifies `true` if HTTP/2 Push Streams are to be | |
| 2423 | - permitted on the `Http2Session` instances. | ||
| 2423 | + permitted on the `Http2Session` instances. **Default:** `true`. | ||
| 2424 | 2424 | * `initialWindowSize` {number} Specifies the *senders* initial window size | |
| 2425 | 2425 | for stream-level flow control. The minimum allowed value is 0. The maximum | |
| 2426 | 2426 | allowed value is 2<sup>32</sup>-1. **Default:** `65,535 bytes`. | |
@@ -2440,6 +2440,7 @@ properties. | |||
| 2440 | 2440 | Protocol" defined by [RFC 8441][] is to be enabled. This setting is only | |
| 2441 | 2441 | meaningful if sent by the server. Once the `enableConnectProtocol` setting | |
| 2442 | 2442 | has been enabled for a given `Http2Session`, it cannot be disabled. | |
| 2443 | + **Default:** `false`. | ||
| 2443 | 2444 | ||
| 2444 | 2445 | All additional properties on the settings object are ignored. | |
| 2445 | 2446 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -261,6 +261,7 @@ const { | |||
| 261 | 261 | NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, | |
| 262 | 262 | NGHTTP2_SETTINGS_MAX_FRAME_SIZE, | |
| 263 | 263 | NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE, | |
| 264 | + NGHTTP2_SETTINGS_ENABLE_CONNECT_PROTOCOL, | ||
| 264 | 265 | ||
| 265 | 266 | HTTP2_METHOD_GET, | |
| 266 | 267 | HTTP2_METHOD_HEAD, | |
@@ -905,6 +906,7 @@ function pingCallback(cb) { | |||
| 905 | 906 | // 4. maxConcurrentStreams must be a number in the range 0 <= n <= kMaxStreams | |
| 906 | 907 | // 5. maxHeaderListSize must be a number in the range 0 <= n <= kMaxInt | |
| 907 | 908 | // 6. enablePush must be a boolean | |
| 909 | + // 7. enableConnectProtocol must be a boolean | ||
| 908 | 910 | // All settings are optional and may be left undefined | |
| 909 | 911 | const validateSettings = hideStackFrames((settings) => { | |
| 910 | 912 | if (settings === undefined) return; | |
@@ -928,6 +930,11 @@ const validateSettings = hideStackFrames((settings) => { | |||
| 928 | 930 | throw new ERR_HTTP2_INVALID_SETTING_VALUE('enablePush', | |
| 929 | 931 | settings.enablePush); | |
| 930 | 932 | } | |
| 933 | + if (settings.enableConnectProtocol !== undefined && | ||
| 934 | + typeof settings.enableConnectProtocol !== 'boolean') { | ||
| 935 | + throw new ERR_HTTP2_INVALID_SETTING_VALUE('enableConnectProtocol', | ||
| 936 | + settings.enableConnectProtocol); | ||
| 937 | + } | ||
| 931 | 938 | }); | |
| 932 | 939 | ||
| 933 | 940 | // Creates the internal binding.Http2Session handle for an Http2Session | |
@@ -3094,6 +3101,8 @@ function getUnpackedSettings(buf, options = {}) { | |||
| 3094 | 3101 | case NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: | |
| 3095 | 3102 | settings.maxHeaderListSize = value; | |
| 3096 | 3103 | break; | |
| 3104 | + case NGHTTP2_SETTINGS_ENABLE_CONNECT_PROTOCOL: | ||
| 3105 | + settings.enableConnectProtocol = value !== 0; | ||
| 3097 | 3106 | } | |
| 3098 | 3107 | offset += 4; | |
| 3099 | 3108 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -301,7 +301,7 @@ function getDefaultSettings() { | |||
| 301 | 301 | if ((flags & (1 << IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL)) === | |
| 302 | 302 | (1 << IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL)) { | |
| 303 | 303 | holder.enableConnectProtocol = | |
| 304 | - settingsBuffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL]; | ||
| 304 | + settingsBuffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] === 1; | ||
| 305 | 305 | } | |
| 306 | 306 | ||
| 307 | 307 | return holder; | |
@@ -322,7 +322,8 @@ function getSettings(session, remote) { | |||
| 322 | 322 | maxFrameSize: settingsBuffer[IDX_SETTINGS_MAX_FRAME_SIZE], | |
| 323 | 323 | maxConcurrentStreams: settingsBuffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS], | |
| 324 | 324 | maxHeaderListSize: settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE], | |
| 325 | - enableConnectProtocol: settingsBuffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] | ||
| 325 | + enableConnectProtocol: | ||
| 326 | + !!settingsBuffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] | ||
| 326 | 327 | }; | |
| 327 | 328 | } | |
| 328 | 329 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -301,13 +301,16 @@ void Http2Session::Http2Settings::RefreshDefaults(Environment* env) { | |||
| 301 | 301 | DEFAULT_SETTINGS_MAX_FRAME_SIZE; | |
| 302 | 302 | buffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE] = | |
| 303 | 303 | DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE; | |
| 304 | + buffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] = | ||
| 305 | + DEFAULT_SETTINGS_ENABLE_CONNECT_PROTOCOL; | ||
| 304 | 306 | buffer[IDX_SETTINGS_COUNT] = | |
| 305 | 307 | (1 << IDX_SETTINGS_HEADER_TABLE_SIZE) | | |
| 306 | 308 | (1 << IDX_SETTINGS_ENABLE_PUSH) | | |
| 307 | 309 | (1 << IDX_SETTINGS_MAX_CONCURRENT_STREAMS) | | |
| 308 | 310 | (1 << IDX_SETTINGS_INITIAL_WINDOW_SIZE) | | |
| 309 | 311 | (1 << IDX_SETTINGS_MAX_FRAME_SIZE) | | |
| 310 | - (1 << IDX_SETTINGS_MAX_HEADER_LIST_SIZE); | ||
| 312 | + (1 << IDX_SETTINGS_MAX_HEADER_LIST_SIZE) | | ||
| 313 | + (1 << IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL); | ||
| 311 | 314 | } | |
| 312 | 315 | ||
| 313 | 316 | ||
@@ -3170,6 +3173,8 @@ void Initialize(Local<Object> target, | |||
| 3170 | 3173 | NODE_DEFINE_CONSTANT(constants, DEFAULT_SETTINGS_MAX_CONCURRENT_STREAMS); | |
| 3171 | 3174 | NODE_DEFINE_CONSTANT(constants, DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE); | |
| 3172 | 3175 | NODE_DEFINE_CONSTANT(constants, DEFAULT_SETTINGS_MAX_FRAME_SIZE); | |
| 3176 | + NODE_DEFINE_CONSTANT(constants, DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE); | ||
| 3177 | + NODE_DEFINE_CONSTANT(constants, DEFAULT_SETTINGS_ENABLE_CONNECT_PROTOCOL); | ||
| 3173 | 3178 | NODE_DEFINE_CONSTANT(constants, MAX_MAX_FRAME_SIZE); | |
| 3174 | 3179 | NODE_DEFINE_CONSTANT(constants, MIN_MAX_FRAME_SIZE); | |
| 3175 | 3180 | NODE_DEFINE_CONSTANT(constants, MAX_INITIAL_WINDOW_SIZE); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -45,6 +45,7 @@ using performance::PerformanceEntry; | |||
| 45 | 45 | #define DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE 65535 | |
| 46 | 46 | #define DEFAULT_SETTINGS_MAX_FRAME_SIZE 16384 | |
| 47 | 47 | #define DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE 65535 | |
| 48 | + #define DEFAULT_SETTINGS_ENABLE_CONNECT_PROTOCOL 0 | ||
| 48 | 49 | #define MAX_MAX_FRAME_SIZE 16777215 | |
| 49 | 50 | #define MIN_MAX_FRAME_SIZE DEFAULT_SETTINGS_MAX_FRAME_SIZE | |
| 50 | 51 | #define MAX_INITIAL_WINDOW_SIZE 2147483647 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -230,7 +230,9 @@ const defaultSettings = { | |||
| 230 | 230 | DEFAULT_SETTINGS_ENABLE_PUSH: 1, | |
| 231 | 231 | DEFAULT_SETTINGS_MAX_CONCURRENT_STREAMS: 4294967295, | |
| 232 | 232 | DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: 65535, | |
| 233 | - DEFAULT_SETTINGS_MAX_FRAME_SIZE: 16384 | ||
| 233 | + DEFAULT_SETTINGS_MAX_FRAME_SIZE: 16384, | ||
| 234 | + DEFAULT_SETTINGS_MAX_HEADER_LIST_SIZE: 65535, | ||
| 235 | + DEFAULT_SETTINGS_ENABLE_CONNECT_PROTOCOL: 0 | ||
| 234 | 236 | }; | |
| 235 | 237 | ||
| 236 | 238 | for (const name of Object.keys(constants)) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -11,7 +11,8 @@ const check = Buffer.from([0x00, 0x01, 0x00, 0x00, 0x10, 0x00, | |||
| 11 | 11 | 0x00, 0x05, 0x00, 0x00, 0x40, 0x00, | |
| 12 | 12 | 0x00, 0x04, 0x00, 0x00, 0xff, 0xff, | |
| 13 | 13 | 0x00, 0x06, 0x00, 0x00, 0xff, 0xff, | |
| 14 | - 0x00, 0x02, 0x00, 0x00, 0x00, 0x01]); | ||
| 14 | + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, | ||
| 15 | + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00]); | ||
| 15 | 16 | const val = http2.getPackedSettings(http2.getDefaultSettings()); | |
| 16 | 17 | assert.deepStrictEqual(val, check); | |
| 17 | 18 | ||
@@ -67,12 +68,27 @@ http2.getPackedSettings({ enablePush: false }); | |||
| 67 | 68 | }); | |
| 68 | 69 | }); | |
| 69 | 70 | ||
| 71 | + [ | ||
| 72 | + 1, null, '', Infinity, new Date(), {}, NaN, [false] | ||
| 73 | + ].forEach((i) => { | ||
| 74 | + assert.throws(() => { | ||
| 75 | + http2.getPackedSettings({ enableConnectProtocol: i }); | ||
| 76 | + }, { | ||
| 77 | + code: 'ERR_HTTP2_INVALID_SETTING_VALUE', | ||
| 78 | + name: 'TypeError', | ||
| 79 | + message: `Invalid value for setting "enableConnectProtocol": ${i}` | ||
| 80 | + }); | ||
| 81 | + }); | ||
| 82 | + | ||
| 70 | 83 | { | |
| 71 | 84 | const check = Buffer.from([ | |
| 72 | - 0x00, 0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x03, 0x00, 0x00, | ||
| 73 | - 0x00, 0xc8, 0x00, 0x05, 0x00, 0x00, 0x4e, 0x20, 0x00, 0x04, | ||
| 74 | - 0x00, 0x00, 0x00, 0x64, 0x00, 0x06, 0x00, 0x00, 0x00, 0x64, | ||
| 75 | - 0x00, 0x02, 0x00, 0x00, 0x00, 0x01]); | ||
| 85 | + 0x00, 0x01, 0x00, 0x00, 0x00, 0x64, | ||
| 86 | + 0x00, 0x03, 0x00, 0x00, 0x00, 0xc8, | ||
| 87 | + 0x00, 0x05, 0x00, 0x00, 0x4e, 0x20, | ||
| 88 | + 0x00, 0x04, 0x00, 0x00, 0x00, 0x64, | ||
| 89 | + 0x00, 0x06, 0x00, 0x00, 0x00, 0x64, | ||
| 90 | + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, | ||
| 91 | + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00]); | ||
| 76 | 92 | ||
| 77 | 93 | const packed = http2.getPackedSettings({ | |
| 78 | 94 | headerTableSize: 100, | |
@@ -81,9 +97,10 @@ http2.getPackedSettings({ enablePush: false }); | |||
| 81 | 97 | maxConcurrentStreams: 200, | |
| 82 | 98 | maxHeaderListSize: 100, | |
| 83 | 99 | enablePush: true, | |
| 100 | + enableConnectProtocol: false, | ||
| 84 | 101 | foo: 'ignored' | |
| 85 | 102 | }); | |
| 86 | - assert.strictEqual(packed.length, 36); | ||
| 103 | + assert.strictEqual(packed.length, 42); | ||
| 87 | 104 | assert.deepStrictEqual(packed, check); | |
| 88 | 105 | } | |
| 89 | 106 | ||
@@ -95,10 +112,13 @@ http2.getPackedSettings({ enablePush: false }); | |||
| 95 | 112 | ||
| 96 | 113 | { | |
| 97 | 114 | const packed = Buffer.from([ | |
| 98 | - 0x00, 0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x03, 0x00, 0x00, | ||
| 99 | - 0x00, 0xc8, 0x00, 0x05, 0x00, 0x00, 0x4e, 0x20, 0x00, 0x04, | ||
| 100 | - 0x00, 0x00, 0x00, 0x64, 0x00, 0x06, 0x00, 0x00, 0x00, 0x64, | ||
| 101 | - 0x00, 0x02, 0x00, 0x00, 0x00, 0x01]); | ||
| 115 | + 0x00, 0x01, 0x00, 0x00, 0x00, 0x64, | ||
| 116 | + 0x00, 0x03, 0x00, 0x00, 0x00, 0xc8, | ||
| 117 | + 0x00, 0x05, 0x00, 0x00, 0x4e, 0x20, | ||
| 118 | + 0x00, 0x04, 0x00, 0x00, 0x00, 0x64, | ||
| 119 | + 0x00, 0x06, 0x00, 0x00, 0x00, 0x64, | ||
| 120 | + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, | ||
| 121 | + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00]); | ||
| 102 | 122 | ||
| 103 | 123 | [1, true, '', [], {}, NaN].forEach((input) => { | |
| 104 | 124 | common.expectsError(() => { | |
@@ -129,30 +149,38 @@ http2.getPackedSettings({ enablePush: false }); | |||
| 129 | 149 | assert.strictEqual(settings.maxConcurrentStreams, 200); | |
| 130 | 150 | assert.strictEqual(settings.maxHeaderListSize, 100); | |
| 131 | 151 | assert.strictEqual(settings.enablePush, true); | |
| 152 | + assert.strictEqual(settings.enableConnectProtocol, false); | ||
| 132 | 153 | } | |
| 133 | 154 | ||
| 134 | 155 | { | |
| 135 | 156 | const packed = Buffer.from([ | |
| 136 | - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00]); | ||
| 157 | + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, | ||
| 158 | + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00]); | ||
| 137 | 159 | ||
| 138 | 160 | const settings = http2.getUnpackedSettings(packed, { validate: true }); | |
| 139 | 161 | assert.strictEqual(settings.enablePush, false); | |
| 162 | + assert.strictEqual(settings.enableConnectProtocol, false); | ||
| 140 | 163 | } | |
| 141 | 164 | { | |
| 142 | 165 | const packed = Buffer.from([ | |
| 143 | - 0x00, 0x02, 0x00, 0x00, 0x00, 0x64]); | ||
| 166 | + 0x00, 0x02, 0x00, 0x00, 0x00, 0x64, | ||
| 167 | + 0x00, 0x08, 0x00, 0x00, 0x00, 0x64]); | ||
| 144 | 168 | ||
| 145 | 169 | const settings = http2.getUnpackedSettings(packed, { validate: true }); | |
| 146 | 170 | assert.strictEqual(settings.enablePush, true); | |
| 171 | + assert.strictEqual(settings.enableConnectProtocol, true); | ||
| 147 | 172 | } | |
| 148 | 173 | ||
| 149 | 174 | // Verify that passing {validate: true} does not throw. | |
| 150 | 175 | { | |
| 151 | 176 | const packed = Buffer.from([ | |
| 152 | - 0x00, 0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x03, 0x00, 0x00, | ||
| 153 | - 0x00, 0xc8, 0x00, 0x05, 0x00, 0x00, 0x4e, 0x20, 0x00, 0x04, | ||
| 154 | - 0x00, 0x00, 0x00, 0x64, 0x00, 0x06, 0x00, 0x00, 0x00, 0x64, | ||
| 155 | - 0x00, 0x02, 0x00, 0x00, 0x00, 0x01]); | ||
| 177 | + 0x00, 0x01, 0x00, 0x00, 0x00, 0x64, | ||
| 178 | + 0x00, 0x03, 0x00, 0x00, 0x00, 0xc8, | ||
| 179 | + 0x00, 0x05, 0x00, 0x00, 0x4e, 0x20, | ||
| 180 | + 0x00, 0x04, 0x00, 0x00, 0x00, 0x64, | ||
| 181 | + 0x00, 0x06, 0x00, 0x00, 0x00, 0x64, | ||
| 182 | + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, | ||
| 183 | + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00]); | ||
| 156 | 184 | ||
| 157 | 185 | http2.getUnpackedSettings(packed, { validate: true }); | |
| 158 | 186 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments