@encharm/cws 4.4.1 → 4.5.2
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.
- package/binding.gyp +1 -1
- package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
- package/dist/bindings/cws_linux_arm64_node115.node +0 -0
- package/dist/bindings/cws_linux_arm64_node127.node +0 -0
- package/dist/bindings/cws_linux_x64_node115.node +0 -0
- package/dist/bindings/cws_linux_x64_node127.node +0 -0
- package/dist/bindings/cws_linux_x64_node137.node +0 -0
- package/dist/bindings/cws_win32_x64_node108.node +0 -0
- package/dist/bindings/cws_win32_x64_node115.node +0 -0
- package/dist/bindings/cws_win32_x64_node127.node +0 -0
- package/dist/bindings/cws_win32_x64_node83.node +0 -0
- package/dist/bindings/cws_win32_x64_node93.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +13 -23
- package/src/Socket.h +0 -1
- package/src/headers/22/acorn_version.h +6 -0
- package/src/headers/22/aliased_buffer-inl.h +243 -0
- package/src/headers/22/aliased_buffer.h +206 -0
- package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
- package/src/headers/{18 → 22}/async_wrap.h +65 -59
- package/src/headers/{18 → 22}/base_object-inl.h +57 -117
- package/src/headers/{18 → 22}/base_object.h +58 -30
- package/src/headers/22/base_object_types.h +74 -0
- package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
- package/src/headers/22/blob_serializer_deserializer.h +132 -0
- package/src/headers/{16 → 22}/callback_queue.h +1 -0
- package/src/headers/{16 → 22}/cares_wrap.h +27 -20
- package/src/headers/22/cjs_module_lexer_version.h +6 -0
- package/src/headers/22/cleanup_queue-inl.h +62 -0
- package/src/headers/22/cleanup_queue.h +85 -0
- package/src/headers/22/compile_cache.h +104 -0
- package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
- package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
- package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
- package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
- package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
- package/src/headers/22/crypto/ncrypto.h +752 -0
- package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
- package/src/headers/{18 → 22}/debug_utils.h +25 -19
- package/src/headers/22/encoding_binding.h +59 -0
- package/src/headers/{14 → 22}/env-inl.h +276 -409
- package/src/headers/22/env.h +1266 -0
- package/src/headers/22/env_properties.h +497 -0
- package/src/headers/{18 → 22}/handle_wrap.h +2 -0
- package/src/headers/{18 → 22}/histogram.h +88 -48
- package/src/headers/{16 → 22}/inspector_agent.h +17 -1
- package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
- package/src/headers/22/js_native_api.h +619 -0
- package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
- package/src/headers/22/js_native_api_v8.h +485 -0
- package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
- package/src/headers/22/json_parser.h +40 -0
- package/src/headers/{16 → 22}/json_utils.h +19 -8
- package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
- package/src/headers/{14 → 22}/memory_tracker.h +13 -8
- package/src/headers/{16 → 22}/module_wrap.h +49 -19
- package/src/headers/22/ncrypto/ncrypto.h +752 -0
- package/src/headers/{18 → 22}/node.h +465 -68
- package/src/headers/{18 → 22}/node_api.h +66 -81
- package/src/headers/{18 → 22}/node_api_internals.h +8 -4
- package/src/headers/{18 → 22}/node_api_types.h +5 -0
- package/src/headers/22/node_binding.h +154 -0
- package/src/headers/{18 → 22}/node_blob.h +46 -78
- package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
- package/src/headers/{18 → 22}/node_bob.h +2 -6
- package/src/headers/{18 → 22}/node_buffer.h +1 -1
- package/src/headers/22/node_builtins.h +220 -0
- package/src/headers/{18 → 22}/node_constants.h +3 -5
- package/src/headers/22/node_context_data.h +168 -0
- package/src/headers/22/node_contextify.h +199 -0
- package/src/headers/{16 → 22}/node_crypto.h +1 -2
- package/src/headers/22/node_dotenv.h +45 -0
- package/src/headers/{18 → 22}/node_errors.h +86 -27
- package/src/headers/22/node_exit_code.h +54 -0
- package/src/headers/22/node_external_reference.h +249 -0
- package/src/headers/{18 → 22}/node_file-inl.h +127 -30
- package/src/headers/{16 → 22}/node_file.h +122 -11
- package/src/headers/{18 → 22}/node_http2.h +28 -11
- package/src/headers/{16 → 22}/node_http2_state.h +34 -25
- package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
- package/src/headers/{18 → 22}/node_http_common.h +56 -55
- package/src/headers/{16 → 22}/node_i18n.h +5 -18
- package/src/headers/{18 → 22}/node_internals.h +121 -59
- package/src/headers/{18 → 22}/node_main_instance.h +4 -31
- package/src/headers/{18 → 22}/node_messaging.h +27 -10
- package/src/headers/{18 → 22}/node_metadata.h +23 -1
- package/src/headers/{18 → 22}/node_options-inl.h +24 -11
- package/src/headers/{18 → 22}/node_options.h +124 -39
- package/src/headers/{18 → 22}/node_perf.h +0 -2
- package/src/headers/{18 → 22}/node_perf_common.h +20 -9
- package/src/headers/{18 → 22}/node_platform.h +11 -5
- package/src/headers/{18 → 22}/node_process.h +26 -14
- package/src/headers/22/node_realm-inl.h +145 -0
- package/src/headers/22/node_realm.h +184 -0
- package/src/headers/{16 → 22}/node_report.h +13 -17
- package/src/headers/{16 → 22}/node_revert.h +3 -3
- package/src/headers/{16 → 22}/node_root_certs.h +902 -461
- package/src/headers/22/node_sea.h +64 -0
- package/src/headers/22/node_shadow_realm.h +46 -0
- package/src/headers/22/node_snapshot_builder.h +57 -0
- package/src/headers/22/node_snapshotable.h +174 -0
- package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
- package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
- package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
- package/src/headers/22/node_threadsafe_cow.h +105 -0
- package/src/headers/22/node_union_bytes.h +81 -0
- package/src/headers/22/node_url.h +96 -0
- package/src/headers/22/node_v8.h +77 -0
- package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
- package/src/headers/{16 → 22}/node_version.h +21 -9
- package/src/headers/22/node_wasi.h +185 -0
- package/src/headers/{14 → 22}/node_watchdog.h +2 -0
- package/src/headers/{18 → 22}/node_worker.h +7 -2
- package/src/headers/22/permission/child_process_permission.h +31 -0
- package/src/headers/22/permission/fs_permission.h +167 -0
- package/src/headers/22/permission/inspector_permission.h +31 -0
- package/src/headers/22/permission/permission.h +99 -0
- package/src/headers/22/permission/permission_base.h +60 -0
- package/src/headers/22/permission/wasi_permission.h +31 -0
- package/src/headers/22/permission/worker_permission.h +31 -0
- package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
- package/src/headers/{14 → 22}/spawn_sync.h +3 -3
- package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
- package/src/headers/{18 → 22}/stream_base.h +35 -16
- package/src/headers/{18 → 22}/stream_pipe.h +3 -4
- package/src/headers/{16 → 22}/stream_wrap.h +2 -1
- package/src/headers/{18 → 22}/string_bytes.h +5 -14
- package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
- package/src/headers/{16 → 22}/string_decoder.h +0 -1
- package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
- package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
- package/src/headers/22/timers.h +76 -0
- package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
- package/src/headers/{16 → 22}/udp_wrap.h +8 -5
- package/src/headers/22/undici_version.h +6 -0
- package/src/headers/{18 → 22}/util-inl.h +97 -127
- package/src/headers/{18 → 22}/util.h +293 -106
- package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
- package/src/headers/24/acorn_version.h +6 -0
- package/src/headers/24/addon_permission.h +31 -0
- package/src/headers/{16/tracing → 24}/agent.h +1 -1
- package/src/headers/24/aliased_buffer-inl.h +244 -0
- package/src/headers/24/aliased_buffer.h +206 -0
- package/src/headers/24/amaro_version.h +6 -0
- package/src/headers/24/application.h +165 -0
- package/src/headers/24/async_context_frame.h +33 -0
- package/src/headers/{14 → 24}/async_wrap-inl.h +8 -6
- package/src/headers/{16 → 24}/async_wrap.h +86 -88
- package/src/headers/{16 → 24}/base_object-inl.h +75 -119
- package/src/headers/{16 → 24}/base_object.h +84 -40
- package/src/headers/24/base_object_types.h +74 -0
- package/src/headers/24/bindingdata.h +272 -0
- package/src/headers/24/blob_serializer_deserializer-inl.h +385 -0
- package/src/headers/24/blob_serializer_deserializer.h +132 -0
- package/src/headers/{18 → 24}/callback_queue.h +1 -0
- package/src/headers/{18 → 24}/cares_wrap.h +68 -144
- package/src/headers/24/child_process_permission.h +31 -0
- package/src/headers/24/cid.h +127 -0
- package/src/headers/24/cjs_module_lexer_version.h +6 -0
- package/src/headers/24/cleanup_queue-inl.h +36 -0
- package/src/headers/24/cleanup_queue.h +79 -0
- package/src/headers/24/compile_cache.h +113 -0
- package/src/headers/24/cppgc_helpers-inl.h +65 -0
- package/src/headers/24/cppgc_helpers.h +162 -0
- package/src/headers/24/crypto/crypto_aes.h +97 -0
- package/src/headers/24/crypto/crypto_argon2.h +86 -0
- package/src/headers/{16 → 24}/crypto/crypto_bio.h +8 -9
- package/src/headers/24/crypto/crypto_chacha20_poly1305.h +64 -0
- package/src/headers/{18 → 24}/crypto/crypto_cipher.h +48 -58
- package/src/headers/{16 → 24}/crypto/crypto_clienthello-inl.h +2 -2
- package/src/headers/{16 → 24}/crypto/crypto_clienthello.h +1 -1
- package/src/headers/24/crypto/crypto_common.h +48 -0
- package/src/headers/{16 → 24}/crypto/crypto_context.h +46 -22
- package/src/headers/{18 → 24}/crypto/crypto_dh.h +27 -57
- package/src/headers/{18 → 24}/crypto/crypto_dsa.h +7 -34
- package/src/headers/{18 → 24}/crypto/crypto_ec.h +42 -49
- package/src/headers/{18 → 24}/crypto/crypto_hash.h +11 -11
- package/src/headers/{18 → 24}/crypto/crypto_hkdf.h +10 -14
- package/src/headers/{18 → 24}/crypto/crypto_hmac.h +11 -13
- package/src/headers/24/crypto/crypto_kem.h +113 -0
- package/src/headers/{18 → 24}/crypto/crypto_keygen.h +59 -74
- package/src/headers/{16 → 24}/crypto/crypto_keys.h +134 -154
- package/src/headers/24/crypto/crypto_ml_dsa.h +21 -0
- package/src/headers/{18 → 24}/crypto/crypto_pbkdf2.h +9 -11
- package/src/headers/{18 → 24}/crypto/crypto_random.h +28 -34
- package/src/headers/{18 → 24}/crypto/crypto_rsa.h +30 -35
- package/src/headers/{18 → 24}/crypto/crypto_scrypt.h +8 -10
- package/src/headers/{18 → 24}/crypto/crypto_sig.h +36 -48
- package/src/headers/{16 → 24}/crypto/crypto_tls.h +35 -18
- package/src/headers/{16 → 24}/crypto/crypto_util.h +183 -321
- package/src/headers/24/crypto/crypto_x509.h +140 -0
- package/src/headers/24/data.h +148 -0
- package/src/headers/{14 → 24}/debug_utils-inl.h +17 -8
- package/src/headers/{16 → 24}/debug_utils.h +31 -22
- package/src/headers/24/defs.h +254 -0
- package/src/headers/24/embedded_data.h +17 -0
- package/src/headers/24/encoding_binding.h +60 -0
- package/src/headers/24/endpoint.h +421 -0
- package/src/headers/{16 → 24}/env-inl.h +198 -540
- package/src/headers/24/env.h +1257 -0
- package/src/headers/24/env_properties.h +561 -0
- package/src/headers/24/fs_permission.h +167 -0
- package/src/headers/{16 → 24}/handle_wrap.h +4 -2
- package/src/headers/{16 → 24}/histogram-inl.h +34 -15
- package/src/headers/24/histogram.h +279 -0
- package/src/headers/24/http3.h +44 -0
- package/src/headers/{18 → 24}/inspector_agent.h +23 -2
- package/src/headers/24/inspector_permission.h +31 -0
- package/src/headers/{18 → 24}/inspector_profiler.h +15 -15
- package/src/headers/24/io_agent.h +30 -0
- package/src/headers/{18 → 24}/js_native_api.h +74 -30
- package/src/headers/{16 → 24}/js_native_api_types.h +61 -10
- package/src/headers/{18 → 24}/js_native_api_v8.h +205 -160
- package/src/headers/{16 → 24}/js_native_api_v8_internals.h +12 -6
- package/src/headers/24/json_parser.h +40 -0
- package/src/headers/{18 → 24}/json_utils.h +19 -8
- package/src/headers/24/logstream.h +81 -0
- package/src/headers/24/main_thread_interface.h +116 -0
- package/src/headers/{16 → 24}/memory_tracker-inl.h +115 -17
- package/src/headers/{16 → 24}/memory_tracker.h +58 -9
- package/src/headers/24/module_wrap.h +229 -0
- package/src/headers/24/ncrypto.h +1625 -0
- package/src/headers/24/network_agent.h +118 -0
- package/src/headers/24/network_inspector.h +45 -0
- package/src/headers/24/network_resource_manager.h +29 -0
- package/src/headers/{16 → 24}/node.h +560 -72
- package/src/headers/24/node_api.h +269 -0
- package/src/headers/24/node_api_internals.h +46 -0
- package/src/headers/{16 → 24}/node_api_types.h +13 -11
- package/src/headers/24/node_binding.h +163 -0
- package/src/headers/{16 → 24}/node_blob.h +46 -78
- package/src/headers/{16 → 24}/node_bob-inl.h +1 -2
- package/src/headers/{16 → 24}/node_bob.h +2 -6
- package/src/headers/{14 → 24}/node_buffer.h +1 -1
- package/src/headers/24/node_builtins.h +223 -0
- package/src/headers/24/node_config_file.h +65 -0
- package/src/headers/{14 → 24}/node_constants.h +3 -5
- package/src/headers/24/node_context_data.h +168 -0
- package/src/headers/24/node_contextify.h +261 -0
- package/src/headers/{18 → 24}/node_crypto.h +7 -2
- package/src/headers/24/node_debug.h +25 -0
- package/src/headers/24/node_dotenv.h +45 -0
- package/src/headers/{16 → 24}/node_errors.h +146 -32
- package/src/headers/24/node_exit_code.h +54 -0
- package/src/headers/{18 → 24}/node_external_reference.h +44 -22
- package/src/headers/{16 → 24}/node_file-inl.h +156 -50
- package/src/headers/{18 → 24}/node_file.h +129 -15
- package/src/headers/{16 → 24}/node_http2.h +53 -18
- package/src/headers/{14 → 24}/node_http2_state.h +35 -25
- package/src/headers/{16 → 24}/node_http_common-inl.h +8 -10
- package/src/headers/{16 → 24}/node_http_common.h +63 -59
- package/src/headers/{18 → 24}/node_i18n.h +5 -18
- package/src/headers/{16 → 24}/node_internals.h +131 -76
- package/src/headers/24/node_json.h +24 -0
- package/src/headers/24/node_large_page.h +34 -0
- package/src/headers/24/node_locks.h +180 -0
- package/src/headers/{14 → 24}/node_main_instance.h +15 -44
- package/src/headers/{16 → 24}/node_mem-inl.h +7 -7
- package/src/headers/{16 → 24}/node_messaging.h +27 -11
- package/src/headers/{16 → 24}/node_metadata.h +44 -2
- package/src/headers/24/node_modules.h +93 -0
- package/src/headers/{16 → 24}/node_options-inl.h +93 -46
- package/src/headers/{16 → 24}/node_options.h +251 -63
- package/src/headers/{16 → 24}/node_perf.h +6 -25
- package/src/headers/{16 → 24}/node_perf_common.h +23 -10
- package/src/headers/24/node_platform.h +286 -0
- package/src/headers/24/node_process.h +111 -0
- package/src/headers/24/node_realm-inl.h +153 -0
- package/src/headers/24/node_realm.h +236 -0
- package/src/headers/{18 → 24}/node_report.h +13 -17
- package/src/headers/{18 → 24}/node_revert.h +3 -3
- package/src/headers/{18 → 24}/node_root_certs.h +1010 -710
- package/src/headers/24/node_sea.h +74 -0
- package/src/headers/24/node_shadow_realm.h +46 -0
- package/src/headers/24/node_snapshot_builder.h +57 -0
- package/src/headers/24/node_snapshotable.h +174 -0
- package/src/headers/{16 → 24}/node_sockaddr-inl.h +11 -20
- package/src/headers/{16 → 24}/node_sockaddr.h +9 -20
- package/src/headers/24/node_sqlite.h +270 -0
- package/src/headers/{18 → 24}/node_stat_watcher.h +2 -1
- package/src/headers/24/node_string.h +101 -0
- package/src/headers/24/node_task_runner.h +92 -0
- package/src/headers/24/node_threadsafe_cow-inl.h +54 -0
- package/src/headers/24/node_threadsafe_cow.h +105 -0
- package/src/headers/24/node_union_bytes.h +81 -0
- package/src/headers/24/node_url.h +101 -0
- package/src/headers/24/node_url_pattern.h +118 -0
- package/src/headers/24/node_v8.h +77 -0
- package/src/headers/{18 → 24}/node_v8_platform-inl.h +22 -31
- package/src/headers/{18 → 24}/node_version.h +18 -6
- package/src/headers/24/node_wasi.h +185 -0
- package/src/headers/24/node_wasm_web_api.h +55 -0
- package/src/headers/{18 → 24}/node_watchdog.h +2 -0
- package/src/headers/24/node_webstorage.h +60 -0
- package/src/headers/{16 → 24}/node_worker.h +24 -10
- package/src/headers/24/packet.h +155 -0
- package/src/headers/24/path.h +33 -0
- package/src/headers/24/permission/addon_permission.h +31 -0
- package/src/headers/24/permission/child_process_permission.h +31 -0
- package/src/headers/24/permission/fs_permission.h +167 -0
- package/src/headers/24/permission/inspector_permission.h +31 -0
- package/src/headers/24/permission/permission.h +100 -0
- package/src/headers/24/permission/permission_base.h +65 -0
- package/src/headers/24/permission/wasi_permission.h +31 -0
- package/src/headers/24/permission/worker_permission.h +31 -0
- package/src/headers/24/permission.h +100 -0
- package/src/headers/24/permission_base.h +65 -0
- package/src/headers/24/preferredaddress.h +72 -0
- package/src/headers/24/protocol_helper.h +27 -0
- package/src/headers/24/queue.h +306 -0
- package/src/headers/{18 → 24}/req_wrap-inl.h +12 -6
- package/src/headers/{16 → 24}/req_wrap.h +3 -1
- package/src/headers/24/runtime_agent.h +41 -0
- package/src/headers/24/session.h +528 -0
- package/src/headers/24/sessionticket.h +108 -0
- package/src/headers/{18 → 24}/spawn_sync.h +9 -8
- package/src/headers/{16 → 24}/stream_base-inl.h +3 -133
- package/src/headers/{16 → 24}/stream_base.h +43 -19
- package/src/headers/{16 → 24}/stream_pipe.h +7 -4
- package/src/headers/{18 → 24}/stream_wrap.h +2 -3
- package/src/headers/24/streams.h +370 -0
- package/src/headers/{16 → 24}/string_bytes.h +8 -21
- package/src/headers/{18 → 24}/string_decoder-inl.h +0 -6
- package/src/headers/{18 → 24}/string_decoder.h +0 -1
- package/src/headers/24/target_agent.h +75 -0
- package/src/headers/{16 → 24}/tcp_wrap.h +3 -1
- package/src/headers/{14 → 24}/threadpoolwork-inl.h +14 -1
- package/src/headers/24/timer_wrap-inl.h +32 -0
- package/src/headers/{16 → 24}/timer_wrap.h +7 -4
- package/src/headers/24/timers.h +75 -0
- package/src/headers/24/tlscontext.h +228 -0
- package/src/headers/24/tokens.h +256 -0
- package/src/headers/{14/tracing → 24}/trace_event.h +7 -5
- package/src/headers/24/traced_value.h +129 -0
- package/src/headers/24/tracing_agent.h +43 -0
- package/src/headers/24/transportparams.h +166 -0
- package/src/headers/{16 → 24}/tty_wrap.h +0 -1
- package/src/headers/{18 → 24}/udp_wrap.h +8 -5
- package/src/headers/24/undici_version.h +6 -0
- package/src/headers/{16 → 24}/util-inl.h +267 -131
- package/src/headers/{16 → 24}/util.h +338 -146
- package/src/headers/24/v8-external-memory-accounter.h +60 -0
- package/src/headers/24/v8-fast-api-calls.h +819 -0
- package/src/headers/24/v8-inspector.h +426 -0
- package/src/headers/24/wasi_permission.h +31 -0
- package/src/headers/24/worker_agent.h +40 -0
- package/src/headers/24/worker_inspector.h +124 -0
- package/src/headers/24/worker_permission.h +31 -0
- package/src/headers/24/zlib_version.h +6 -0
- package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
- package/dist/bindings/cws_darwin_x64_node83.node +0 -0
- package/dist/bindings/cws_darwin_x64_node93.node +0 -0
- package/dist/bindings/cws_linux_arm64_node83.node +0 -0
- package/dist/bindings/cws_linux_arm64_node93.node +0 -0
- package/dist/bindings/cws_linux_x64_node83.node +0 -0
- package/dist/bindings/cws_linux_x64_node93.node +0 -0
- package/src/headers/14/aliased_buffer.h +0 -263
- package/src/headers/14/allocated_buffer-inl.h +0 -110
- package/src/headers/14/allocated_buffer.h +0 -73
- package/src/headers/14/async_wrap.h +0 -230
- package/src/headers/14/base64.h +0 -183
- package/src/headers/14/base_object-inl.h +0 -371
- package/src/headers/14/base_object.h +0 -281
- package/src/headers/14/callback_queue-inl.h +0 -97
- package/src/headers/14/callback_queue.h +0 -78
- package/src/headers/14/debug_utils.h +0 -181
- package/src/headers/14/env.h +0 -1388
- package/src/headers/14/handle_wrap.h +0 -117
- package/src/headers/14/histogram-inl.h +0 -83
- package/src/headers/14/histogram.h +0 -98
- package/src/headers/14/inspector_agent.h +0 -149
- package/src/headers/14/inspector_profiler.h +0 -137
- package/src/headers/14/js_native_api.h +0 -544
- package/src/headers/14/js_native_api_types.h +0 -143
- package/src/headers/14/js_native_api_v8.h +0 -301
- package/src/headers/14/js_native_api_v8_internals.h +0 -38
- package/src/headers/14/json_utils.h +0 -161
- package/src/headers/14/memory_tracker-inl.h +0 -355
- package/src/headers/14/module_wrap.h +0 -99
- package/src/headers/14/node.h +0 -1032
- package/src/headers/14/node_api.h +0 -255
- package/src/headers/14/node_api_types.h +0 -44
- package/src/headers/14/node_binding.h +0 -99
- package/src/headers/14/node_context_data.h +0 -44
- package/src/headers/14/node_contextify.h +0 -161
- package/src/headers/14/node_crypto.h +0 -865
- package/src/headers/14/node_crypto_bio.h +0 -195
- package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
- package/src/headers/14/node_crypto_clienthello.h +0 -132
- package/src/headers/14/node_crypto_common.h +0 -138
- package/src/headers/14/node_crypto_groups.h +0 -415
- package/src/headers/14/node_dtrace.h +0 -86
- package/src/headers/14/node_errors.h +0 -214
- package/src/headers/14/node_file-inl.h +0 -306
- package/src/headers/14/node_file.h +0 -417
- package/src/headers/14/node_http2.h +0 -1191
- package/src/headers/14/node_http_common-inl.h +0 -194
- package/src/headers/14/node_http_common.h +0 -529
- package/src/headers/14/node_i18n.h +0 -144
- package/src/headers/14/node_internals.h +0 -405
- package/src/headers/14/node_mem.h +0 -45
- package/src/headers/14/node_messaging.h +0 -303
- package/src/headers/14/node_metadata.h +0 -109
- package/src/headers/14/node_mutex.h +0 -247
- package/src/headers/14/node_native_module.h +0 -101
- package/src/headers/14/node_native_module_env.h +0 -66
- package/src/headers/14/node_options-inl.h +0 -451
- package/src/headers/14/node_options.h +0 -481
- package/src/headers/14/node_perf.h +0 -181
- package/src/headers/14/node_perf_common.h +0 -97
- package/src/headers/14/node_platform.h +0 -189
- package/src/headers/14/node_process.h +0 -40
- package/src/headers/14/node_report.h +0 -47
- package/src/headers/14/node_revert.h +0 -72
- package/src/headers/14/node_root_certs.h +0 -3458
- package/src/headers/14/node_sockaddr-inl.h +0 -170
- package/src/headers/14/node_sockaddr.h +0 -123
- package/src/headers/14/node_stat_watcher.h +0 -70
- package/src/headers/14/node_union_bytes.h +0 -103
- package/src/headers/14/node_url.h +0 -188
- package/src/headers/14/node_version.h +0 -98
- package/src/headers/14/node_wasi.h +0 -108
- package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/14/node_win32_etw_provider.h +0 -99
- package/src/headers/14/node_worker.h +0 -141
- package/src/headers/14/pipe_wrap.h +0 -78
- package/src/headers/14/req_wrap-inl.h +0 -170
- package/src/headers/14/req_wrap.h +0 -77
- package/src/headers/14/stream_base-inl.h +0 -275
- package/src/headers/14/stream_base.h +0 -434
- package/src/headers/14/stream_pipe.h +0 -73
- package/src/headers/14/stream_wrap.h +0 -130
- package/src/headers/14/string_bytes.h +0 -129
- package/src/headers/14/string_decoder.h +0 -50
- package/src/headers/14/string_search.h +0 -638
- package/src/headers/14/tcp_wrap.h +0 -101
- package/src/headers/14/tls_wrap.h +0 -222
- package/src/headers/14/tracing/agent.h +0 -195
- package/src/headers/14/tracing/traced_value.h +0 -70
- package/src/headers/14/tty_wrap.h +0 -64
- package/src/headers/14/udp_wrap.h +0 -227
- package/src/headers/14/util-inl.h +0 -566
- package/src/headers/14/util.h +0 -804
- package/src/headers/14/v8abbr.h +0 -124
- package/src/headers/16/aliased_buffer.h +0 -315
- package/src/headers/16/allocated_buffer-inl.h +0 -110
- package/src/headers/16/allocated_buffer.h +0 -73
- package/src/headers/16/async_wrap-inl.h +0 -94
- package/src/headers/16/base64-inl.h +0 -189
- package/src/headers/16/base64.h +0 -69
- package/src/headers/16/crypto/crypto_aes.h +0 -89
- package/src/headers/16/crypto/crypto_cipher.h +0 -286
- package/src/headers/16/crypto/crypto_common.h +0 -187
- package/src/headers/16/crypto/crypto_dh.h +0 -157
- package/src/headers/16/crypto/crypto_dsa.h +0 -76
- package/src/headers/16/crypto/crypto_ec.h +0 -169
- package/src/headers/16/crypto/crypto_groups.h +0 -415
- package/src/headers/16/crypto/crypto_hash.h +0 -89
- package/src/headers/16/crypto/crypto_hkdf.h +0 -66
- package/src/headers/16/crypto/crypto_hmac.h +0 -94
- package/src/headers/16/crypto/crypto_keygen.h +0 -301
- package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
- package/src/headers/16/crypto/crypto_random.h +0 -130
- package/src/headers/16/crypto/crypto_rsa.h +0 -141
- package/src/headers/16/crypto/crypto_scrypt.h +0 -87
- package/src/headers/16/crypto/crypto_sig.h +0 -167
- package/src/headers/16/crypto/crypto_spkac.h +0 -20
- package/src/headers/16/crypto/crypto_timing.h +0 -20
- package/src/headers/16/crypto/crypto_x509.h +0 -141
- package/src/headers/16/env.h +0 -1629
- package/src/headers/16/histogram.h +0 -216
- package/src/headers/16/js_native_api.h +0 -561
- package/src/headers/16/js_native_api_v8.h +0 -451
- package/src/headers/16/node.d +0 -315
- package/src/headers/16/node.stp +0 -146
- package/src/headers/16/node_api.h +0 -275
- package/src/headers/16/node_api_internals.h +0 -30
- package/src/headers/16/node_binding.h +0 -99
- package/src/headers/16/node_buffer.h +0 -92
- package/src/headers/16/node_constants.h +0 -84
- package/src/headers/16/node_context_data.h +0 -44
- package/src/headers/16/node_contextify.h +0 -196
- package/src/headers/16/node_dtrace.h +0 -86
- package/src/headers/16/node_external_reference.h +0 -129
- package/src/headers/16/node_main_instance.h +0 -103
- package/src/headers/16/node_native_module.h +0 -101
- package/src/headers/16/node_native_module_env.h +0 -68
- package/src/headers/16/node_platform.h +0 -192
- package/src/headers/16/node_process.h +0 -43
- package/src/headers/16/node_provider.d +0 -80
- package/src/headers/16/node_snapshotable.h +0 -137
- package/src/headers/16/node_union_bytes.h +0 -103
- package/src/headers/16/node_url.h +0 -205
- package/src/headers/16/node_v8.h +0 -41
- package/src/headers/16/node_v8_platform-inl.h +0 -194
- package/src/headers/16/node_wasi.h +0 -108
- package/src/headers/16/node_watchdog.h +0 -152
- package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
- package/src/headers/16/node_win32_etw_provider.h +0 -99
- package/src/headers/16/spawn_sync.h +0 -242
- package/src/headers/16/string_decoder-inl.h +0 -37
- package/src/headers/16/string_search.h +0 -638
- package/src/headers/16/threadpoolwork-inl.h +0 -57
- package/src/headers/16/tracing/node_trace_buffer.h +0 -83
- package/src/headers/16/tracing/node_trace_writer.h +0 -75
- package/src/headers/16/tracing/trace_event.h +0 -720
- package/src/headers/16/tracing/traced_value.h +0 -70
- package/src/headers/16/v8abbr.h +0 -123
- package/src/headers/16/v8ustack.d +0 -695
- package/src/headers/18/aliased_buffer.h +0 -315
- package/src/headers/18/aliased_struct-inl.h +0 -54
- package/src/headers/18/aliased_struct.h +0 -63
- package/src/headers/18/base64-inl.h +0 -189
- package/src/headers/18/base64.h +0 -69
- package/src/headers/18/connect_wrap.h +0 -26
- package/src/headers/18/connection_wrap.h +0 -30
- package/src/headers/18/crypto/crypto_aes.h +0 -89
- package/src/headers/18/crypto/crypto_bio.h +0 -194
- package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
- package/src/headers/18/crypto/crypto_common.h +0 -151
- package/src/headers/18/crypto/crypto_groups.h +0 -415
- package/src/headers/18/crypto/crypto_x509.h +0 -143
- package/src/headers/18/debug_utils-inl.h +0 -223
- package/src/headers/18/diagnosticfilename-inl.h +0 -33
- package/src/headers/18/env-inl.h +0 -1308
- package/src/headers/18/env.h +0 -1667
- package/src/headers/18/inspector_io.h +0 -78
- package/src/headers/18/inspector_socket.h +0 -60
- package/src/headers/18/inspector_socket_server.h +0 -110
- package/src/headers/18/js_stream.h +0 -52
- package/src/headers/18/memory_tracker.h +0 -284
- package/src/headers/18/module_wrap.h +0 -116
- package/src/headers/18/node_binding.h +0 -99
- package/src/headers/18/node_context_data.h +0 -44
- package/src/headers/18/node_contextify.h +0 -196
- package/src/headers/18/node_dir.h +0 -52
- package/src/headers/18/node_dtrace.h +0 -86
- package/src/headers/18/node_http2_state.h +0 -149
- package/src/headers/18/node_mem-inl.h +0 -112
- package/src/headers/18/node_native_module.h +0 -109
- package/src/headers/18/node_native_module_env.h +0 -71
- package/src/headers/18/node_object_wrap.h +0 -132
- package/src/headers/18/node_snapshot_builder.h +0 -43
- package/src/headers/18/node_snapshotable.h +0 -130
- package/src/headers/18/node_union_bytes.h +0 -103
- package/src/headers/18/node_url.h +0 -205
- package/src/headers/18/node_v8.h +0 -41
- package/src/headers/18/node_wasi.h +0 -108
- package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
- package/src/headers/18/node_win32_etw_provider.h +0 -99
- package/src/headers/18/string_search.h +0 -638
- package/src/headers/18/tracing/node_trace_buffer.h +0 -83
- package/src/headers/18/tracing/node_trace_writer.h +0 -75
- package/src/headers/18/tracing/trace_event_common.h +0 -1109
- package/src/headers/18/tracing/traced_value.h +0 -70
- package/src/headers/18/v8abbr.h +0 -123
- /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
- /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
- /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
- /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
- /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
- /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
- /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
- /package/src/headers/{14 → 22}/inspector_io.h +0 -0
- /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
- /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
- /package/src/headers/{14 → 22}/js_stream.h +0 -0
- /package/src/headers/{14 → 22}/node_dir.h +0 -0
- /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
- /package/src/headers/{16 → 22}/node_mem.h +0 -0
- /package/src/headers/{16 → 22}/node_mutex.h +0 -0
- /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
- /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
- /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
- /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
- /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
- /package/src/headers/{18 → 22}/req_wrap.h +0 -0
- /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
- /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
- /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
- /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
- /package/src/headers/{18 → 22}/tty_wrap.h +0 -0
- /package/src/headers/{16 → 24}/aliased_struct-inl.h +0 -0
- /package/src/headers/{16 → 24}/aliased_struct.h +0 -0
- /package/src/headers/{18 → 24}/callback_queue-inl.h +0 -0
- /package/src/headers/{16 → 24}/connect_wrap.h +0 -0
- /package/src/headers/{16 → 24}/connection_wrap.h +0 -0
- /package/src/headers/{18 → 24}/crypto/crypto_spkac.h +0 -0
- /package/src/headers/{18 → 24}/crypto/crypto_timing.h +0 -0
- /package/src/headers/{16 → 24}/diagnosticfilename-inl.h +0 -0
- /package/src/headers/{16 → 24}/inspector_io.h +0 -0
- /package/src/headers/{16 → 24}/inspector_socket.h +0 -0
- /package/src/headers/{16 → 24}/inspector_socket_server.h +0 -0
- /package/src/headers/{16 → 24}/js_stream.h +0 -0
- /package/src/headers/{16 → 24}/node_dir.h +0 -0
- /package/src/headers/{18 → 24}/node_mem.h +0 -0
- /package/src/headers/{18 → 24}/node_mutex.h +0 -0
- /package/src/headers/{16 → 24}/node_object_wrap.h +0 -0
- /package/src/headers/{18 → 24}/node_process-inl.h +0 -0
- /package/src/headers/{14/tracing → 24}/node_trace_buffer.h +0 -0
- /package/src/headers/{14/tracing → 24}/node_trace_writer.h +0 -0
- /package/src/headers/{18 → 24}/pipe_wrap.h +0 -0
- /package/src/headers/{16/tracing → 24}/trace_event_common.h +0 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
4
|
+
#if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
|
|
5
|
+
|
|
6
|
+
#include <base_object.h>
|
|
7
|
+
#include <env.h>
|
|
8
|
+
#include <memory_tracker.h>
|
|
9
|
+
#include <nghttp3/nghttp3.h>
|
|
10
|
+
#include <ngtcp2/ngtcp2.h>
|
|
11
|
+
#include <ngtcp2/ngtcp2_crypto.h>
|
|
12
|
+
#include <node.h>
|
|
13
|
+
#include <node_mem.h>
|
|
14
|
+
#include <v8.h>
|
|
15
|
+
#include <unordered_map>
|
|
16
|
+
#include <vector>
|
|
17
|
+
#include "defs.h"
|
|
18
|
+
|
|
19
|
+
namespace node::quic {
|
|
20
|
+
|
|
21
|
+
class Endpoint;
|
|
22
|
+
class Packet;
|
|
23
|
+
|
|
24
|
+
// ============================================================================
|
|
25
|
+
|
|
26
|
+
// The FunctionTemplates the BindingData will store for us.
|
|
27
|
+
#define QUIC_CONSTRUCTORS(V) \
|
|
28
|
+
V(endpoint) \
|
|
29
|
+
V(logstream) \
|
|
30
|
+
V(packet) \
|
|
31
|
+
V(session) \
|
|
32
|
+
V(stream) \
|
|
33
|
+
V(udp) \
|
|
34
|
+
V(http3application)
|
|
35
|
+
|
|
36
|
+
// The callbacks are persistent v8::Function references that are set in the
|
|
37
|
+
// quic::BindingState used to communicate data and events back out to the JS
|
|
38
|
+
// environment. They are set once from the JavaScript side when the
|
|
39
|
+
// internalBinding('quic') is first loaded.
|
|
40
|
+
#define QUIC_JS_CALLBACKS(V) \
|
|
41
|
+
V(endpoint_close, EndpointClose) \
|
|
42
|
+
V(session_new, SessionNew) \
|
|
43
|
+
V(session_close, SessionClose) \
|
|
44
|
+
V(session_datagram, SessionDatagram) \
|
|
45
|
+
V(session_datagram_status, SessionDatagramStatus) \
|
|
46
|
+
V(session_handshake, SessionHandshake) \
|
|
47
|
+
V(session_ticket, SessionTicket) \
|
|
48
|
+
V(session_version_negotiation, SessionVersionNegotiation) \
|
|
49
|
+
V(session_path_validation, SessionPathValidation) \
|
|
50
|
+
V(stream_close, StreamClose) \
|
|
51
|
+
V(stream_created, StreamCreated) \
|
|
52
|
+
V(stream_reset, StreamReset) \
|
|
53
|
+
V(stream_headers, StreamHeaders) \
|
|
54
|
+
V(stream_blocked, StreamBlocked) \
|
|
55
|
+
V(stream_trailers, StreamTrailers)
|
|
56
|
+
|
|
57
|
+
// The various JS strings the implementation uses.
|
|
58
|
+
#define QUIC_STRINGS(V) \
|
|
59
|
+
V(aborted, "aborted") \
|
|
60
|
+
V(acknowledged, "acknowledged") \
|
|
61
|
+
V(ack_delay_exponent, "ackDelayExponent") \
|
|
62
|
+
V(active_connection_id_limit, "activeConnectionIDLimit") \
|
|
63
|
+
V(address_lru_size, "addressLRUSize") \
|
|
64
|
+
V(application_provider, "provider") \
|
|
65
|
+
V(bbr, "bbr") \
|
|
66
|
+
V(ca, "ca") \
|
|
67
|
+
V(certs, "certs") \
|
|
68
|
+
V(cc_algorithm, "cc") \
|
|
69
|
+
V(crl, "crl") \
|
|
70
|
+
V(ciphers, "ciphers") \
|
|
71
|
+
V(cubic, "cubic") \
|
|
72
|
+
V(disable_stateless_reset, "disableStatelessReset") \
|
|
73
|
+
V(enable_connect_protocol, "enableConnectProtocol") \
|
|
74
|
+
V(enable_datagrams, "enableDatagrams") \
|
|
75
|
+
V(enable_tls_trace, "tlsTrace") \
|
|
76
|
+
V(endpoint, "Endpoint") \
|
|
77
|
+
V(endpoint_udp, "Endpoint::UDP") \
|
|
78
|
+
V(failure, "failure") \
|
|
79
|
+
V(groups, "groups") \
|
|
80
|
+
V(handshake_timeout, "handshakeTimeout") \
|
|
81
|
+
V(http3_alpn, &NGHTTP3_ALPN_H3[1]) \
|
|
82
|
+
V(http3application, "Http3Application") \
|
|
83
|
+
V(initial_max_data, "initialMaxData") \
|
|
84
|
+
V(initial_max_stream_data_bidi_local, "initialMaxStreamDataBidiLocal") \
|
|
85
|
+
V(initial_max_stream_data_bidi_remote, "initialMaxStreamDataBidiRemote") \
|
|
86
|
+
V(initial_max_stream_data_uni, "initialMaxStreamDataUni") \
|
|
87
|
+
V(initial_max_streams_bidi, "initialMaxStreamsBidi") \
|
|
88
|
+
V(initial_max_streams_uni, "initialMaxStreamsUni") \
|
|
89
|
+
V(ipv6_only, "ipv6Only") \
|
|
90
|
+
V(keylog, "keylog") \
|
|
91
|
+
V(keys, "keys") \
|
|
92
|
+
V(logstream, "LogStream") \
|
|
93
|
+
V(lost, "lost") \
|
|
94
|
+
V(max_ack_delay, "maxAckDelay") \
|
|
95
|
+
V(max_connections_per_host, "maxConnectionsPerHost") \
|
|
96
|
+
V(max_connections_total, "maxConnectionsTotal") \
|
|
97
|
+
V(max_datagram_frame_size, "maxDatagramFrameSize") \
|
|
98
|
+
V(max_field_section_size, "maxFieldSectionSize") \
|
|
99
|
+
V(max_header_length, "maxHeaderLength") \
|
|
100
|
+
V(max_header_pairs, "maxHeaderPairs") \
|
|
101
|
+
V(max_idle_timeout, "maxIdleTimeout") \
|
|
102
|
+
V(max_payload_size, "maxPayloadSize") \
|
|
103
|
+
V(max_retries, "maxRetries") \
|
|
104
|
+
V(max_stateless_resets, "maxStatelessResetsPerHost") \
|
|
105
|
+
V(max_stream_window, "maxStreamWindow") \
|
|
106
|
+
V(max_window, "maxWindow") \
|
|
107
|
+
V(min_version, "minVersion") \
|
|
108
|
+
V(packetwrap, "PacketWrap") \
|
|
109
|
+
V(preferred_address_strategy, "preferredAddressPolicy") \
|
|
110
|
+
V(protocol, "protocol") \
|
|
111
|
+
V(qlog, "qlog") \
|
|
112
|
+
V(qpack_blocked_streams, "qpackBlockedStreams") \
|
|
113
|
+
V(qpack_encoder_max_dtable_capacity, "qpackEncoderMaxDTableCapacity") \
|
|
114
|
+
V(qpack_max_dtable_capacity, "qpackMaxDTableCapacity") \
|
|
115
|
+
V(reject_unauthorized, "rejectUnauthorized") \
|
|
116
|
+
V(reno, "reno") \
|
|
117
|
+
V(retry_token_expiration, "retryTokenExpiration") \
|
|
118
|
+
V(reset_token_secret, "resetTokenSecret") \
|
|
119
|
+
V(rx_loss, "rxDiagnosticLoss") \
|
|
120
|
+
V(servername, "servername") \
|
|
121
|
+
V(session, "Session") \
|
|
122
|
+
V(stream, "Stream") \
|
|
123
|
+
V(success, "success") \
|
|
124
|
+
V(tls_options, "tls") \
|
|
125
|
+
V(token_expiration, "tokenExpiration") \
|
|
126
|
+
V(token_secret, "tokenSecret") \
|
|
127
|
+
V(transport_params, "transportParams") \
|
|
128
|
+
V(tx_loss, "txDiagnosticLoss") \
|
|
129
|
+
V(udp_receive_buffer_size, "udpReceiveBufferSize") \
|
|
130
|
+
V(udp_send_buffer_size, "udpSendBufferSize") \
|
|
131
|
+
V(udp_ttl, "udpTTL") \
|
|
132
|
+
V(unacknowledged_packet_threshold, "unacknowledgedPacketThreshold") \
|
|
133
|
+
V(validate_address, "validateAddress") \
|
|
134
|
+
V(verify_client, "verifyClient") \
|
|
135
|
+
V(verify_private_key, "verifyPrivateKey") \
|
|
136
|
+
V(version, "version")
|
|
137
|
+
|
|
138
|
+
// =============================================================================
|
|
139
|
+
// The BindingState object holds state for the internalBinding('quic') binding
|
|
140
|
+
// instance. It is mostly used to hold the persistent constructors, strings, and
|
|
141
|
+
// callback references used for the rest of the implementation.
|
|
142
|
+
//
|
|
143
|
+
// TODO(@jasnell): Make this snapshotable?
|
|
144
|
+
class BindingData final
|
|
145
|
+
: public BaseObject,
|
|
146
|
+
public mem::NgLibMemoryManager<BindingData, ngtcp2_mem> {
|
|
147
|
+
public:
|
|
148
|
+
SET_BINDING_ID(quic_binding_data)
|
|
149
|
+
static void InitPerContext(Realm* realm, v8::Local<v8::Object> target);
|
|
150
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
151
|
+
|
|
152
|
+
static BindingData& Get(Environment* env);
|
|
153
|
+
|
|
154
|
+
BindingData(Realm* realm, v8::Local<v8::Object> object);
|
|
155
|
+
DISALLOW_COPY_AND_MOVE(BindingData)
|
|
156
|
+
|
|
157
|
+
void MemoryInfo(MemoryTracker* tracker) const override;
|
|
158
|
+
SET_MEMORY_INFO_NAME(BindingData)
|
|
159
|
+
SET_SELF_SIZE(BindingData)
|
|
160
|
+
|
|
161
|
+
// NgLibMemoryManager
|
|
162
|
+
operator ngtcp2_mem();
|
|
163
|
+
operator nghttp3_mem();
|
|
164
|
+
void CheckAllocatedSize(size_t previous_size) const;
|
|
165
|
+
void IncreaseAllocatedSize(size_t size);
|
|
166
|
+
void DecreaseAllocatedSize(size_t size);
|
|
167
|
+
|
|
168
|
+
// Installs the set of JavaScript callback functions that are used to
|
|
169
|
+
// bridge out to the JS API.
|
|
170
|
+
static void SetCallbacks(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
171
|
+
|
|
172
|
+
std::vector<BaseObjectPtr<BaseObject>> packet_freelist;
|
|
173
|
+
|
|
174
|
+
std::unordered_map<Endpoint*, BaseObjectPtr<BaseObject>> listening_endpoints;
|
|
175
|
+
|
|
176
|
+
// Purge the packet free list to free up memory.
|
|
177
|
+
static void FlushPacketFreelist(
|
|
178
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
179
|
+
|
|
180
|
+
bool in_ngtcp2_callback_scope = false;
|
|
181
|
+
bool in_nghttp3_callback_scope = false;
|
|
182
|
+
|
|
183
|
+
// The following set up various storage and accessors for common strings,
|
|
184
|
+
// construction templates, and callbacks stored on the BindingData. These
|
|
185
|
+
// are all defined in defs.h
|
|
186
|
+
|
|
187
|
+
#define V(name) \
|
|
188
|
+
void set_##name##_constructor_template( \
|
|
189
|
+
v8::Local<v8::FunctionTemplate> tmpl); \
|
|
190
|
+
v8::Local<v8::FunctionTemplate> name##_constructor_template() const;
|
|
191
|
+
QUIC_CONSTRUCTORS(V)
|
|
192
|
+
#undef V
|
|
193
|
+
|
|
194
|
+
#define V(name, _) \
|
|
195
|
+
void set_##name##_callback(v8::Local<v8::Function> fn); \
|
|
196
|
+
v8::Local<v8::Function> name##_callback() const;
|
|
197
|
+
QUIC_JS_CALLBACKS(V)
|
|
198
|
+
#undef V
|
|
199
|
+
|
|
200
|
+
#define V(name, _) v8::Local<v8::String> name##_string() const;
|
|
201
|
+
QUIC_STRINGS(V)
|
|
202
|
+
#undef V
|
|
203
|
+
|
|
204
|
+
#define V(name, _) v8::Local<v8::String> on_##name##_string() const;
|
|
205
|
+
QUIC_JS_CALLBACKS(V)
|
|
206
|
+
#undef V
|
|
207
|
+
|
|
208
|
+
size_t current_ngtcp2_memory_ = 0;
|
|
209
|
+
|
|
210
|
+
#define V(name) v8::Global<v8::FunctionTemplate> name##_constructor_template_;
|
|
211
|
+
QUIC_CONSTRUCTORS(V)
|
|
212
|
+
#undef V
|
|
213
|
+
|
|
214
|
+
#define V(name, _) v8::Global<v8::Function> name##_callback_;
|
|
215
|
+
QUIC_JS_CALLBACKS(V)
|
|
216
|
+
#undef V
|
|
217
|
+
|
|
218
|
+
#define V(name, _) mutable v8::Eternal<v8::String> name##_string_;
|
|
219
|
+
QUIC_STRINGS(V)
|
|
220
|
+
#undef V
|
|
221
|
+
|
|
222
|
+
#define V(name, _) mutable v8::Eternal<v8::String> on_##name##_string_;
|
|
223
|
+
QUIC_JS_CALLBACKS(V)
|
|
224
|
+
#undef V
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
void IllegalConstructor(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
228
|
+
|
|
229
|
+
// The ngtcp2 and nghttp3 callbacks have certain restrictions
|
|
230
|
+
// that forbid re-entry. We provide the following scopes for
|
|
231
|
+
// use in those to help protect against it.
|
|
232
|
+
struct NgTcp2CallbackScope {
|
|
233
|
+
Environment* env;
|
|
234
|
+
explicit NgTcp2CallbackScope(Environment* env);
|
|
235
|
+
DISALLOW_COPY_AND_MOVE(NgTcp2CallbackScope)
|
|
236
|
+
~NgTcp2CallbackScope();
|
|
237
|
+
static bool in_ngtcp2_callback(Environment* env);
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
struct NgHttp3CallbackScope {
|
|
241
|
+
Environment* env;
|
|
242
|
+
explicit NgHttp3CallbackScope(Environment* env);
|
|
243
|
+
DISALLOW_COPY_AND_MOVE(NgHttp3CallbackScope)
|
|
244
|
+
~NgHttp3CallbackScope();
|
|
245
|
+
static bool in_nghttp3_callback(Environment* env);
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
struct CallbackScopeBase {
|
|
249
|
+
Environment* env;
|
|
250
|
+
v8::Context::Scope context_scope;
|
|
251
|
+
v8::TryCatch try_catch;
|
|
252
|
+
|
|
253
|
+
explicit CallbackScopeBase(Environment* env);
|
|
254
|
+
DISALLOW_COPY_AND_MOVE(CallbackScopeBase)
|
|
255
|
+
~CallbackScopeBase();
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
// Maintains a strong reference to BaseObject type ptr to keep it alive during
|
|
259
|
+
// a MakeCallback during which it might be destroyed.
|
|
260
|
+
template <typename T>
|
|
261
|
+
struct CallbackScope final : public CallbackScopeBase {
|
|
262
|
+
BaseObjectPtr<T> ref;
|
|
263
|
+
explicit CallbackScope(const T* ptr)
|
|
264
|
+
: CallbackScopeBase(ptr->env()), ref(ptr) {}
|
|
265
|
+
DISALLOW_COPY_AND_MOVE(CallbackScope)
|
|
266
|
+
explicit CallbackScope(T* ptr) : CallbackScopeBase(ptr->env()), ref(ptr) {}
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
} // namespace node::quic
|
|
270
|
+
|
|
271
|
+
#endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
|
|
272
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
#ifndef SRC_BLOB_SERIALIZER_DESERIALIZER_INL_H_
|
|
2
|
+
#define SRC_BLOB_SERIALIZER_DESERIALIZER_INL_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "blob_serializer_deserializer.h"
|
|
7
|
+
|
|
8
|
+
#include <ostream>
|
|
9
|
+
#include <sstream>
|
|
10
|
+
#include <string>
|
|
11
|
+
#include <type_traits>
|
|
12
|
+
#include <utility>
|
|
13
|
+
|
|
14
|
+
#include "debug_utils-inl.h"
|
|
15
|
+
|
|
16
|
+
// This is related to the blob that is used in snapshots and single executable
|
|
17
|
+
// applications and has nothing to do with `node_blob.h`.
|
|
18
|
+
|
|
19
|
+
namespace node {
|
|
20
|
+
|
|
21
|
+
struct EnvSerializeInfo;
|
|
22
|
+
struct PropInfo;
|
|
23
|
+
struct RealmSerializeInfo;
|
|
24
|
+
|
|
25
|
+
namespace builtins {
|
|
26
|
+
struct CodeCacheInfo;
|
|
27
|
+
} // namespace builtins
|
|
28
|
+
|
|
29
|
+
// These operator<< overload declarations are needed because
|
|
30
|
+
// BlobSerializerDeserializer::ToStr() uses these.
|
|
31
|
+
|
|
32
|
+
std::ostream& operator<<(std::ostream& output,
|
|
33
|
+
const builtins::CodeCacheInfo& info);
|
|
34
|
+
|
|
35
|
+
std::ostream& operator<<(std::ostream& output,
|
|
36
|
+
const std::vector<builtins::CodeCacheInfo>& vec);
|
|
37
|
+
|
|
38
|
+
std::ostream& operator<<(std::ostream& output, const std::vector<uint8_t>& vec);
|
|
39
|
+
|
|
40
|
+
std::ostream& operator<<(std::ostream& output,
|
|
41
|
+
const std::vector<PropInfo>& vec);
|
|
42
|
+
|
|
43
|
+
std::ostream& operator<<(std::ostream& output, const PropInfo& info);
|
|
44
|
+
|
|
45
|
+
std::ostream& operator<<(std::ostream& output,
|
|
46
|
+
const std::vector<std::string>& vec);
|
|
47
|
+
|
|
48
|
+
std::ostream& operator<<(std::ostream& output, const RealmSerializeInfo& i);
|
|
49
|
+
|
|
50
|
+
std::ostream& operator<<(std::ostream& output, const EnvSerializeInfo& i);
|
|
51
|
+
|
|
52
|
+
template <typename... Args>
|
|
53
|
+
void BlobSerializerDeserializer::Debug(const char* format,
|
|
54
|
+
Args&&... args) const {
|
|
55
|
+
if (is_debug) {
|
|
56
|
+
FPrintF(stderr, format, std::forward<Args>(args)...);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
template <typename T>
|
|
61
|
+
std::string BlobSerializerDeserializer::ToStr(const T& arg) const {
|
|
62
|
+
std::stringstream ss;
|
|
63
|
+
ss << arg;
|
|
64
|
+
return ss.str();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
template <typename T>
|
|
68
|
+
std::string BlobSerializerDeserializer::GetName() const {
|
|
69
|
+
#define TYPE_LIST(V) \
|
|
70
|
+
V(builtins::CodeCacheInfo) \
|
|
71
|
+
V(PropInfo) \
|
|
72
|
+
V(std::string)
|
|
73
|
+
|
|
74
|
+
#define V(TypeName) \
|
|
75
|
+
if constexpr (std::is_same_v<T, TypeName>) { \
|
|
76
|
+
return #TypeName; \
|
|
77
|
+
} else // NOLINT(readability/braces)
|
|
78
|
+
TYPE_LIST(V)
|
|
79
|
+
#undef V
|
|
80
|
+
|
|
81
|
+
if constexpr (std::is_arithmetic_v<T>) {
|
|
82
|
+
return (std::is_unsigned_v<T> ? "uint"
|
|
83
|
+
: std::is_integral_v<T> ? "int"
|
|
84
|
+
: "float") +
|
|
85
|
+
std::to_string(sizeof(T) * 8) + "_t";
|
|
86
|
+
}
|
|
87
|
+
return "";
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Helper for reading numeric types.
|
|
91
|
+
template <typename Impl>
|
|
92
|
+
template <typename T>
|
|
93
|
+
T BlobDeserializer<Impl>::ReadArithmetic() {
|
|
94
|
+
static_assert(std::is_arithmetic_v<T>, "Not an arithmetic type");
|
|
95
|
+
T result;
|
|
96
|
+
ReadArithmetic(&result, 1);
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Layout of vectors:
|
|
101
|
+
// [ 4/8 bytes ] count
|
|
102
|
+
// [ ... ] contents (count * size of individual elements)
|
|
103
|
+
template <typename Impl>
|
|
104
|
+
template <typename T>
|
|
105
|
+
std::vector<T> BlobDeserializer<Impl>::ReadVector() {
|
|
106
|
+
if (is_debug) {
|
|
107
|
+
std::string name = GetName<T>();
|
|
108
|
+
Debug("\nReadVector<%s>()(%d-byte)\n", name.c_str(), sizeof(T));
|
|
109
|
+
}
|
|
110
|
+
size_t count = static_cast<size_t>(ReadArithmetic<size_t>());
|
|
111
|
+
if (count == 0) {
|
|
112
|
+
return std::vector<T>();
|
|
113
|
+
}
|
|
114
|
+
if (is_debug) {
|
|
115
|
+
Debug("Reading %d vector elements...\n", count);
|
|
116
|
+
}
|
|
117
|
+
std::vector<T> result;
|
|
118
|
+
if constexpr (std::is_arithmetic_v<T>) {
|
|
119
|
+
result = ReadArithmeticVector<T>(count);
|
|
120
|
+
} else {
|
|
121
|
+
result = ReadNonArithmeticVector<T>(count);
|
|
122
|
+
}
|
|
123
|
+
if (is_debug) {
|
|
124
|
+
std::string str = std::is_arithmetic_v<T> ? "" : ToStr(result);
|
|
125
|
+
std::string name = GetName<T>();
|
|
126
|
+
Debug("ReadVector<%s>() read %s\n", name.c_str(), str.c_str());
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
template <typename Impl>
|
|
132
|
+
std::string BlobDeserializer<Impl>::ReadString() {
|
|
133
|
+
std::string_view view = ReadStringView(StringLogMode::kAddressAndContent);
|
|
134
|
+
return std::string(view);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
template <typename Impl>
|
|
138
|
+
std::string_view BlobDeserializer<Impl>::ReadStringView(StringLogMode mode) {
|
|
139
|
+
size_t length = ReadArithmetic<size_t>();
|
|
140
|
+
Debug("ReadStringView(), length=%zu: ", length);
|
|
141
|
+
|
|
142
|
+
if (length == 0) {
|
|
143
|
+
Debug("ReadStringView() read an empty view\n");
|
|
144
|
+
return std::string_view();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
std::string_view result(sink.data() + read_total, length);
|
|
148
|
+
Debug("%p, read %zu bytes", result.data(), result.size());
|
|
149
|
+
if (mode == StringLogMode::kAddressAndContent) {
|
|
150
|
+
Debug(", content:%s%s", length > 32 ? "\n" : " ", result);
|
|
151
|
+
}
|
|
152
|
+
Debug("\n");
|
|
153
|
+
|
|
154
|
+
read_total += length;
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Helper for reading an array of numeric types.
|
|
159
|
+
template <typename Impl>
|
|
160
|
+
template <typename T>
|
|
161
|
+
void BlobDeserializer<Impl>::ReadArithmetic(T* out, size_t count) {
|
|
162
|
+
static_assert(std::is_arithmetic_v<T>, "Not an arithmetic type");
|
|
163
|
+
DCHECK_GT(count, 0); // Should not read contents for vectors of size 0.
|
|
164
|
+
if (is_debug) {
|
|
165
|
+
std::string name = GetName<T>();
|
|
166
|
+
Debug("Read<%s>()(%d-byte), count=%d: ", name.c_str(), sizeof(T), count);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
size_t size = sizeof(T) * count;
|
|
170
|
+
memcpy(out, sink.data() + read_total, size);
|
|
171
|
+
|
|
172
|
+
if (is_debug) {
|
|
173
|
+
std::string str =
|
|
174
|
+
"{ " + std::to_string(out[0]) + (count > 1 ? ", ... }" : " }");
|
|
175
|
+
Debug("%s, read %zu bytes\n", str.c_str(), size);
|
|
176
|
+
}
|
|
177
|
+
read_total += size;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Helper for reading numeric vectors.
|
|
181
|
+
template <typename Impl>
|
|
182
|
+
template <typename Number>
|
|
183
|
+
std::vector<Number> BlobDeserializer<Impl>::ReadArithmeticVector(size_t count) {
|
|
184
|
+
static_assert(std::is_arithmetic_v<Number>, "Not an arithmetic type");
|
|
185
|
+
DCHECK_GT(count, 0); // Should not read contents for vectors of size 0.
|
|
186
|
+
std::vector<Number> result(count);
|
|
187
|
+
ReadArithmetic(result.data(), count);
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Helper for reading non-numeric vectors.
|
|
192
|
+
template <typename Impl>
|
|
193
|
+
template <typename T>
|
|
194
|
+
std::vector<T> BlobDeserializer<Impl>::ReadNonArithmeticVector(size_t count) {
|
|
195
|
+
static_assert(!std::is_arithmetic_v<T>, "Arithmetic type");
|
|
196
|
+
DCHECK_GT(count, 0); // Should not read contents for vectors of size 0.
|
|
197
|
+
std::vector<T> result;
|
|
198
|
+
result.reserve(count);
|
|
199
|
+
bool original_is_debug = is_debug;
|
|
200
|
+
is_debug = original_is_debug && !std::is_same_v<T, std::string>;
|
|
201
|
+
for (size_t i = 0; i < count; ++i) {
|
|
202
|
+
if (is_debug) {
|
|
203
|
+
Debug("\n[%d] ", i);
|
|
204
|
+
}
|
|
205
|
+
result.push_back(ReadElement<T>());
|
|
206
|
+
}
|
|
207
|
+
is_debug = original_is_debug;
|
|
208
|
+
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
template <typename Impl>
|
|
213
|
+
template <typename T>
|
|
214
|
+
T BlobDeserializer<Impl>::ReadElement() {
|
|
215
|
+
if constexpr (std::is_arithmetic_v<T>) {
|
|
216
|
+
return ReadArithmetic<T>();
|
|
217
|
+
} else if constexpr (std::is_same_v<T, std::string>) {
|
|
218
|
+
return ReadString();
|
|
219
|
+
} else {
|
|
220
|
+
return impl()->template Read<T>();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Helper for writing numeric types.
|
|
225
|
+
template <typename Impl>
|
|
226
|
+
template <typename T>
|
|
227
|
+
size_t BlobSerializer<Impl>::WriteArithmetic(const T& data) {
|
|
228
|
+
static_assert(std::is_arithmetic_v<T>, "Not an arithmetic type");
|
|
229
|
+
return WriteArithmetic(&data, 1);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Layout of vectors:
|
|
233
|
+
// [ 4/8 bytes ] count
|
|
234
|
+
// [ ... ] contents (count * size of individual elements)
|
|
235
|
+
template <typename Impl>
|
|
236
|
+
template <typename T>
|
|
237
|
+
size_t BlobSerializer<Impl>::WriteVector(const std::vector<T>& data) {
|
|
238
|
+
if (is_debug) {
|
|
239
|
+
std::string str = std::is_arithmetic_v<T> ? "" : ToStr(data);
|
|
240
|
+
std::string name = GetName<T>();
|
|
241
|
+
Debug("\nAt 0x%x: WriteVector<%s>() (%d-byte), count=%d: %s\n",
|
|
242
|
+
sink.size(),
|
|
243
|
+
name.c_str(),
|
|
244
|
+
sizeof(T),
|
|
245
|
+
data.size(),
|
|
246
|
+
str.c_str());
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
size_t written_total = WriteArithmetic<size_t>(data.size());
|
|
250
|
+
if (data.empty()) {
|
|
251
|
+
return written_total;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
if constexpr (std::is_arithmetic_v<T>) {
|
|
255
|
+
written_total += WriteArithmeticVector<T>(data);
|
|
256
|
+
} else {
|
|
257
|
+
written_total += WriteNonArithmeticVector<T>(data);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if (is_debug) {
|
|
261
|
+
std::string name = GetName<T>();
|
|
262
|
+
Debug("WriteVector<%s>() wrote %d bytes\n", name.c_str(), written_total);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return written_total;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// The layout of a written string:
|
|
269
|
+
// [ 4/8 bytes ] length
|
|
270
|
+
// [ |length| bytes ] contents
|
|
271
|
+
template <typename Impl>
|
|
272
|
+
size_t BlobSerializer<Impl>::WriteStringView(std::string_view data,
|
|
273
|
+
StringLogMode mode) {
|
|
274
|
+
Debug("At 0x%x: WriteStringView(), length=%zu: %p\n",
|
|
275
|
+
sink.size(),
|
|
276
|
+
data.size(),
|
|
277
|
+
data.data());
|
|
278
|
+
size_t written_total = WriteArithmetic<size_t>(data.size());
|
|
279
|
+
|
|
280
|
+
size_t length = data.size();
|
|
281
|
+
if (length == 0) {
|
|
282
|
+
Debug("WriteStringView() wrote an empty view\n");
|
|
283
|
+
return written_total;
|
|
284
|
+
}
|
|
285
|
+
sink.insert(sink.end(), data.data(), data.data() + length);
|
|
286
|
+
written_total += length;
|
|
287
|
+
|
|
288
|
+
Debug("WriteStringView() wrote %zu bytes\n", written_total);
|
|
289
|
+
if (mode == StringLogMode::kAddressAndContent) {
|
|
290
|
+
Debug("%s", data);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return written_total;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
template <typename Impl>
|
|
297
|
+
size_t BlobSerializer<Impl>::WriteString(const std::string& data) {
|
|
298
|
+
return WriteStringView(data, StringLogMode::kAddressAndContent);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
static size_t kPreviewCount = 16;
|
|
302
|
+
|
|
303
|
+
// Helper for writing an array of numeric types.
|
|
304
|
+
template <typename Impl>
|
|
305
|
+
template <typename T>
|
|
306
|
+
size_t BlobSerializer<Impl>::WriteArithmetic(const T* data, size_t count) {
|
|
307
|
+
static_assert(std::is_arithmetic_v<T>, "Arithmetic type");
|
|
308
|
+
DCHECK_GT(count, 0); // Should not write contents for vectors of size 0.
|
|
309
|
+
if (is_debug) {
|
|
310
|
+
size_t preview_count = count < kPreviewCount ? count : kPreviewCount;
|
|
311
|
+
std::string str = "{ ";
|
|
312
|
+
for (size_t i = 0; i < preview_count; ++i) {
|
|
313
|
+
str += (std::to_string(data[i]) + ",");
|
|
314
|
+
}
|
|
315
|
+
if (count > preview_count) {
|
|
316
|
+
str += "...";
|
|
317
|
+
}
|
|
318
|
+
str += "}";
|
|
319
|
+
std::string name = GetName<T>();
|
|
320
|
+
Debug("At 0x%x: Write<%s>() (%zu-byte), count=%zu: %s",
|
|
321
|
+
sink.size(),
|
|
322
|
+
name.c_str(),
|
|
323
|
+
sizeof(T),
|
|
324
|
+
count,
|
|
325
|
+
str.c_str());
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
size_t size = sizeof(T) * count;
|
|
329
|
+
const char* pos = reinterpret_cast<const char*>(data);
|
|
330
|
+
sink.insert(sink.end(), pos, pos + size);
|
|
331
|
+
|
|
332
|
+
if (is_debug) {
|
|
333
|
+
Debug(", wrote %zu bytes\n", size);
|
|
334
|
+
}
|
|
335
|
+
return size;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Helper for writing numeric vectors.
|
|
339
|
+
template <typename Impl>
|
|
340
|
+
template <typename Number>
|
|
341
|
+
size_t BlobSerializer<Impl>::WriteArithmeticVector(
|
|
342
|
+
const std::vector<Number>& data) {
|
|
343
|
+
static_assert(std::is_arithmetic_v<Number>, "Arithmetic type");
|
|
344
|
+
return WriteArithmetic(data.data(), data.size());
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Helper for writing non-numeric vectors.
|
|
348
|
+
template <typename Impl>
|
|
349
|
+
template <typename T>
|
|
350
|
+
size_t BlobSerializer<Impl>::WriteNonArithmeticVector(
|
|
351
|
+
const std::vector<T>& data) {
|
|
352
|
+
static_assert(!std::is_arithmetic_v<T>, "Arithmetic type");
|
|
353
|
+
DCHECK_GT(data.size(),
|
|
354
|
+
0); // Should not write contents for vectors of size 0.
|
|
355
|
+
size_t written_total = 0;
|
|
356
|
+
bool original_is_debug = is_debug;
|
|
357
|
+
is_debug = original_is_debug && !std::is_same_v<T, std::string>;
|
|
358
|
+
for (size_t i = 0; i < data.size(); ++i) {
|
|
359
|
+
if (is_debug) {
|
|
360
|
+
Debug("\n[%d] ", i);
|
|
361
|
+
}
|
|
362
|
+
written_total += WriteElement<T>(data[i]);
|
|
363
|
+
}
|
|
364
|
+
is_debug = original_is_debug;
|
|
365
|
+
|
|
366
|
+
return written_total;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
template <typename Impl>
|
|
370
|
+
template <typename T>
|
|
371
|
+
size_t BlobSerializer<Impl>::WriteElement(const T& data) {
|
|
372
|
+
if constexpr (std::is_arithmetic_v<T>) {
|
|
373
|
+
return WriteArithmetic<T>(data);
|
|
374
|
+
} else if constexpr (std::is_same_v<T, std::string>) {
|
|
375
|
+
return WriteString(data);
|
|
376
|
+
} else {
|
|
377
|
+
return impl()->template Write<T>(data);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
} // namespace node
|
|
382
|
+
|
|
383
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
384
|
+
|
|
385
|
+
#endif // SRC_BLOB_SERIALIZER_DESERIALIZER_INL_H_
|