@kungfu-tech/libnode-win32-x64 0.0.0-bootstrap.0 → 22.22.3-kf.1

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 (343) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/dist/node/include/acorn_version.h +6 -0
  4. package/dist/node/include/aliased_buffer-inl.h +244 -0
  5. package/dist/node/include/aliased_buffer.h +206 -0
  6. package/dist/node/include/aliased_struct-inl.h +54 -0
  7. package/dist/node/include/aliased_struct.h +63 -0
  8. package/dist/node/include/amaro_version.h +6 -0
  9. package/dist/node/include/async_context_frame.h +33 -0
  10. package/dist/node/include/async_wrap-inl.h +96 -0
  11. package/dist/node/include/async_wrap.h +243 -0
  12. package/dist/node/include/base_object-inl.h +335 -0
  13. package/dist/node/include/base_object.h +342 -0
  14. package/dist/node/include/base_object_types.h +74 -0
  15. package/dist/node/include/blob_serializer_deserializer-inl.h +385 -0
  16. package/dist/node/include/blob_serializer_deserializer.h +132 -0
  17. package/dist/node/include/callback_queue-inl.h +97 -0
  18. package/dist/node/include/callback_queue.h +79 -0
  19. package/dist/node/include/cares_wrap.h +447 -0
  20. package/dist/node/include/cjs_module_lexer_version.h +6 -0
  21. package/dist/node/include/cleanup_queue-inl.h +36 -0
  22. package/dist/node/include/cleanup_queue.h +79 -0
  23. package/dist/node/include/compile_cache.h +104 -0
  24. package/dist/node/include/connect_wrap.h +26 -0
  25. package/dist/node/include/connection_wrap.h +30 -0
  26. package/dist/node/include/cppgc/allocation.h +310 -0
  27. package/dist/node/include/cppgc/common.h +28 -0
  28. package/dist/node/include/cppgc/cross-thread-persistent.h +466 -0
  29. package/dist/node/include/cppgc/custom-space.h +97 -0
  30. package/dist/node/include/cppgc/default-platform.h +67 -0
  31. package/dist/node/include/cppgc/ephemeron-pair.h +30 -0
  32. package/dist/node/include/cppgc/explicit-management.h +100 -0
  33. package/dist/node/include/cppgc/garbage-collected.h +106 -0
  34. package/dist/node/include/cppgc/heap-consistency.h +309 -0
  35. package/dist/node/include/cppgc/heap-handle.h +48 -0
  36. package/dist/node/include/cppgc/heap-state.h +82 -0
  37. package/dist/node/include/cppgc/heap-statistics.h +120 -0
  38. package/dist/node/include/cppgc/heap.h +202 -0
  39. package/dist/node/include/cppgc/internal/api-constants.h +87 -0
  40. package/dist/node/include/cppgc/internal/atomic-entry-flag.h +48 -0
  41. package/dist/node/include/cppgc/internal/base-page-handle.h +45 -0
  42. package/dist/node/include/cppgc/internal/caged-heap-local-data.h +121 -0
  43. package/dist/node/include/cppgc/internal/caged-heap.h +68 -0
  44. package/dist/node/include/cppgc/internal/compiler-specific.h +38 -0
  45. package/dist/node/include/cppgc/internal/finalizer-trait.h +93 -0
  46. package/dist/node/include/cppgc/internal/gc-info.h +148 -0
  47. package/dist/node/include/cppgc/internal/logging.h +50 -0
  48. package/dist/node/include/cppgc/internal/member-storage.h +256 -0
  49. package/dist/node/include/cppgc/internal/name-trait.h +137 -0
  50. package/dist/node/include/cppgc/internal/persistent-node.h +214 -0
  51. package/dist/node/include/cppgc/internal/pointer-policies.h +243 -0
  52. package/dist/node/include/cppgc/internal/write-barrier.h +487 -0
  53. package/dist/node/include/cppgc/liveness-broker.h +78 -0
  54. package/dist/node/include/cppgc/macros.h +35 -0
  55. package/dist/node/include/cppgc/member.h +629 -0
  56. package/dist/node/include/cppgc/name-provider.h +65 -0
  57. package/dist/node/include/cppgc/object-size-trait.h +58 -0
  58. package/dist/node/include/cppgc/persistent.h +377 -0
  59. package/dist/node/include/cppgc/platform.h +163 -0
  60. package/dist/node/include/cppgc/prefinalizer.h +75 -0
  61. package/dist/node/include/cppgc/process-heap-statistics.h +36 -0
  62. package/dist/node/include/cppgc/sentinel-pointer.h +39 -0
  63. package/dist/node/include/cppgc/source-location.h +16 -0
  64. package/dist/node/include/cppgc/testing.h +106 -0
  65. package/dist/node/include/cppgc/trace-trait.h +128 -0
  66. package/dist/node/include/cppgc/type-traits.h +271 -0
  67. package/dist/node/include/cppgc/visitor.h +504 -0
  68. package/dist/node/include/crypto/crypto_aes.h +88 -0
  69. package/dist/node/include/crypto/crypto_bio.h +193 -0
  70. package/dist/node/include/crypto/crypto_cipher.h +293 -0
  71. package/dist/node/include/crypto/crypto_clienthello-inl.h +90 -0
  72. package/dist/node/include/crypto/crypto_clienthello.h +131 -0
  73. package/dist/node/include/crypto/crypto_common.h +64 -0
  74. package/dist/node/include/crypto/crypto_context.h +171 -0
  75. package/dist/node/include/crypto/crypto_dh.h +126 -0
  76. package/dist/node/include/crypto/crypto_dsa.h +52 -0
  77. package/dist/node/include/crypto/crypto_ec.h +164 -0
  78. package/dist/node/include/crypto/crypto_hash.h +91 -0
  79. package/dist/node/include/crypto/crypto_hkdf.h +61 -0
  80. package/dist/node/include/crypto/crypto_hmac.h +92 -0
  81. package/dist/node/include/crypto/crypto_keygen.h +299 -0
  82. package/dist/node/include/crypto/crypto_keys.h +392 -0
  83. package/dist/node/include/crypto/crypto_pbkdf2.h +74 -0
  84. package/dist/node/include/crypto/crypto_random.h +124 -0
  85. package/dist/node/include/crypto/crypto_rsa.h +136 -0
  86. package/dist/node/include/crypto/crypto_scrypt.h +85 -0
  87. package/dist/node/include/crypto/crypto_sig.h +165 -0
  88. package/dist/node/include/crypto/crypto_spkac.h +21 -0
  89. package/dist/node/include/crypto/crypto_timing.h +20 -0
  90. package/dist/node/include/crypto/crypto_tls.h +305 -0
  91. package/dist/node/include/crypto/crypto_util.h +725 -0
  92. package/dist/node/include/crypto/crypto_x509.h +140 -0
  93. package/dist/node/include/dataqueue/queue.h +306 -0
  94. package/dist/node/include/debug_utils-inl.h +278 -0
  95. package/dist/node/include/debug_utils.h +196 -0
  96. package/dist/node/include/diagnosticfilename-inl.h +33 -0
  97. package/dist/node/include/embedded_data.h +17 -0
  98. package/dist/node/include/encoding_binding.h +61 -0
  99. package/dist/node/include/env-inl.h +984 -0
  100. package/dist/node/include/env.h +1287 -0
  101. package/dist/node/include/env_properties.h +540 -0
  102. package/dist/node/include/handle_wrap.h +123 -0
  103. package/dist/node/include/histogram-inl.h +107 -0
  104. package/dist/node/include/histogram.h +279 -0
  105. package/dist/node/include/inspector/io_agent.h +30 -0
  106. package/dist/node/include/inspector/main_thread_interface.h +116 -0
  107. package/dist/node/include/inspector/network_agent.h +94 -0
  108. package/dist/node/include/inspector/network_inspector.h +45 -0
  109. package/dist/node/include/inspector/network_requests_buffer.h +195 -0
  110. package/dist/node/include/inspector/network_resource_manager.h +29 -0
  111. package/dist/node/include/inspector/node_json.h +24 -0
  112. package/dist/node/include/inspector/node_string.h +101 -0
  113. package/dist/node/include/inspector/protocol_helper.h +27 -0
  114. package/dist/node/include/inspector/runtime_agent.h +41 -0
  115. package/dist/node/include/inspector/target_agent.h +75 -0
  116. package/dist/node/include/inspector/tracing_agent.h +43 -0
  117. package/dist/node/include/inspector/worker_agent.h +40 -0
  118. package/dist/node/include/inspector/worker_inspector.h +124 -0
  119. package/dist/node/include/inspector_agent.h +165 -0
  120. package/dist/node/include/inspector_io.h +78 -0
  121. package/dist/node/include/inspector_profiler.h +149 -0
  122. package/dist/node/include/inspector_socket.h +60 -0
  123. package/dist/node/include/inspector_socket_server.h +110 -0
  124. package/dist/node/include/js_native_api.h +607 -0
  125. package/dist/node/include/js_native_api_types.h +226 -0
  126. package/dist/node/include/js_native_api_v8.h +485 -0
  127. package/dist/node/include/js_native_api_v8_internals.h +45 -0
  128. package/dist/node/include/js_stream.h +52 -0
  129. package/dist/node/include/json_utils.h +172 -0
  130. package/dist/node/include/large_pages/node_large_page.h +34 -0
  131. package/dist/node/include/libplatform/libplatform-export.h +29 -0
  132. package/dist/node/include/libplatform/libplatform.h +112 -0
  133. package/dist/node/include/libplatform/v8-tracing.h +333 -0
  134. package/dist/node/include/memory_tracker-inl.h +359 -0
  135. package/dist/node/include/memory_tracker.h +289 -0
  136. package/dist/node/include/module_wrap.h +216 -0
  137. package/dist/node/include/node.h +1593 -0
  138. package/dist/node/include/node_api.h +265 -0
  139. package/dist/node/include/node_api_internals.h +48 -0
  140. package/dist/node/include/node_api_types.h +56 -0
  141. package/dist/node/include/node_binding.h +161 -0
  142. package/dist/node/include/node_blob.h +159 -0
  143. package/dist/node/include/node_bob-inl.h +36 -0
  144. package/dist/node/include/node_bob.h +107 -0
  145. package/dist/node/include/node_buffer.h +92 -0
  146. package/dist/node/include/node_builtins.h +220 -0
  147. package/dist/node/include/node_config_file.h +46 -0
  148. package/dist/node/include/node_constants.h +82 -0
  149. package/dist/node/include/node_context_data.h +168 -0
  150. package/dist/node/include/node_contextify.h +204 -0
  151. package/dist/node/include/node_crypto.h +56 -0
  152. package/dist/node/include/node_debug.h +30 -0
  153. package/dist/node/include/node_dir.h +52 -0
  154. package/dist/node/include/node_dotenv.h +45 -0
  155. package/dist/node/include/node_errors.h +380 -0
  156. package/dist/node/include/node_exit_code.h +54 -0
  157. package/dist/node/include/node_external_reference.h +165 -0
  158. package/dist/node/include/node_file-inl.h +406 -0
  159. package/dist/node/include/node_file.h +537 -0
  160. package/dist/node/include/node_http2.h +1177 -0
  161. package/dist/node/include/node_http2_state.h +159 -0
  162. package/dist/node/include/node_http_common-inl.h +202 -0
  163. package/dist/node/include/node_http_common.h +535 -0
  164. package/dist/node/include/node_i18n.h +132 -0
  165. package/dist/node/include/node_internals.h +483 -0
  166. package/dist/node/include/node_main_instance.h +67 -0
  167. package/dist/node/include/node_mem-inl.h +113 -0
  168. package/dist/node/include/node_mem.h +45 -0
  169. package/dist/node/include/node_messaging.h +389 -0
  170. package/dist/node/include/node_metadata.h +164 -0
  171. package/dist/node/include/node_modules.h +91 -0
  172. package/dist/node/include/node_mutex.h +323 -0
  173. package/dist/node/include/node_object_wrap.h +132 -0
  174. package/dist/node/include/node_options-inl.h +490 -0
  175. package/dist/node/include/node_options.h +615 -0
  176. package/dist/node/include/node_perf.h +166 -0
  177. package/dist/node/include/node_perf_common.h +102 -0
  178. package/dist/node/include/node_platform.h +238 -0
  179. package/dist/node/include/node_process-inl.h +26 -0
  180. package/dist/node/include/node_process.h +112 -0
  181. package/dist/node/include/node_realm-inl.h +151 -0
  182. package/dist/node/include/node_realm.h +183 -0
  183. package/dist/node/include/node_report.h +43 -0
  184. package/dist/node/include/node_revert.h +82 -0
  185. package/dist/node/include/node_root_certs.h +3520 -0
  186. package/dist/node/include/node_sea.h +74 -0
  187. package/dist/node/include/node_shadow_realm.h +46 -0
  188. package/dist/node/include/node_snapshot_builder.h +57 -0
  189. package/dist/node/include/node_snapshotable.h +174 -0
  190. package/dist/node/include/node_sockaddr-inl.h +257 -0
  191. package/dist/node/include/node_sockaddr.h +394 -0
  192. package/dist/node/include/node_sqlite.h +270 -0
  193. package/dist/node/include/node_stat_watcher.h +73 -0
  194. package/dist/node/include/node_task_runner.h +92 -0
  195. package/dist/node/include/node_threadsafe_cow-inl.h +54 -0
  196. package/dist/node/include/node_threadsafe_cow.h +105 -0
  197. package/dist/node/include/node_union_bytes.h +81 -0
  198. package/dist/node/include/node_url.h +96 -0
  199. package/dist/node/include/node_v8.h +77 -0
  200. package/dist/node/include/node_v8_platform-inl.h +185 -0
  201. package/dist/node/include/node_version.h +110 -0
  202. package/dist/node/include/node_wasi.h +184 -0
  203. package/dist/node/include/node_wasm_web_api.h +55 -0
  204. package/dist/node/include/node_watchdog.h +154 -0
  205. package/dist/node/include/node_webstorage.h +60 -0
  206. package/dist/node/include/node_worker.h +158 -0
  207. package/dist/node/include/path.h +33 -0
  208. package/dist/node/include/permission/addon_permission.h +31 -0
  209. package/dist/node/include/permission/child_process_permission.h +31 -0
  210. package/dist/node/include/permission/fs_permission.h +167 -0
  211. package/dist/node/include/permission/inspector_permission.h +31 -0
  212. package/dist/node/include/permission/permission.h +138 -0
  213. package/dist/node/include/permission/permission_base.h +65 -0
  214. package/dist/node/include/permission/wasi_permission.h +31 -0
  215. package/dist/node/include/permission/worker_permission.h +31 -0
  216. package/dist/node/include/pipe_wrap.h +80 -0
  217. package/dist/node/include/quic/application.h +159 -0
  218. package/dist/node/include/quic/bindingdata.h +272 -0
  219. package/dist/node/include/quic/cid.h +127 -0
  220. package/dist/node/include/quic/data.h +148 -0
  221. package/dist/node/include/quic/defs.h +245 -0
  222. package/dist/node/include/quic/endpoint.h +458 -0
  223. package/dist/node/include/quic/http3.h +15 -0
  224. package/dist/node/include/quic/logstream.h +81 -0
  225. package/dist/node/include/quic/packet.h +152 -0
  226. package/dist/node/include/quic/preferredaddress.h +72 -0
  227. package/dist/node/include/quic/session.h +443 -0
  228. package/dist/node/include/quic/sessionticket.h +108 -0
  229. package/dist/node/include/quic/streams.h +232 -0
  230. package/dist/node/include/quic/tlscontext.h +227 -0
  231. package/dist/node/include/quic/tokens.h +256 -0
  232. package/dist/node/include/quic/transportparams.h +165 -0
  233. package/dist/node/include/req_wrap-inl.h +171 -0
  234. package/dist/node/include/req_wrap.h +77 -0
  235. package/dist/node/include/spawn_sync.h +243 -0
  236. package/dist/node/include/stream_base-inl.h +173 -0
  237. package/dist/node/include/stream_base.h +478 -0
  238. package/dist/node/include/stream_pipe.h +76 -0
  239. package/dist/node/include/stream_wrap.h +132 -0
  240. package/dist/node/include/string_bytes.h +113 -0
  241. package/dist/node/include/string_decoder-inl.h +31 -0
  242. package/dist/node/include/string_decoder.h +49 -0
  243. package/dist/node/include/tcp_wrap.h +105 -0
  244. package/dist/node/include/threadpoolwork-inl.h +70 -0
  245. package/dist/node/include/timer_wrap-inl.h +32 -0
  246. package/dist/node/include/timer_wrap.h +85 -0
  247. package/dist/node/include/timers.h +70 -0
  248. package/dist/node/include/tracing/agent.h +195 -0
  249. package/dist/node/include/tracing/node_trace_buffer.h +83 -0
  250. package/dist/node/include/tracing/node_trace_writer.h +75 -0
  251. package/dist/node/include/tracing/trace_event.h +722 -0
  252. package/dist/node/include/tracing/trace_event_common.h +1109 -0
  253. package/dist/node/include/tracing/traced_value.h +129 -0
  254. package/dist/node/include/tty_wrap.h +65 -0
  255. package/dist/node/include/udp_wrap.h +230 -0
  256. package/dist/node/include/undici_version.h +6 -0
  257. package/dist/node/include/util-inl.h +700 -0
  258. package/dist/node/include/util.h +1021 -0
  259. package/dist/node/include/uv/aix.h +32 -0
  260. package/dist/node/include/uv/bsd.h +34 -0
  261. package/dist/node/include/uv/darwin.h +61 -0
  262. package/dist/node/include/uv/errno.h +483 -0
  263. package/dist/node/include/uv/linux.h +34 -0
  264. package/dist/node/include/uv/os390.h +33 -0
  265. package/dist/node/include/uv/posix.h +31 -0
  266. package/dist/node/include/uv/sunos.h +44 -0
  267. package/dist/node/include/uv/threadpool.h +37 -0
  268. package/dist/node/include/uv/tree.h +521 -0
  269. package/dist/node/include/uv/unix.h +512 -0
  270. package/dist/node/include/uv/version.h +43 -0
  271. package/dist/node/include/uv/win.h +698 -0
  272. package/dist/node/include/uv.h +1990 -0
  273. package/dist/node/include/v8-array-buffer.h +525 -0
  274. package/dist/node/include/v8-callbacks.h +462 -0
  275. package/dist/node/include/v8-container.h +183 -0
  276. package/dist/node/include/v8-context.h +485 -0
  277. package/dist/node/include/v8-cppgc.h +245 -0
  278. package/dist/node/include/v8-data.h +80 -0
  279. package/dist/node/include/v8-date.h +48 -0
  280. package/dist/node/include/v8-debug.h +168 -0
  281. package/dist/node/include/v8-embedder-heap.h +82 -0
  282. package/dist/node/include/v8-embedder-state-scope.h +52 -0
  283. package/dist/node/include/v8-exception.h +223 -0
  284. package/dist/node/include/v8-extension.h +62 -0
  285. package/dist/node/include/v8-external.h +37 -0
  286. package/dist/node/include/v8-fast-api-calls.h +984 -0
  287. package/dist/node/include/v8-forward.h +82 -0
  288. package/dist/node/include/v8-function-callback.h +607 -0
  289. package/dist/node/include/v8-function.h +140 -0
  290. package/dist/node/include/v8-handle-base.h +137 -0
  291. package/dist/node/include/v8-initialization.h +289 -0
  292. package/dist/node/include/v8-inspector-protocol.h +13 -0
  293. package/dist/node/include/v8-inspector.h +419 -0
  294. package/dist/node/include/v8-internal.h +1397 -0
  295. package/dist/node/include/v8-isolate.h +1767 -0
  296. package/dist/node/include/v8-json.h +47 -0
  297. package/dist/node/include/v8-local-handle.h +758 -0
  298. package/dist/node/include/v8-locker.h +138 -0
  299. package/dist/node/include/v8-maybe.h +160 -0
  300. package/dist/node/include/v8-memory-span.h +198 -0
  301. package/dist/node/include/v8-message.h +233 -0
  302. package/dist/node/include/v8-metrics.h +264 -0
  303. package/dist/node/include/v8-microtask-queue.h +157 -0
  304. package/dist/node/include/v8-microtask.h +28 -0
  305. package/dist/node/include/v8-object.h +824 -0
  306. package/dist/node/include/v8-persistent-handle.h +582 -0
  307. package/dist/node/include/v8-platform.h +1358 -0
  308. package/dist/node/include/v8-primitive-object.h +118 -0
  309. package/dist/node/include/v8-primitive.h +877 -0
  310. package/dist/node/include/v8-profiler.h +1302 -0
  311. package/dist/node/include/v8-promise.h +174 -0
  312. package/dist/node/include/v8-proxy.h +50 -0
  313. package/dist/node/include/v8-regexp.h +106 -0
  314. package/dist/node/include/v8-script.h +904 -0
  315. package/dist/node/include/v8-snapshot.h +266 -0
  316. package/dist/node/include/v8-source-location.h +92 -0
  317. package/dist/node/include/v8-statistics.h +238 -0
  318. package/dist/node/include/v8-template.h +1297 -0
  319. package/dist/node/include/v8-traced-handle.h +432 -0
  320. package/dist/node/include/v8-typed-array.h +390 -0
  321. package/dist/node/include/v8-unwinder-state.h +31 -0
  322. package/dist/node/include/v8-unwinder.h +132 -0
  323. package/dist/node/include/v8-util.h +665 -0
  324. package/dist/node/include/v8-value-serializer-version.h +24 -0
  325. package/dist/node/include/v8-value-serializer.h +316 -0
  326. package/dist/node/include/v8-value.h +655 -0
  327. package/dist/node/include/v8-version-string.h +38 -0
  328. package/dist/node/include/v8-version.h +20 -0
  329. package/dist/node/include/v8-wasm-trap-handler-posix.h +31 -0
  330. package/dist/node/include/v8-wasm-trap-handler-win.h +28 -0
  331. package/dist/node/include/v8-wasm.h +201 -0
  332. package/dist/node/include/v8-weak-callback-info.h +80 -0
  333. package/dist/node/include/v8.h +88 -0
  334. package/dist/node/include/v8config.h +981 -0
  335. package/dist/node/include/zlib_version.h +6 -0
  336. package/dist/node/libnode.dll +0 -0
  337. package/dist/node/libnode.lib +0 -0
  338. package/dist/node/libnodebuildinfo.json +10 -0
  339. package/dist/node/link_node.lib +0 -0
  340. package/dist/node/link_node.node +0 -0
  341. package/index.js +5 -0
  342. package/libnode.release.json +8 -0
  343. package/package.json +29 -1
@@ -0,0 +1,127 @@
1
+ #pragma once
2
+
3
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
4
+ #if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
5
+ #include <memory_tracker.h>
6
+ #include <ngtcp2/ngtcp2.h>
7
+ #include <string>
8
+ #include "defs.h"
9
+
10
+ namespace node::quic {
11
+
12
+ // CIDS are used to identify endpoints participating in a QUIC session.
13
+ // Once created, CID instances are immutable.
14
+ //
15
+ // CIDs contain between 1 to 20 bytes. Most typically they are selected
16
+ // randomly but there is a spec for creating "routable" CIDs that encode
17
+ // a specific structure that is meaningful only to the side that creates
18
+ // the CID. For most purposes, CIDs should be treated as opaque tokens.
19
+ //
20
+ // Each peer in a QUIC session generates one or more CIDs that the *other*
21
+ // peer will use to identify the session. When a QUIC client initiates a
22
+ // brand new session, it will initially generates a CID of its own (its
23
+ // source CID) and a random placeholder CID for the server (the original
24
+ // destination CID). When the server receives the initial packet, it will
25
+ // generate its own source CID and use the clients source CID as the
26
+ // server's destination CID.
27
+ //
28
+ // Client Server
29
+ // -------------------------------------------
30
+ // Source CID <====> Destination CID
31
+ // Destination CID <====> Source CID
32
+ //
33
+ // While the connection is being established, it is possible for either
34
+ // peer to generate additional CIDs that are also associated with the
35
+ // connection.
36
+ class CID final : public MemoryRetainer {
37
+ public:
38
+ static constexpr size_t kMinLength = NGTCP2_MIN_CIDLEN;
39
+ static constexpr size_t kMaxLength = NGTCP2_MAX_CIDLEN;
40
+
41
+ // Copy the given ngtcp2_cid.
42
+ explicit CID(const ngtcp2_cid& cid);
43
+
44
+ // Copy the given buffer as a CID. The len must be within
45
+ // kMinLength and kMaxLength.
46
+ explicit CID(const uint8_t* data, size_t len);
47
+
48
+ // Wrap the given ngtcp2_cid. The CID does not take ownership
49
+ // of the underlying ngtcp2_cid.
50
+ explicit CID(const ngtcp2_cid* cid);
51
+
52
+ CID(const CID& other);
53
+ CID& operator=(const CID& other);
54
+ CID(CID&&) = delete;
55
+
56
+ struct Hash final {
57
+ size_t operator()(const CID& cid) const;
58
+ };
59
+
60
+ bool operator==(const CID& other) const noexcept;
61
+ bool operator!=(const CID& other) const noexcept;
62
+
63
+ operator const uint8_t*() const;
64
+ operator const ngtcp2_cid&() const;
65
+ operator const ngtcp2_cid*() const;
66
+
67
+ // True if the CID length is at least kMinLength;
68
+ operator bool() const;
69
+ size_t length() const;
70
+
71
+ std::string ToString() const;
72
+
73
+ SET_NO_MEMORY_INFO()
74
+ SET_MEMORY_INFO_NAME(CID)
75
+ SET_SELF_SIZE(CID)
76
+
77
+ template <typename T>
78
+ using Map = std::unordered_map<CID, T, CID::Hash>;
79
+
80
+ // A CID::Factory, as the name suggests, is used to create new CIDs.
81
+ // Per https://datatracker.ietf.org/doc/draft-ietf-quic-load-balancers/, QUIC
82
+ // implementations MAY use the Connection ID associated with a QUIC session
83
+ // as a routing mechanism, with each CID instance securely encoding the
84
+ // routing information. By default, our implementation creates CIDs randomly
85
+ // but will allow user code to provide their own CID::Factory implementation.
86
+ class Factory;
87
+
88
+ static CID kInvalid;
89
+
90
+ // The default constructor creates an empty, zero-length CID.
91
+ // Zero-length CIDs are not usable. We use them as a placeholder
92
+ // for a missing or empty CID value. This is public only because
93
+ // it is required for the CID::Map implementation. It should not
94
+ // be used. Use kInvalid instead.
95
+ CID();
96
+
97
+ private:
98
+ ngtcp2_cid cid_;
99
+ const ngtcp2_cid* ptr_;
100
+
101
+ friend struct Hash;
102
+ };
103
+
104
+ class CID::Factory {
105
+ public:
106
+ virtual ~Factory() = default;
107
+
108
+ // Generate a new CID. The length_hint must be between CID::kMinLength
109
+ // and CID::kMaxLength. The implementation can choose to ignore the length.
110
+ virtual CID Generate(size_t length_hint = CID::kMaxLength) const = 0;
111
+
112
+ // Generate a new CID into the given ngtcp2_cid. This variation of
113
+ // Generate should be used far less commonly.
114
+ virtual CID GenerateInto(ngtcp2_cid* cid,
115
+ size_t length_hint = CID::kMaxLength) const = 0;
116
+
117
+ // The default random CID generator instance.
118
+ static const Factory& random();
119
+
120
+ // TODO(@jasnell): This will soon also include additional implementations
121
+ // of CID::Factory that implement the QUIC Load Balancers spec.
122
+ };
123
+
124
+ } // namespace node::quic
125
+
126
+ #endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
127
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
@@ -0,0 +1,148 @@
1
+ #pragma once
2
+
3
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
4
+ #if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
5
+
6
+ #include <env.h>
7
+ #include <memory_tracker.h>
8
+ #include <nghttp3/nghttp3.h>
9
+ #include <ngtcp2/ngtcp2.h>
10
+ #include <node_internals.h>
11
+ #include <node_sockaddr.h>
12
+ #include <v8.h>
13
+ #include <string>
14
+ #include "defs.h"
15
+
16
+ namespace node::quic {
17
+
18
+ struct Path final : public ngtcp2_path {
19
+ Path(const SocketAddress& local, const SocketAddress& remote);
20
+ inline operator ngtcp2_path*() { return this; }
21
+ std::string ToString() const;
22
+ };
23
+
24
+ struct PathStorage final : public ngtcp2_path_storage {
25
+ PathStorage();
26
+ operator ngtcp2_path();
27
+
28
+ void Reset();
29
+ void CopyTo(PathStorage* path) const;
30
+
31
+ bool operator==(const PathStorage& other) const;
32
+ bool operator!=(const PathStorage& other) const;
33
+ };
34
+
35
+ class Store final : public MemoryRetainer {
36
+ public:
37
+ Store() = default;
38
+
39
+ Store(std::shared_ptr<v8::BackingStore> store,
40
+ size_t length,
41
+ size_t offset = 0);
42
+ Store(std::unique_ptr<v8::BackingStore> store,
43
+ size_t length,
44
+ size_t offset = 0);
45
+
46
+ enum class Option {
47
+ NONE,
48
+ DETACH,
49
+ };
50
+
51
+ Store(v8::Local<v8::ArrayBuffer> buffer, Option option = Option::NONE);
52
+ Store(v8::Local<v8::ArrayBufferView> view, Option option = Option::NONE);
53
+
54
+ v8::Local<v8::Uint8Array> ToUint8Array(Environment* env) const;
55
+
56
+ operator uv_buf_t() const;
57
+ operator ngtcp2_vec() const;
58
+ operator nghttp3_vec() const;
59
+ operator bool() const;
60
+ size_t length() const;
61
+
62
+ void MemoryInfo(MemoryTracker* tracker) const override;
63
+ SET_MEMORY_INFO_NAME(Store)
64
+ SET_SELF_SIZE(Store)
65
+
66
+ private:
67
+ template <typename T, typename t>
68
+ T convert() const;
69
+ std::shared_ptr<v8::BackingStore> store_;
70
+ size_t length_ = 0;
71
+ size_t offset_ = 0;
72
+ };
73
+
74
+ class QuicError final : public MemoryRetainer {
75
+ public:
76
+ static constexpr error_code QUIC_NO_ERROR = NGTCP2_NO_ERROR;
77
+ static constexpr error_code QUIC_APP_NO_ERROR = 65280;
78
+
79
+ enum class Type {
80
+ TRANSPORT = NGTCP2_CCERR_TYPE_TRANSPORT,
81
+ APPLICATION = NGTCP2_CCERR_TYPE_APPLICATION,
82
+ VERSION_NEGOTIATION = NGTCP2_CCERR_TYPE_VERSION_NEGOTIATION,
83
+ IDLE_CLOSE = NGTCP2_CCERR_TYPE_IDLE_CLOSE,
84
+ };
85
+
86
+ explicit QuicError(const std::string& reason = "");
87
+ explicit QuicError(const ngtcp2_ccerr* ptr);
88
+ explicit QuicError(const ngtcp2_ccerr& error);
89
+
90
+ Type type() const;
91
+ error_code code() const;
92
+ const std::string_view reason() const;
93
+ uint64_t frame_type() const;
94
+
95
+ operator const ngtcp2_ccerr&() const;
96
+ operator const ngtcp2_ccerr*() const;
97
+
98
+ // Returns false if the QuicError uses a no_error code with type
99
+ // transport or application.
100
+ operator bool() const;
101
+
102
+ bool is_crypto() const;
103
+ std::optional<int> crypto_error() const;
104
+
105
+ bool operator==(const QuicError& other) const;
106
+ bool operator!=(const QuicError& other) const;
107
+
108
+ void MemoryInfo(MemoryTracker* tracker) const override;
109
+ SET_MEMORY_INFO_NAME(QuicError)
110
+ SET_SELF_SIZE(QuicError)
111
+
112
+ std::string ToString() const;
113
+ v8::MaybeLocal<v8::Value> ToV8Value(Environment* env) const;
114
+
115
+ static std::string reason_for_liberr(int liberr);
116
+ static std::string reason_for_h3_liberr(int liberr);
117
+ static bool is_fatal_liberror(int liberr);
118
+ static bool is_fatal_h3_liberror(int liberr);
119
+ static error_code liberr_to_code(int liberr);
120
+ static error_code h3_liberr_to_code(int liberr);
121
+
122
+ static QuicError ForTransport(error_code code, std::string reason = "");
123
+ static QuicError ForApplication(error_code code, std::string reason = "");
124
+ static QuicError ForVersionNegotiation(std::string reason = "");
125
+ static QuicError ForIdleClose(std::string reason = "");
126
+ static QuicError ForNgtcp2Error(int code, std::string reason = "");
127
+ static QuicError ForTlsAlert(int code, std::string reason = "");
128
+
129
+ static QuicError FromConnectionClose(ngtcp2_conn* session);
130
+
131
+ static QuicError TRANSPORT_NO_ERROR;
132
+ static QuicError APPLICATION_NO_ERROR;
133
+ static QuicError VERSION_NEGOTIATION;
134
+ static QuicError IDLE_CLOSE;
135
+ static QuicError INTERNAL_ERROR;
136
+
137
+ private:
138
+ const uint8_t* reason_c_str() const;
139
+
140
+ std::string reason_;
141
+ ngtcp2_ccerr error_;
142
+ const ngtcp2_ccerr* ptr_ = nullptr;
143
+ };
144
+
145
+ } // namespace node::quic
146
+
147
+ #endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
148
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
@@ -0,0 +1,245 @@
1
+ #pragma once
2
+
3
+ #include <aliased_struct.h>
4
+ #include <env.h>
5
+ #include <nghttp3/nghttp3.h>
6
+ #include <ngtcp2/ngtcp2.h>
7
+ #include <node_errors.h>
8
+ #include <uv.h>
9
+ #include <v8.h>
10
+ #include <limits>
11
+
12
+ namespace node::quic {
13
+
14
+ #define NGTCP2_SUCCESS 0
15
+ #define NGTCP2_ERR(V) (V != NGTCP2_SUCCESS)
16
+ #define NGTCP2_OK(V) (V == NGTCP2_SUCCESS)
17
+
18
+ #define IF_QUIC_DEBUG(env) \
19
+ if (env->enabled_debug_list()->enabled(DebugCategory::QUIC)) [[unlikely]]
20
+
21
+ #define DISALLOW_COPY(Name) \
22
+ Name(const Name&) = delete; \
23
+ Name& operator=(const Name&) = delete;
24
+
25
+ #define DISALLOW_MOVE(Name) \
26
+ Name(Name&&) = delete; \
27
+ Name& operator=(Name&&) = delete;
28
+
29
+ #define DISALLOW_COPY_AND_MOVE(Name) \
30
+ DISALLOW_COPY(Name) \
31
+ DISALLOW_MOVE(Name)
32
+
33
+ template <typename Opt, std::string Opt::*member>
34
+ bool SetOption(Environment* env,
35
+ Opt* options,
36
+ const v8::Local<v8::Object>& object,
37
+ const v8::Local<v8::String>& name) {
38
+ v8::Local<v8::Value> value;
39
+ if (!object->Get(env->context(), name).ToLocal(&value)) return false;
40
+ if (!value->IsUndefined()) {
41
+ Utf8Value utf8(env->isolate(), value);
42
+ options->*member = utf8.ToString();
43
+ }
44
+ return true;
45
+ }
46
+
47
+ template <typename Opt, bool Opt::*member>
48
+ bool SetOption(Environment* env,
49
+ Opt* options,
50
+ const v8::Local<v8::Object>& object,
51
+ const v8::Local<v8::String>& name) {
52
+ v8::Local<v8::Value> value;
53
+ if (!object->Get(env->context(), name).ToLocal(&value)) return false;
54
+ if (!value->IsUndefined()) {
55
+ options->*member = value->BooleanValue(env->isolate());
56
+ }
57
+ return true;
58
+ }
59
+
60
+ template <typename Opt, uint32_t Opt::*member>
61
+ bool SetOption(Environment* env,
62
+ Opt* options,
63
+ const v8::Local<v8::Object>& object,
64
+ const v8::Local<v8::String>& name) {
65
+ v8::Local<v8::Value> value;
66
+ if (!object->Get(env->context(), name).ToLocal(&value)) return false;
67
+ if (!value->IsUndefined()) {
68
+ if (!value->IsUint32()) {
69
+ Utf8Value nameStr(env->isolate(), name);
70
+ THROW_ERR_INVALID_ARG_VALUE(
71
+ env, "The %s option must be an uint32", *nameStr);
72
+ return false;
73
+ }
74
+ v8::Local<v8::Uint32> num;
75
+ if (!value->ToUint32(env->context()).ToLocal(&num)) {
76
+ Utf8Value nameStr(env->isolate(), name);
77
+ THROW_ERR_INVALID_ARG_VALUE(
78
+ env, "The %s option must be an uint32", *nameStr);
79
+ return false;
80
+ }
81
+ options->*member = num->Value();
82
+ }
83
+ return true;
84
+ }
85
+
86
+ template <typename Opt, uint64_t Opt::*member>
87
+ bool SetOption(Environment* env,
88
+ Opt* options,
89
+ const v8::Local<v8::Object>& object,
90
+ const v8::Local<v8::String>& name) {
91
+ v8::Local<v8::Value> value;
92
+ if (!object->Get(env->context(), name).ToLocal(&value)) return false;
93
+
94
+ if (!value->IsUndefined()) {
95
+ if (!value->IsBigInt() && !value->IsNumber()) {
96
+ Utf8Value nameStr(env->isolate(), name);
97
+ THROW_ERR_INVALID_ARG_VALUE(
98
+ env, "option %s must be a bigint or number", *nameStr);
99
+ return false;
100
+ }
101
+ DCHECK_IMPLIES(!value->IsBigInt(), value->IsNumber());
102
+
103
+ uint64_t val = 0;
104
+ if (value->IsBigInt()) {
105
+ bool lossless = true;
106
+ val = value.As<v8::BigInt>()->Uint64Value(&lossless);
107
+ if (!lossless) {
108
+ Utf8Value label(env->isolate(), name);
109
+ THROW_ERR_INVALID_ARG_VALUE(env, "option %s is out of range", *label);
110
+ return false;
111
+ }
112
+ } else {
113
+ double dbl = value.As<v8::Number>()->Value();
114
+ if (dbl < 0) {
115
+ Utf8Value label(env->isolate(), name);
116
+ THROW_ERR_INVALID_ARG_VALUE(env, "option %s is out of range", *label);
117
+ return false;
118
+ }
119
+ val = static_cast<uint64_t>(dbl);
120
+ }
121
+ options->*member = val;
122
+ }
123
+ return true;
124
+ }
125
+
126
+ // Utilities used to update the stats for Endpoint, Session, and Stream
127
+ // objects. The stats themselves are maintained in an AliasedStruct within
128
+ // each of the relevant classes.
129
+
130
+ template <typename Stats, uint64_t Stats::*member>
131
+ void IncrementStat(Stats* stats, uint64_t amt = 1) {
132
+ stats->*member += amt;
133
+ }
134
+
135
+ template <typename Stats, uint64_t Stats::*member>
136
+ void RecordTimestampStat(Stats* stats) {
137
+ stats->*member = uv_hrtime();
138
+ }
139
+
140
+ template <typename Stats, uint64_t Stats::*member>
141
+ void SetStat(Stats* stats, uint64_t val) {
142
+ stats->*member = val;
143
+ }
144
+
145
+ template <typename Stats, uint64_t Stats::*member>
146
+ uint64_t GetStat(Stats* stats) {
147
+ return stats->*member;
148
+ }
149
+
150
+ #define STAT_INCREMENT(Type, name) \
151
+ IncrementStat<Type, &Type::name>(stats_.Data());
152
+ #define STAT_INCREMENT_N(Type, name, amt) \
153
+ IncrementStat<Type, &Type::name>(stats_.Data(), amt);
154
+ #define STAT_RECORD_TIMESTAMP(Type, name) \
155
+ RecordTimestampStat<Type, &Type::name>(stats_.Data());
156
+ #define STAT_SET(Type, name, val) SetStat<Type, &Type::name>(stats_.Data(), val)
157
+ #define STAT_GET(Type, name) GetStat<Type, &Type::name>(stats_.Data())
158
+ #define STAT_FIELD(_, name) uint64_t name;
159
+ #define STAT_STRUCT(klass, name) \
160
+ struct klass::Stats final { \
161
+ name##_STATS(STAT_FIELD) \
162
+ };
163
+
164
+ #define JS_METHOD(name) \
165
+ static void name(const v8::FunctionCallbackInfo<v8::Value>& args)
166
+
167
+ enum class Side : uint8_t {
168
+ CLIENT,
169
+ SERVER,
170
+ };
171
+
172
+ enum class EndpointLabel : uint8_t {
173
+ LOCAL,
174
+ REMOTE,
175
+ };
176
+
177
+ enum class Direction : uint8_t {
178
+ BIDIRECTIONAL,
179
+ UNIDIRECTIONAL,
180
+ };
181
+
182
+ enum class HeadersKind : uint8_t {
183
+ HINTS,
184
+ INITIAL,
185
+ TRAILING,
186
+ };
187
+
188
+ enum class HeadersFlags : uint8_t {
189
+ NONE,
190
+ TERMINAL,
191
+ };
192
+
193
+ enum class StreamPriority : uint8_t {
194
+ DEFAULT = NGHTTP3_DEFAULT_URGENCY,
195
+ LOW = NGHTTP3_URGENCY_LOW,
196
+ HIGH = NGHTTP3_URGENCY_HIGH,
197
+ };
198
+
199
+ enum class StreamPriorityFlags : uint8_t {
200
+ NONE,
201
+ NON_INCREMENTAL,
202
+ };
203
+
204
+ enum class PathValidationResult : uint8_t {
205
+ SUCCESS = NGTCP2_PATH_VALIDATION_RESULT_SUCCESS,
206
+ FAILURE = NGTCP2_PATH_VALIDATION_RESULT_FAILURE,
207
+ ABORTED = NGTCP2_PATH_VALIDATION_RESULT_ABORTED,
208
+ };
209
+
210
+ enum class DatagramStatus : uint8_t {
211
+ ACKNOWLEDGED,
212
+ LOST,
213
+ };
214
+
215
+ constexpr uint64_t NGTCP2_APP_NOERROR = 65280;
216
+ constexpr size_t kDefaultMaxPacketLength = NGTCP2_MAX_UDP_PAYLOAD_SIZE;
217
+ constexpr size_t kMaxSizeT = std::numeric_limits<size_t>::max();
218
+ constexpr uint64_t kMaxSafeJsInteger = 9007199254740991;
219
+ constexpr auto kSocketAddressInfoTimeout = 60 * NGTCP2_SECONDS;
220
+ constexpr size_t kMaxVectorCount = 16;
221
+
222
+ using error_code = uint64_t;
223
+
224
+ class DebugIndentScope {
225
+ public:
226
+ inline DebugIndentScope() { ++indent_; }
227
+ DISALLOW_COPY_AND_MOVE(DebugIndentScope)
228
+ inline ~DebugIndentScope() { --indent_; }
229
+ inline std::string Prefix() const {
230
+ std::string res("\n");
231
+ res.append(indent_, '\t');
232
+ return res;
233
+ }
234
+ inline std::string Close() const {
235
+ std::string res("\n");
236
+ res.append(indent_ - 1, '\t');
237
+ res += "}";
238
+ return res;
239
+ }
240
+
241
+ private:
242
+ static int indent_;
243
+ };
244
+
245
+ } // namespace node::quic