@encharm/cws 4.5.3 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/CLAUDE.md +83 -0
  3. package/README.md +20 -4
  4. package/binding.gyp +8 -2
  5. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  6. package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
  7. package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
  8. package/dist/bindings/cws_darwin_arm64_node147.node +0 -0
  9. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  10. package/dist/bindings/cws_linux_arm64_node127.node +0 -0
  11. package/dist/bindings/cws_linux_arm64_node137.node +0 -0
  12. package/dist/bindings/cws_linux_arm64_node147.node +0 -0
  13. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  14. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  15. package/dist/bindings/cws_linux_x64_node137.node +0 -0
  16. package/dist/bindings/cws_linux_x64_node147.node +0 -0
  17. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  18. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  19. package/dist/bindings/cws_win32_x64_node137.node +0 -0
  20. package/dist/bindings/cws_win32_x64_node147.node +0 -0
  21. package/dist/client.d.ts +1 -0
  22. package/dist/client.js +15 -1
  23. package/dist/index.d.ts +6 -1
  24. package/dist/index.js +2 -0
  25. package/dist/server.d.ts +1 -0
  26. package/dist/server.js +16 -2
  27. package/dist/shared.d.ts +1 -0
  28. package/dist/shared.js +3 -2
  29. package/package.json +1 -1
  30. package/src/Addon.cpp +4 -1
  31. package/src/Addon.h +80 -15
  32. package/src/Extensions.cpp +7 -1
  33. package/src/Extensions.h +2 -1
  34. package/src/Group.cpp +1 -1
  35. package/src/Group.h +4 -1
  36. package/src/HTTPSocket.cpp +1 -1
  37. package/src/Hub.cpp +11 -76
  38. package/src/Hub.h +12 -10
  39. package/src/Networking.h +11 -0
  40. package/src/Socket.h +201 -6
  41. package/src/WebSocket.cpp +8 -5
  42. package/src/Zlib.cpp +138 -0
  43. package/src/Zlib.h +38 -0
  44. package/src/cSNode.cpp +2 -0
  45. package/src/cSNode.h +4 -0
  46. package/src/headers/26/acorn_version.h +6 -0
  47. package/src/headers/26/aliased_buffer-inl.h +264 -0
  48. package/src/headers/26/aliased_buffer.h +205 -0
  49. package/src/headers/26/aliased_struct-inl.h +143 -0
  50. package/src/headers/26/aliased_struct.h +248 -0
  51. package/src/headers/26/amaro_version.h +6 -0
  52. package/src/headers/26/async_context_frame.h +33 -0
  53. package/src/headers/26/async_wrap-inl.h +123 -0
  54. package/src/headers/26/async_wrap.h +254 -0
  55. package/src/headers/26/base_object-inl.h +333 -0
  56. package/src/headers/26/base_object.h +339 -0
  57. package/src/headers/26/base_object_types.h +76 -0
  58. package/src/headers/26/blob_serializer_deserializer-inl.h +385 -0
  59. package/src/headers/26/blob_serializer_deserializer.h +142 -0
  60. package/src/headers/26/builtin_info.h +57 -0
  61. package/src/headers/26/callback_queue-inl.h +97 -0
  62. package/src/headers/26/callback_queue.h +79 -0
  63. package/src/headers/26/cares_wrap.h +475 -0
  64. package/src/headers/26/cleanup_queue-inl.h +36 -0
  65. package/src/headers/26/cleanup_queue.h +79 -0
  66. package/src/headers/26/compile_cache.h +134 -0
  67. package/src/headers/26/connect_wrap.h +26 -0
  68. package/src/headers/26/connection_wrap.h +30 -0
  69. package/src/headers/26/cppgc_helpers-inl.h +69 -0
  70. package/src/headers/26/cppgc_helpers.h +162 -0
  71. package/src/headers/26/crypto/crypto_aes.h +107 -0
  72. package/src/headers/26/crypto/crypto_argon2.h +88 -0
  73. package/src/headers/26/crypto/crypto_bio.h +193 -0
  74. package/src/headers/26/crypto/crypto_chacha20_poly1305.h +62 -0
  75. package/src/headers/26/crypto/crypto_cipher.h +291 -0
  76. package/src/headers/26/crypto/crypto_common.h +48 -0
  77. package/src/headers/26/crypto/crypto_context.h +219 -0
  78. package/src/headers/26/crypto/crypto_dh.h +104 -0
  79. package/src/headers/26/crypto/crypto_dsa.h +50 -0
  80. package/src/headers/26/crypto/crypto_ec.h +102 -0
  81. package/src/headers/26/crypto/crypto_hash.h +157 -0
  82. package/src/headers/26/crypto/crypto_hkdf.h +62 -0
  83. package/src/headers/26/crypto/crypto_hmac.h +92 -0
  84. package/src/headers/26/crypto/crypto_kem.h +131 -0
  85. package/src/headers/26/crypto/crypto_keygen.h +382 -0
  86. package/src/headers/26/crypto/crypto_keys.h +366 -0
  87. package/src/headers/26/crypto/crypto_kmac.h +79 -0
  88. package/src/headers/26/crypto/crypto_pbkdf2.h +76 -0
  89. package/src/headers/26/crypto/crypto_pqc.h +39 -0
  90. package/src/headers/26/crypto/crypto_random.h +127 -0
  91. package/src/headers/26/crypto/crypto_rsa.h +108 -0
  92. package/src/headers/26/crypto/crypto_scrypt.h +85 -0
  93. package/src/headers/26/crypto/crypto_sig.h +159 -0
  94. package/src/headers/26/crypto/crypto_spkac.h +21 -0
  95. package/src/headers/26/crypto/crypto_timing.h +20 -0
  96. package/src/headers/26/crypto/crypto_tls.h +342 -0
  97. package/src/headers/26/crypto/crypto_turboshake.h +105 -0
  98. package/src/headers/26/crypto/crypto_util.h +775 -0
  99. package/src/headers/26/crypto/crypto_x509.h +140 -0
  100. package/src/headers/26/dataqueue/queue.h +311 -0
  101. package/src/headers/26/debug_utils-inl.h +291 -0
  102. package/src/headers/26/debug_utils.h +200 -0
  103. package/src/headers/26/diagnosticfilename-inl.h +33 -0
  104. package/src/headers/26/embedded_data.h +17 -0
  105. package/src/headers/26/encoding_binding.h +59 -0
  106. package/src/headers/26/env-inl.h +956 -0
  107. package/src/headers/26/env.h +1294 -0
  108. package/src/headers/26/env_properties.h +562 -0
  109. package/src/headers/26/ffi/data.h +30 -0
  110. package/src/headers/26/ffi/fast.h +96 -0
  111. package/src/headers/26/ffi/jit_memory.h +26 -0
  112. package/src/headers/26/ffi/types.h +99 -0
  113. package/src/headers/26/handle_wrap.h +123 -0
  114. package/src/headers/26/histogram-inl.h +211 -0
  115. package/src/headers/26/histogram.h +474 -0
  116. package/src/headers/26/inspector/dom_storage_agent.h +68 -0
  117. package/src/headers/26/inspector/inspector_object_utils.h +38 -0
  118. package/src/headers/26/inspector/io_agent.h +30 -0
  119. package/src/headers/26/inspector/main_thread_interface.h +116 -0
  120. package/src/headers/26/inspector/network_agent.h +110 -0
  121. package/src/headers/26/inspector/network_inspector.h +45 -0
  122. package/src/headers/26/inspector/network_requests_buffer.h +195 -0
  123. package/src/headers/26/inspector/network_resource_manager.h +29 -0
  124. package/src/headers/26/inspector/node_json.h +24 -0
  125. package/src/headers/26/inspector/node_string.h +101 -0
  126. package/src/headers/26/inspector/notification_emitter.h +38 -0
  127. package/src/headers/26/inspector/protocol_helper.h +27 -0
  128. package/src/headers/26/inspector/runtime_agent.h +41 -0
  129. package/src/headers/26/inspector/storage_agent.h +33 -0
  130. package/src/headers/26/inspector/target_agent.h +59 -0
  131. package/src/headers/26/inspector/target_manager.h +70 -0
  132. package/src/headers/26/inspector/tracing_agent.h +43 -0
  133. package/src/headers/26/inspector/worker_agent.h +40 -0
  134. package/src/headers/26/inspector/worker_inspector.h +124 -0
  135. package/src/headers/26/inspector_agent.h +168 -0
  136. package/src/headers/26/inspector_io.h +78 -0
  137. package/src/headers/26/inspector_profiler.h +149 -0
  138. package/src/headers/26/inspector_socket.h +60 -0
  139. package/src/headers/26/inspector_socket_server.h +110 -0
  140. package/src/headers/26/js_native_api.h +634 -0
  141. package/src/headers/26/js_native_api_types.h +244 -0
  142. package/src/headers/26/js_native_api_v8.h +485 -0
  143. package/src/headers/26/js_native_api_v8_internals.h +45 -0
  144. package/src/headers/26/js_stream.h +57 -0
  145. package/src/headers/26/json_utils.h +172 -0
  146. package/src/headers/26/large_pages/node_large_page.h +34 -0
  147. package/src/headers/26/lru_cache-inl.h +69 -0
  148. package/src/headers/26/memory_tracker-inl.h +461 -0
  149. package/src/headers/26/memory_tracker.h +341 -0
  150. package/src/headers/26/module_wrap.h +231 -0
  151. package/src/headers/26/ncrypto.h +2008 -0
  152. package/src/headers/26/node.h +1693 -0
  153. package/src/headers/26/node_api.h +265 -0
  154. package/src/headers/26/node_api_internals.h +48 -0
  155. package/src/headers/26/node_api_types.h +58 -0
  156. package/src/headers/26/node_binding.h +170 -0
  157. package/src/headers/26/node_blob.h +160 -0
  158. package/src/headers/26/node_bob-inl.h +36 -0
  159. package/src/headers/26/node_bob.h +107 -0
  160. package/src/headers/26/node_buffer.h +92 -0
  161. package/src/headers/26/node_builtins.h +239 -0
  162. package/src/headers/26/node_concepts.h +46 -0
  163. package/src/headers/26/node_config_file.h +77 -0
  164. package/src/headers/26/node_constants.h +82 -0
  165. package/src/headers/26/node_context_data.h +171 -0
  166. package/src/headers/26/node_contextify.h +261 -0
  167. package/src/headers/26/node_crypto.h +66 -0
  168. package/src/headers/26/node_debug.h +30 -0
  169. package/src/headers/26/node_diagnostics_channel.h +121 -0
  170. package/src/headers/26/node_dir.h +52 -0
  171. package/src/headers/26/node_dotenv.h +45 -0
  172. package/src/headers/26/node_errors.h +378 -0
  173. package/src/headers/26/node_exit_code.h +54 -0
  174. package/src/headers/26/node_external_reference.h +171 -0
  175. package/src/headers/26/node_ffi.h +212 -0
  176. package/src/headers/26/node_file-inl.h +421 -0
  177. package/src/headers/26/node_file.h +561 -0
  178. package/src/headers/26/node_file_utils.h +39 -0
  179. package/src/headers/26/node_hash.h +212 -0
  180. package/src/headers/26/node_http2.h +1202 -0
  181. package/src/headers/26/node_http2_state.h +159 -0
  182. package/src/headers/26/node_http_common-inl.h +199 -0
  183. package/src/headers/26/node_http_common.h +535 -0
  184. package/src/headers/26/node_i18n.h +132 -0
  185. package/src/headers/26/node_internals.h +485 -0
  186. package/src/headers/26/node_locks.h +184 -0
  187. package/src/headers/26/node_main_instance.h +67 -0
  188. package/src/headers/26/node_mem-inl.h +113 -0
  189. package/src/headers/26/node_mem.h +45 -0
  190. package/src/headers/26/node_messaging.h +389 -0
  191. package/src/headers/26/node_metadata.h +172 -0
  192. package/src/headers/26/node_modules.h +102 -0
  193. package/src/headers/26/node_mutex.h +323 -0
  194. package/src/headers/26/node_object_wrap.h +145 -0
  195. package/src/headers/26/node_options-inl.h +524 -0
  196. package/src/headers/26/node_options.h +710 -0
  197. package/src/headers/26/node_perf.h +167 -0
  198. package/src/headers/26/node_perf_common.h +103 -0
  199. package/src/headers/26/node_platform.h +290 -0
  200. package/src/headers/26/node_process-inl.h +26 -0
  201. package/src/headers/26/node_process.h +112 -0
  202. package/src/headers/26/node_profiling.h +38 -0
  203. package/src/headers/26/node_realm-inl.h +156 -0
  204. package/src/headers/26/node_realm.h +236 -0
  205. package/src/headers/26/node_report.h +43 -0
  206. package/src/headers/26/node_revert.h +82 -0
  207. package/src/headers/26/node_root_certs.h +2937 -0
  208. package/src/headers/26/node_sea.h +101 -0
  209. package/src/headers/26/node_shadow_realm.h +46 -0
  210. package/src/headers/26/node_snapshot_builder.h +57 -0
  211. package/src/headers/26/node_snapshotable.h +167 -0
  212. package/src/headers/26/node_sockaddr-inl.h +248 -0
  213. package/src/headers/26/node_sockaddr.h +459 -0
  214. package/src/headers/26/node_sqlite.h +607 -0
  215. package/src/headers/26/node_stat_watcher.h +73 -0
  216. package/src/headers/26/node_task_runner.h +92 -0
  217. package/src/headers/26/node_threadsafe_cow-inl.h +54 -0
  218. package/src/headers/26/node_threadsafe_cow.h +105 -0
  219. package/src/headers/26/node_union_bytes.h +81 -0
  220. package/src/headers/26/node_url.h +101 -0
  221. package/src/headers/26/node_url_pattern.h +118 -0
  222. package/src/headers/26/node_v8.h +78 -0
  223. package/src/headers/26/node_v8_embedder.h +26 -0
  224. package/src/headers/26/node_v8_platform-inl.h +96 -0
  225. package/src/headers/26/node_version.h +116 -0
  226. package/src/headers/26/node_wasi.h +184 -0
  227. package/src/headers/26/node_wasm_web_api.h +55 -0
  228. package/src/headers/26/node_watchdog.h +164 -0
  229. package/src/headers/26/node_webstorage.h +62 -0
  230. package/src/headers/26/node_worker.h +162 -0
  231. package/src/headers/26/path.h +36 -0
  232. package/src/headers/26/permission/boolean_permission.h +50 -0
  233. package/src/headers/26/permission/fs_permission.h +192 -0
  234. package/src/headers/26/permission/permission.h +155 -0
  235. package/src/headers/26/permission/permission_base.h +79 -0
  236. package/src/headers/26/pipe_wrap.h +80 -0
  237. package/src/headers/26/quic/application.h +279 -0
  238. package/src/headers/26/quic/arena.h +373 -0
  239. package/src/headers/26/quic/bindingdata.h +440 -0
  240. package/src/headers/26/quic/cid.h +127 -0
  241. package/src/headers/26/quic/data.h +358 -0
  242. package/src/headers/26/quic/defs.h +417 -0
  243. package/src/headers/26/quic/endpoint.h +519 -0
  244. package/src/headers/26/quic/guard.h +5 -0
  245. package/src/headers/26/quic/http3.h +25 -0
  246. package/src/headers/26/quic/packet.h +166 -0
  247. package/src/headers/26/quic/preferredaddress.h +72 -0
  248. package/src/headers/26/quic/session.h +770 -0
  249. package/src/headers/26/quic/session_manager.h +107 -0
  250. package/src/headers/26/quic/sessionticket.h +110 -0
  251. package/src/headers/26/quic/streams.h +518 -0
  252. package/src/headers/26/quic/tlscontext.h +353 -0
  253. package/src/headers/26/quic/tokens.h +263 -0
  254. package/src/headers/26/quic/transportparams.h +184 -0
  255. package/src/headers/26/req_wrap-inl.h +175 -0
  256. package/src/headers/26/req_wrap.h +79 -0
  257. package/src/headers/26/spawn_sync.h +243 -0
  258. package/src/headers/26/stream_base-inl.h +170 -0
  259. package/src/headers/26/stream_base.h +487 -0
  260. package/src/headers/26/stream_pipe.h +76 -0
  261. package/src/headers/26/stream_wrap.h +137 -0
  262. package/src/headers/26/string_bytes.h +114 -0
  263. package/src/headers/26/string_decoder-inl.h +31 -0
  264. package/src/headers/26/string_decoder.h +49 -0
  265. package/src/headers/26/tcp_wrap.h +138 -0
  266. package/src/headers/26/threadpoolwork-inl.h +70 -0
  267. package/src/headers/26/timer_wrap-inl.h +32 -0
  268. package/src/headers/26/timer_wrap.h +87 -0
  269. package/src/headers/26/timers.h +70 -0
  270. package/src/headers/26/tracing/agent.h +125 -0
  271. package/src/headers/26/tracing/agent_legacy.h +146 -0
  272. package/src/headers/26/tracing/agent_perfetto.h +145 -0
  273. package/src/headers/26/tracing/node_trace_buffer.h +91 -0
  274. package/src/headers/26/tracing/node_trace_writer.h +79 -0
  275. package/src/headers/26/tracing/trace_event.h +27 -0
  276. package/src/headers/26/tracing/trace_event_helper.h +40 -0
  277. package/src/headers/26/tracing/trace_event_legacy.h +1113 -0
  278. package/src/headers/26/tracing/trace_event_legacy_inl.h +711 -0
  279. package/src/headers/26/tracing/trace_event_perfetto.h +47 -0
  280. package/src/headers/26/tracing/traced_value.h +167 -0
  281. package/src/headers/26/tty_wrap.h +65 -0
  282. package/src/headers/26/udp_wrap.h +231 -0
  283. package/src/headers/26/undici_version.h +6 -0
  284. package/src/headers/26/util-inl.h +788 -0
  285. package/src/headers/26/util.h +1207 -0
  286. package/src/headers/26/v8-cpp-heap-external.h +56 -0
  287. package/src/headers/26/v8-external-memory-accounter.h +60 -0
  288. package/src/headers/26/v8-fast-api-calls.h +784 -0
  289. package/src/headers/26/v8-inspector-protocol.h +13 -0
  290. package/src/headers/26/v8-inspector.h +458 -0
  291. package/src/headers/26/v8-metrics.h +273 -0
  292. package/src/headers/26/v8-trace-categories.h +28 -0
  293. package/src/headers/26/v8-unwinder-state.h +30 -0
  294. package/src/headers/26/v8-util.h +549 -0
  295. package/src/headers/26/v8-value-serializer-version.h +24 -0
  296. package/src/headers/26/v8-version-string.h +38 -0
  297. package/src/headers/26/v8-wasm-trap-handler-posix.h +31 -0
  298. package/src/headers/26/v8-wasm-trap-handler-win.h +28 -0
  299. package/src/headers/26/zlib_version.h +6 -0
  300. package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Info.plist +0 -20
  301. package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Resources/DWARF/cws_darwin_arm64_node115.node +0 -0
  302. package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Resources/Relocations/aarch64/cws_darwin_arm64_node115.node.yml +0 -931
  303. package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Info.plist +0 -20
  304. package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Resources/DWARF/cws_darwin_arm64_node127.node +0 -0
  305. package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Resources/Relocations/aarch64/cws_darwin_arm64_node127.node.yml +0 -931
@@ -0,0 +1,159 @@
1
+ #ifndef SRC_NODE_HTTP2_STATE_H_
2
+ #define SRC_NODE_HTTP2_STATE_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include "aliased_buffer.h"
7
+
8
+ struct nghttp2_rcbuf;
9
+
10
+ namespace node {
11
+ namespace http2 {
12
+
13
+ enum Http2SettingsIndex {
14
+ IDX_SETTINGS_HEADER_TABLE_SIZE,
15
+ IDX_SETTINGS_ENABLE_PUSH,
16
+ IDX_SETTINGS_INITIAL_WINDOW_SIZE,
17
+ IDX_SETTINGS_MAX_FRAME_SIZE,
18
+ IDX_SETTINGS_MAX_CONCURRENT_STREAMS,
19
+ IDX_SETTINGS_MAX_HEADER_LIST_SIZE,
20
+ IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL,
21
+ IDX_SETTINGS_COUNT
22
+ };
23
+
24
+ // number of max additional settings, thus settings not implemented by nghttp2
25
+ const size_t MAX_ADDITIONAL_SETTINGS = 10;
26
+
27
+ enum Http2SessionStateIndex {
28
+ IDX_SESSION_STATE_EFFECTIVE_LOCAL_WINDOW_SIZE,
29
+ IDX_SESSION_STATE_EFFECTIVE_RECV_DATA_LENGTH,
30
+ IDX_SESSION_STATE_NEXT_STREAM_ID,
31
+ IDX_SESSION_STATE_LOCAL_WINDOW_SIZE,
32
+ IDX_SESSION_STATE_LAST_PROC_STREAM_ID,
33
+ IDX_SESSION_STATE_REMOTE_WINDOW_SIZE,
34
+ IDX_SESSION_STATE_OUTBOUND_QUEUE_SIZE,
35
+ IDX_SESSION_STATE_HD_DEFLATE_DYNAMIC_TABLE_SIZE,
36
+ IDX_SESSION_STATE_HD_INFLATE_DYNAMIC_TABLE_SIZE,
37
+ IDX_SESSION_STATE_COUNT
38
+ };
39
+
40
+ enum Http2StreamStateIndex {
41
+ IDX_STREAM_STATE,
42
+ IDX_STREAM_STATE_WEIGHT,
43
+ IDX_STREAM_STATE_SUM_DEPENDENCY_WEIGHT,
44
+ IDX_STREAM_STATE_LOCAL_CLOSE,
45
+ IDX_STREAM_STATE_REMOTE_CLOSE,
46
+ IDX_STREAM_STATE_LOCAL_WINDOW_SIZE,
47
+ IDX_STREAM_STATE_COUNT
48
+ };
49
+
50
+ enum Http2OptionsIndex {
51
+ IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE,
52
+ IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS,
53
+ IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH,
54
+ IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS,
55
+ IDX_OPTIONS_PADDING_STRATEGY,
56
+ IDX_OPTIONS_MAX_HEADER_LIST_PAIRS,
57
+ IDX_OPTIONS_MAX_OUTSTANDING_PINGS,
58
+ IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS,
59
+ IDX_OPTIONS_MAX_SESSION_MEMORY,
60
+ IDX_OPTIONS_MAX_SETTINGS,
61
+ IDX_OPTIONS_STREAM_RESET_RATE,
62
+ IDX_OPTIONS_STREAM_RESET_BURST,
63
+ IDX_OPTIONS_STRICT_HTTP_FIELD_WHITESPACE_VALIDATION,
64
+ IDX_OPTIONS_FLAGS
65
+ };
66
+
67
+ enum Http2StreamStatisticsIndex {
68
+ IDX_STREAM_STATS_ID,
69
+ IDX_STREAM_STATS_TIMETOFIRSTBYTE,
70
+ IDX_STREAM_STATS_TIMETOFIRSTHEADER,
71
+ IDX_STREAM_STATS_TIMETOFIRSTBYTESENT,
72
+ IDX_STREAM_STATS_SENTBYTES,
73
+ IDX_STREAM_STATS_RECEIVEDBYTES,
74
+ IDX_STREAM_STATS_COUNT
75
+ };
76
+
77
+ enum Http2SessionStatisticsIndex {
78
+ IDX_SESSION_STATS_TYPE,
79
+ IDX_SESSION_STATS_PINGRTT,
80
+ IDX_SESSION_STATS_FRAMESRECEIVED,
81
+ IDX_SESSION_STATS_FRAMESSENT,
82
+ IDX_SESSION_STATS_STREAMCOUNT,
83
+ IDX_SESSION_STATS_STREAMAVERAGEDURATION,
84
+ IDX_SESSION_STATS_DATA_SENT,
85
+ IDX_SESSION_STATS_DATA_RECEIVED,
86
+ IDX_SESSION_STATS_MAX_CONCURRENT_STREAMS,
87
+ IDX_SESSION_STATS_COUNT
88
+ };
89
+
90
+ class Http2State : public BaseObject {
91
+ public:
92
+ Http2State(Realm* realm, v8::Local<v8::Object> obj)
93
+ : BaseObject(realm, obj),
94
+ root_buffer(realm->isolate(), sizeof(http2_state_internal)),
95
+ session_state_buffer(
96
+ realm->isolate(),
97
+ offsetof(http2_state_internal, session_state_buffer),
98
+ IDX_SESSION_STATE_COUNT,
99
+ root_buffer),
100
+ stream_state_buffer(realm->isolate(),
101
+ offsetof(http2_state_internal, stream_state_buffer),
102
+ IDX_STREAM_STATE_COUNT,
103
+ root_buffer),
104
+ stream_stats_buffer(realm->isolate(),
105
+ offsetof(http2_state_internal, stream_stats_buffer),
106
+ IDX_STREAM_STATS_COUNT,
107
+ root_buffer),
108
+ session_stats_buffer(
109
+ realm->isolate(),
110
+ offsetof(http2_state_internal, session_stats_buffer),
111
+ IDX_SESSION_STATS_COUNT,
112
+ root_buffer),
113
+ options_buffer(realm->isolate(),
114
+ offsetof(http2_state_internal, options_buffer),
115
+ IDX_OPTIONS_FLAGS + 1,
116
+ root_buffer),
117
+ settings_buffer(
118
+ realm->isolate(),
119
+ offsetof(http2_state_internal, settings_buffer),
120
+ IDX_SETTINGS_COUNT + 1 + 1 + 2 * MAX_ADDITIONAL_SETTINGS,
121
+ root_buffer) {}
122
+
123
+ AliasedUint8Array root_buffer;
124
+ AliasedFloat64Array session_state_buffer;
125
+ AliasedFloat64Array stream_state_buffer;
126
+ AliasedFloat64Array stream_stats_buffer;
127
+ AliasedFloat64Array session_stats_buffer;
128
+ AliasedUint32Array options_buffer;
129
+ AliasedUint32Array settings_buffer;
130
+
131
+ void MemoryInfo(MemoryTracker* tracker) const override;
132
+ SET_SELF_SIZE(Http2State)
133
+ SET_MEMORY_INFO_NAME(Http2State)
134
+
135
+ SET_BINDING_ID(http2_binding_data)
136
+
137
+ private:
138
+ struct http2_state_internal {
139
+ // doubles first so that they are always sizeof(double)-aligned
140
+ double session_state_buffer[IDX_SESSION_STATE_COUNT];
141
+ double stream_state_buffer[IDX_STREAM_STATE_COUNT];
142
+ double stream_stats_buffer[IDX_STREAM_STATS_COUNT];
143
+ double session_stats_buffer[IDX_SESSION_STATS_COUNT];
144
+ uint32_t options_buffer[IDX_OPTIONS_FLAGS + 1];
145
+ // first + 1: number of actual nghttp2 supported settings
146
+ // second + 1: number of additional settings not supported by nghttp2
147
+ // 2 * MAX_ADDITIONAL_SETTINGS: settings id and value for each
148
+ // additional setting
149
+ uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1 + 1 +
150
+ 2 * MAX_ADDITIONAL_SETTINGS];
151
+ };
152
+ };
153
+
154
+ } // namespace http2
155
+ } // namespace node
156
+
157
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
158
+
159
+ #endif // SRC_NODE_HTTP2_STATE_H_
@@ -0,0 +1,199 @@
1
+ #ifndef SRC_NODE_HTTP_COMMON_INL_H_
2
+ #define SRC_NODE_HTTP_COMMON_INL_H_
3
+
4
+ #include "node_http_common.h"
5
+
6
+ #include "env-inl.h"
7
+ #include "node.h"
8
+ #include "node_mem-inl.h"
9
+ #include "string_bytes.h"
10
+ #include "v8.h"
11
+
12
+ #include <algorithm>
13
+ #include "nbytes.h"
14
+
15
+ namespace node {
16
+
17
+ template <typename T>
18
+ NgHeaders<T>::NgHeaders(Environment* env, v8::Local<v8::Array> headers) {
19
+ v8::Local<v8::Value> header_string =
20
+ headers->Get(env->context(), 0).ToLocalChecked();
21
+ v8::Local<v8::Value> header_count =
22
+ headers->Get(env->context(), 1).ToLocalChecked();
23
+ CHECK(header_count->IsUint32());
24
+ CHECK(header_string->IsString());
25
+ count_ = header_count.As<v8::Uint32>()->Value();
26
+ int header_string_len = header_string.As<v8::String>()->Length();
27
+
28
+ if (count_ == 0) {
29
+ CHECK_EQ(header_string_len, 0);
30
+ return;
31
+ }
32
+
33
+ buf_.AllocateSufficientStorage((alignof(nv_t) - 1) +
34
+ count_ * sizeof(nv_t) +
35
+ header_string_len);
36
+
37
+ char* start = nbytes::AlignUp(buf_.out(), alignof(nv_t));
38
+ char* header_contents = start + (count_ * sizeof(nv_t));
39
+ nv_t* const nva = reinterpret_cast<nv_t*>(start);
40
+
41
+ CHECK_LE(header_contents + header_string_len, *buf_ + buf_.length());
42
+ CHECK_EQ(StringBytes::Write(env->isolate(),
43
+ header_contents,
44
+ header_string_len,
45
+ header_string.As<v8::String>(),
46
+ LATIN1),
47
+ static_cast<size_t>(header_string_len));
48
+
49
+ size_t n = 0;
50
+ char* p;
51
+ for (p = header_contents; p < header_contents + header_string_len; n++) {
52
+ if (n >= count_) {
53
+ static uint8_t zero = '\0';
54
+ nva[0].name = nva[0].value = &zero;
55
+ nva[0].namelen = nva[0].valuelen = 1;
56
+ count_ = 1;
57
+ return;
58
+ }
59
+
60
+ nva[n].name = reinterpret_cast<uint8_t*>(p);
61
+ nva[n].namelen = strlen(p);
62
+ p += nva[n].namelen + 1;
63
+ nva[n].value = reinterpret_cast<uint8_t*>(p);
64
+ nva[n].valuelen = strlen(p);
65
+ p += nva[n].valuelen + 1;
66
+ nva[n].flags = *p;
67
+ p++;
68
+ }
69
+ }
70
+
71
+ size_t GetClientMaxHeaderPairs(size_t max_header_pairs) {
72
+ static constexpr size_t min_header_pairs = 1;
73
+ return std::max(max_header_pairs, min_header_pairs);
74
+ }
75
+
76
+ size_t GetServerMaxHeaderPairs(size_t max_header_pairs) {
77
+ static constexpr size_t min_header_pairs = 4;
78
+ return std::max(max_header_pairs, min_header_pairs);
79
+ }
80
+
81
+ template <typename allocator_t>
82
+ std::string NgHeaderBase<allocator_t>::ToString() const {
83
+ std::string ret = name();
84
+ ret += " = ";
85
+ ret += value();
86
+ return ret;
87
+ }
88
+
89
+ template <typename T>
90
+ bool NgHeader<T>::IsZeroLength(
91
+ NgHeader<T>::rcbuf_t* name,
92
+ NgHeader<T>::rcbuf_t* value) {
93
+ return IsZeroLength(-1, name, value);
94
+ }
95
+
96
+ template <typename T>
97
+ bool NgHeader<T>::IsZeroLength(int32_t token,
98
+ NgHeader<T>::rcbuf_t* name,
99
+ NgHeader<T>::rcbuf_t* value) {
100
+ if (NgHeader<T>::rcbufferpointer_t::IsZeroLength(value))
101
+ return true;
102
+
103
+ return NgHeader<T>::rcbufferpointer_t::IsZeroLength(name);
104
+ }
105
+
106
+ template <typename T>
107
+ NgHeader<T>::NgHeader(
108
+ Environment* env,
109
+ NgHeader<T>::rcbuf_t* name,
110
+ NgHeader<T>::rcbuf_t* value,
111
+ uint8_t flags)
112
+ : NgHeader<T>(env, -1, name, value, flags) {}
113
+
114
+ template <typename T>
115
+ NgHeader<T>::NgHeader(
116
+ Environment* env,
117
+ int32_t token,
118
+ NgHeader<T>::rcbuf_t* name,
119
+ NgHeader<T>::rcbuf_t* value,
120
+ uint8_t flags) : env_(env), token_(token), flags_(flags) {
121
+ if (token == -1) {
122
+ CHECK_NOT_NULL(name);
123
+ name_.reset(name, true); // Internalizable
124
+ }
125
+ CHECK_NOT_NULL(value);
126
+ name_.reset(name, true); // Internalizable
127
+ value_.reset(value);
128
+ }
129
+
130
+ template <typename T>
131
+ NgHeader<T>::NgHeader(NgHeader<T>&& other) noexcept
132
+ : env_(other.env_),
133
+ name_(std::move(other.name_)),
134
+ value_(std::move(other.value_)),
135
+ token_(other.token_),
136
+ flags_(other.flags_) {
137
+ other.token_ = -1;
138
+ other.flags_ = 0;
139
+ other.env_ = nullptr;
140
+ }
141
+
142
+ template <typename T>
143
+ void NgHeader<T>::MemoryInfo(MemoryTracker* tracker) const {
144
+ tracker->TrackField("name", name_);
145
+ tracker->TrackField("value", value_);
146
+ }
147
+
148
+ template <typename T>
149
+ v8::MaybeLocal<v8::String> NgHeader<T>::GetName(
150
+ NgHeader<T>::allocator_t* allocator) const {
151
+
152
+ // Not all instances will support using token id's for header names.
153
+ // HTTP/2 specifically does not support it.
154
+ const char* header_name = T::ToHttpHeaderName(token_);
155
+
156
+ // If header_name is not nullptr, then it is a known header with
157
+ // a statically defined name. We can safely internalize it here.
158
+ if (header_name != nullptr) {
159
+ auto& static_str_map = env_->isolate_data()->static_str_map;
160
+ v8::Eternal<v8::String> eternal = static_str_map[header_name];
161
+ if (eternal.IsEmpty()) {
162
+ v8::Local<v8::String> str = OneByteString(env_->isolate(), header_name);
163
+ eternal.Set(env_->isolate(), str);
164
+ return str;
165
+ }
166
+ return eternal.Get(env_->isolate());
167
+ }
168
+ return rcbufferpointer_t::External::New(allocator, name_);
169
+ }
170
+
171
+ template <typename T>
172
+ v8::MaybeLocal<v8::String> NgHeader<T>::GetValue(
173
+ NgHeader<T>::allocator_t* allocator) const {
174
+ return rcbufferpointer_t::External::New(allocator, value_);
175
+ }
176
+
177
+ template <typename T>
178
+ std::string NgHeader<T>::name() const {
179
+ return name_.str();
180
+ }
181
+
182
+ template <typename T>
183
+ std::string NgHeader<T>::value() const {
184
+ return value_.str();
185
+ }
186
+
187
+ template <typename T>
188
+ size_t NgHeader<T>::length() const {
189
+ return name_.len() + value_.len();
190
+ }
191
+
192
+ template <typename T>
193
+ uint8_t NgHeader<T>::flags() const {
194
+ return flags_;
195
+ }
196
+
197
+ } // namespace node
198
+
199
+ #endif // SRC_NODE_HTTP_COMMON_INL_H_