@encharm/cws 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bindings/cws_linux_108.node +0 -0
- package/dist/bindings/cws_linux_64.node +0 -0
- package/dist/bindings/cws_linux_72.node +0 -0
- package/dist/bindings/cws_linux_79.node +0 -0
- package/dist/bindings/cws_linux_83.node +0 -0
- package/dist/bindings/cws_linux_93.node +0 -0
- package/dist/bindings/cws_win32_64.node +0 -0
- package/dist/bindings/cws_win32_72.node +0 -0
- package/dist/bindings/cws_win32_79.node +0 -0
- package/dist/bindings/cws_win32_83.node +0 -0
- package/dist/bindings/cws_win32_93.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +24 -2
- package/src/HTTPSocket.cpp +1 -1
- package/src/headers/{13 → 18}/aliased_buffer.h +61 -9
- package/src/headers/18/aliased_struct-inl.h +54 -0
- package/src/headers/18/aliased_struct.h +63 -0
- package/src/headers/{12 → 18}/async_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/async_wrap.h +26 -2
- package/src/headers/{12/base64.h → 18/base64-inl.h} +78 -86
- package/src/headers/18/base64.h +69 -0
- package/src/headers/{12 → 18}/base_object-inl.h +46 -25
- package/src/headers/{12 → 18}/base_object.h +82 -17
- package/src/headers/{12 → 18}/callback_queue-inl.h +9 -9
- package/src/headers/{12 → 18}/callback_queue.h +13 -5
- package/src/headers/18/cares_wrap.h +523 -0
- package/src/headers/{12 → 18}/connect_wrap.h +0 -0
- package/src/headers/{12 → 18}/connection_wrap.h +0 -0
- package/src/headers/18/crypto/crypto_aes.h +89 -0
- package/src/headers/{13/node_crypto_bio.h → 18/crypto/crypto_bio.h} +3 -4
- package/src/headers/18/crypto/crypto_cipher.h +291 -0
- package/src/headers/{13/node_crypto_clienthello-inl.h → 18/crypto/crypto_clienthello-inl.h} +4 -5
- package/src/headers/{13/node_crypto_clienthello.h → 18/crypto/crypto_clienthello.h} +3 -4
- package/src/headers/{12/node_crypto_common.h → 18/crypto/crypto_common.h} +49 -36
- package/src/headers/18/crypto/crypto_context.h +147 -0
- package/src/headers/18/crypto/crypto_dh.h +156 -0
- package/src/headers/18/crypto/crypto_dsa.h +77 -0
- package/src/headers/18/crypto/crypto_ec.h +170 -0
- package/src/headers/{12/node_crypto_groups.h → 18/crypto/crypto_groups.h} +3 -3
- package/src/headers/18/crypto/crypto_hash.h +89 -0
- package/src/headers/18/crypto/crypto_hkdf.h +65 -0
- package/src/headers/18/crypto/crypto_hmac.h +94 -0
- package/src/headers/18/crypto/crypto_keygen.h +305 -0
- package/src/headers/18/crypto/crypto_keys.h +420 -0
- package/src/headers/18/crypto/crypto_pbkdf2.h +76 -0
- package/src/headers/18/crypto/crypto_random.h +130 -0
- package/src/headers/18/crypto/crypto_rsa.h +141 -0
- package/src/headers/18/crypto/crypto_scrypt.h +87 -0
- package/src/headers/18/crypto/crypto_sig.h +168 -0
- package/src/headers/18/crypto/crypto_spkac.h +21 -0
- package/src/headers/18/crypto/crypto_timing.h +20 -0
- package/src/headers/{13/tls_wrap.h → 18/crypto/crypto_tls.h} +137 -66
- package/src/headers/18/crypto/crypto_util.h +791 -0
- package/src/headers/18/crypto/crypto_x509.h +143 -0
- package/src/headers/{12 → 18}/debug_utils-inl.h +0 -0
- package/src/headers/{13 → 18}/debug_utils.h +7 -4
- package/src/headers/{12 → 18}/diagnosticfilename-inl.h +0 -0
- package/src/headers/{12 → 18}/env-inl.h +397 -304
- package/src/headers/{12 → 18}/env.h +397 -172
- package/src/headers/{12 → 18}/handle_wrap.h +7 -3
- package/src/headers/18/histogram-inl.h +107 -0
- package/src/headers/18/histogram.h +239 -0
- package/src/headers/{13 → 18}/inspector_agent.h +4 -7
- package/src/headers/{12 → 18}/inspector_io.h +0 -0
- package/src/headers/{13 → 18}/inspector_profiler.h +17 -5
- package/src/headers/{12 → 18}/inspector_socket.h +0 -0
- package/src/headers/{12 → 18}/inspector_socket_server.h +0 -0
- package/src/headers/18/js_native_api.h +571 -0
- package/src/headers/{13 → 18}/js_native_api_types.h +30 -7
- package/src/headers/{12 → 18}/js_native_api_v8.h +220 -83
- package/src/headers/{12 → 18}/js_native_api_v8_internals.h +6 -5
- package/src/headers/{12 → 18}/js_stream.h +0 -0
- package/src/headers/{12 → 18}/json_utils.h +0 -0
- package/src/headers/{13 → 18}/memory_tracker-inl.h +6 -5
- package/src/headers/{13 → 18}/memory_tracker.h +0 -7
- package/src/headers/{13 → 18}/module_wrap.h +24 -7
- package/src/headers/{13 → 18}/node.h +329 -68
- package/src/headers/18/node_api.h +288 -0
- package/src/headers/18/node_api_internals.h +38 -0
- package/src/headers/{12 → 18}/node_api_types.h +12 -9
- package/src/headers/{12 → 18}/node_binding.h +0 -0
- package/src/headers/18/node_blob.h +191 -0
- package/src/headers/18/node_bob-inl.h +37 -0
- package/src/headers/18/node_bob.h +111 -0
- package/src/headers/{13 → 18}/node_buffer.h +0 -0
- package/src/headers/{13 → 18}/node_constants.h +5 -1
- package/src/headers/{12 → 18}/node_context_data.h +5 -0
- package/src/headers/{12 → 18}/node_contextify.h +37 -2
- package/src/headers/{10/node_win32_perfctr_provider.h → 18/node_crypto.h} +30 -31
- package/src/headers/{12 → 18}/node_dir.h +0 -0
- package/src/headers/{12 → 18}/node_dtrace.h +0 -0
- package/src/headers/{12 → 18}/node_errors.h +90 -24
- package/src/headers/18/node_external_reference.h +145 -0
- package/src/headers/{13 → 18}/node_file-inl.h +38 -21
- package/src/headers/{12 → 18}/node_file.h +74 -13
- package/src/headers/{13 → 18}/node_http2.h +365 -269
- package/src/headers/{12 → 18}/node_http2_state.h +40 -50
- package/src/headers/{13 → 18}/node_http_common-inl.h +25 -5
- package/src/headers/{13 → 18}/node_http_common.h +24 -20
- package/src/headers/{13 → 18}/node_i18n.h +2 -1
- package/src/headers/{12 → 18}/node_internals.h +39 -41
- package/src/headers/{13 → 18}/node_main_instance.h +15 -18
- package/src/headers/{12 → 18}/node_mem-inl.h +0 -0
- package/src/headers/{12 → 18}/node_mem.h +1 -1
- package/src/headers/{13 → 18}/node_messaging.h +170 -23
- package/src/headers/{12 → 18}/node_metadata.h +17 -4
- package/src/headers/{12 → 18}/node_mutex.h +77 -1
- package/src/headers/{12 → 18}/node_native_module.h +11 -1
- package/src/headers/{13 → 18}/node_native_module_env.h +14 -8
- package/src/headers/{12 → 18}/node_object_wrap.h +0 -0
- package/src/headers/{13 → 18}/node_options-inl.h +51 -21
- package/src/headers/{13 → 18}/node_options.h +46 -14
- package/src/headers/18/node_perf.h +168 -0
- package/src/headers/{12 → 18}/node_perf_common.h +16 -22
- package/src/headers/{12 → 18}/node_platform.h +21 -16
- package/src/headers/18/node_process-inl.h +26 -0
- package/src/headers/18/node_process.h +97 -0
- package/src/headers/{13 → 18}/node_report.h +2 -2
- package/src/headers/{13 → 18}/node_revert.h +10 -0
- package/src/headers/{12 → 18}/node_root_certs.h +439 -651
- package/src/headers/18/node_snapshot_builder.h +43 -0
- package/src/headers/18/node_snapshotable.h +130 -0
- package/src/headers/{12 → 18}/node_sockaddr-inl.h +100 -4
- package/src/headers/18/node_sockaddr.h +405 -0
- package/src/headers/{12 → 18}/node_stat_watcher.h +7 -1
- package/src/headers/{12 → 18}/node_union_bytes.h +0 -0
- package/src/headers/{13 → 18}/node_url.h +18 -1
- package/src/headers/18/node_v8.h +41 -0
- package/src/headers/{12 → 18}/node_v8_platform-inl.h +10 -0
- package/src/headers/{13 → 18}/node_version.h +7 -7
- package/src/headers/{12 → 18}/node_wasi.h +0 -0
- package/src/headers/18/node_wasm_web_api.h +55 -0
- package/src/headers/{13 → 18}/node_watchdog.h +0 -0
- package/src/headers/{10 → 18}/node_win32_etw_provider-inl.h +7 -6
- package/src/headers/{10 → 18}/node_win32_etw_provider.h +0 -0
- package/src/headers/{13 → 18}/node_worker.h +24 -17
- package/src/headers/{12 → 18}/pipe_wrap.h +2 -0
- package/src/headers/{12 → 18}/req_wrap-inl.h +0 -0
- package/src/headers/{12 → 18}/req_wrap.h +1 -1
- package/src/headers/{12 → 18}/spawn_sync.h +0 -0
- package/src/headers/{13 → 18}/stream_base-inl.h +58 -22
- package/src/headers/{13 → 18}/stream_base.h +29 -3
- package/src/headers/{13 → 18}/stream_pipe.h +8 -3
- package/src/headers/{12 → 18}/stream_wrap.h +4 -1
- package/src/headers/{13 → 18}/string_bytes.h +0 -7
- package/src/headers/{12 → 18}/string_decoder-inl.h +0 -0
- package/src/headers/{10 → 18}/string_decoder.h +0 -0
- package/src/headers/{13 → 18}/string_search.h +2 -2
- package/src/headers/{12 → 18}/tcp_wrap.h +4 -0
- package/src/headers/{12 → 18}/threadpoolwork-inl.h +0 -0
- package/src/headers/18/timer_wrap-inl.h +32 -0
- package/src/headers/18/timer_wrap.h +85 -0
- package/src/headers/{13 → 18}/tracing/agent.h +1 -1
- package/src/headers/{12 → 18}/tracing/node_trace_buffer.h +0 -0
- package/src/headers/{12 → 18}/tracing/node_trace_writer.h +0 -0
- package/src/headers/{13 → 18}/tracing/trace_event.h +23 -13
- package/src/headers/{12 → 18}/tracing/trace_event_common.h +0 -0
- package/src/headers/{12 → 18}/tracing/traced_value.h +0 -0
- package/src/headers/{13 → 18}/tty_wrap.h +2 -1
- package/src/headers/{13 → 18}/udp_wrap.h +5 -0
- package/src/headers/{13 → 18}/util-inl.h +69 -15
- package/src/headers/{13 → 18}/util.h +93 -31
- package/src/headers/18/v8-fast-api-calls.h +939 -0
- package/src/headers/{12 → 18}/v8abbr.h +2 -2
- package/src/headers/10/aliased_buffer.h +0 -241
- package/src/headers/10/async_wrap-inl.h +0 -106
- package/src/headers/10/async_wrap.h +0 -218
- package/src/headers/10/base64.h +0 -197
- package/src/headers/10/base_object-inl.h +0 -132
- package/src/headers/10/base_object.h +0 -115
- package/src/headers/10/connect_wrap.h +0 -28
- package/src/headers/10/connection_wrap.h +0 -30
- package/src/headers/10/debug_utils.h +0 -128
- package/src/headers/10/env-inl.h +0 -906
- package/src/headers/10/env.h +0 -1046
- package/src/headers/10/handle_wrap.h +0 -114
- package/src/headers/10/inspector_agent.h +0 -137
- package/src/headers/10/inspector_io.h +0 -97
- package/src/headers/10/inspector_socket.h +0 -59
- package/src/headers/10/inspector_socket_server.h +0 -104
- package/src/headers/10/js_stream.h +0 -57
- package/src/headers/10/memory_tracker-inl.h +0 -318
- package/src/headers/10/memory_tracker.h +0 -246
- package/src/headers/10/module_wrap.h +0 -100
- package/src/headers/10/node.h +0 -863
- package/src/headers/10/node_api.h +0 -752
- package/src/headers/10/node_api_types.h +0 -171
- package/src/headers/10/node_buffer.h +0 -90
- package/src/headers/10/node_code_cache.h +0 -17
- package/src/headers/10/node_constants.h +0 -74
- package/src/headers/10/node_context_data.h +0 -39
- package/src/headers/10/node_contextify.h +0 -141
- package/src/headers/10/node_counters.h +0 -59
- package/src/headers/10/node_crypto.h +0 -699
- package/src/headers/10/node_crypto_bio.h +0 -177
- package/src/headers/10/node_crypto_clienthello-inl.h +0 -92
- package/src/headers/10/node_crypto_clienthello.h +0 -131
- package/src/headers/10/node_crypto_groups.h +0 -416
- package/src/headers/10/node_dtrace.h +0 -84
- package/src/headers/10/node_errors.h +0 -118
- package/src/headers/10/node_file.h +0 -373
- package/src/headers/10/node_http2.h +0 -1304
- package/src/headers/10/node_http2_state.h +0 -158
- package/src/headers/10/node_i18n.h +0 -69
- package/src/headers/10/node_internals.h +0 -952
- package/src/headers/10/node_javascript.h +0 -41
- package/src/headers/10/node_messaging.h +0 -219
- package/src/headers/10/node_mutex.h +0 -191
- package/src/headers/10/node_object_wrap.h +0 -130
- package/src/headers/10/node_options-inl.h +0 -444
- package/src/headers/10/node_options.h +0 -397
- package/src/headers/10/node_perf.h +0 -134
- package/src/headers/10/node_perf_common.h +0 -96
- package/src/headers/10/node_persistent.h +0 -30
- package/src/headers/10/node_platform.h +0 -170
- package/src/headers/10/node_revert.h +0 -75
- package/src/headers/10/node_root_certs.h +0 -3393
- package/src/headers/10/node_stat_watcher.h +0 -65
- package/src/headers/10/node_url.h +0 -193
- package/src/headers/10/node_version.h +0 -120
- package/src/headers/10/node_watchdog.h +0 -114
- package/src/headers/10/node_worker.h +0 -94
- package/src/headers/10/pipe_wrap.h +0 -76
- package/src/headers/10/req_wrap-inl.h +0 -166
- package/src/headers/10/req_wrap.h +0 -61
- package/src/headers/10/sharedarraybuffer_metadata.h +0 -67
- package/src/headers/10/spawn_sync.h +0 -240
- package/src/headers/10/stream_base-inl.h +0 -458
- package/src/headers/10/stream_base.h +0 -378
- package/src/headers/10/stream_pipe.h +0 -72
- package/src/headers/10/stream_wrap.h +0 -130
- package/src/headers/10/string_bytes.h +0 -126
- package/src/headers/10/string_decoder-inl.h +0 -38
- package/src/headers/10/string_search.h +0 -620
- package/src/headers/10/tcp_wrap.h +0 -99
- package/src/headers/10/tls_wrap.h +0 -195
- package/src/headers/10/tracing/agent.h +0 -178
- package/src/headers/10/tracing/node_trace_buffer.h +0 -83
- package/src/headers/10/tracing/node_trace_writer.h +0 -75
- package/src/headers/10/tracing/trace_event.h +0 -706
- package/src/headers/10/tracing/trace_event_common.h +0 -1102
- package/src/headers/10/tracing/traced_value.h +0 -68
- package/src/headers/10/tty_wrap.h +0 -63
- package/src/headers/10/udp_wrap.h +0 -102
- package/src/headers/10/util-inl.h +0 -459
- package/src/headers/10/util.h +0 -508
- package/src/headers/10/v8abbr.h +0 -121
- package/src/headers/12/aliased_buffer.h +0 -263
- package/src/headers/12/debug_utils.h +0 -181
- package/src/headers/12/histogram-inl.h +0 -83
- package/src/headers/12/histogram.h +0 -98
- package/src/headers/12/http_parser_adaptor.h +0 -24
- package/src/headers/12/inspector_agent.h +0 -147
- package/src/headers/12/inspector_profiler.h +0 -137
- package/src/headers/12/js_native_api.h +0 -541
- package/src/headers/12/js_native_api_types.h +0 -139
- package/src/headers/12/memory_tracker-inl.h +0 -339
- package/src/headers/12/memory_tracker.h +0 -283
- package/src/headers/12/module_wrap.h +0 -99
- package/src/headers/12/node.h +0 -887
- package/src/headers/12/node_api.h +0 -239
- package/src/headers/12/node_buffer.h +0 -92
- package/src/headers/12/node_constants.h +0 -80
- package/src/headers/12/node_crypto.h +0 -800
- package/src/headers/12/node_crypto_bio.h +0 -195
- package/src/headers/12/node_crypto_clienthello-inl.h +0 -91
- package/src/headers/12/node_crypto_clienthello.h +0 -132
- package/src/headers/12/node_file-inl.h +0 -289
- package/src/headers/12/node_http2.h +0 -1311
- package/src/headers/12/node_http_parser_impl.h +0 -994
- package/src/headers/12/node_i18n.h +0 -144
- package/src/headers/12/node_main_instance.h +0 -97
- package/src/headers/12/node_messaging.h +0 -227
- package/src/headers/12/node_native_module_env.h +0 -65
- package/src/headers/12/node_options-inl.h +0 -447
- package/src/headers/12/node_options.h +0 -479
- package/src/headers/12/node_perf.h +0 -181
- package/src/headers/12/node_process.h +0 -41
- package/src/headers/12/node_report.h +0 -47
- package/src/headers/12/node_revert.h +0 -78
- package/src/headers/12/node_sockaddr.h +0 -123
- package/src/headers/12/node_url.h +0 -188
- package/src/headers/12/node_version.h +0 -98
- package/src/headers/12/node_watchdog.h +0 -152
- package/src/headers/12/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/12/node_win32_etw_provider.h +0 -99
- package/src/headers/12/node_worker.h +0 -142
- package/src/headers/12/sharedarraybuffer_metadata.h +0 -72
- package/src/headers/12/stream_base-inl.h +0 -323
- package/src/headers/12/stream_base.h +0 -431
- package/src/headers/12/stream_pipe.h +0 -72
- package/src/headers/12/string_bytes.h +0 -142
- package/src/headers/12/string_decoder.h +0 -50
- package/src/headers/12/string_search.h +0 -638
- package/src/headers/12/tls_wrap.h +0 -221
- package/src/headers/12/tracing/agent.h +0 -195
- package/src/headers/12/tracing/trace_event.h +0 -710
- package/src/headers/12/tty_wrap.h +0 -64
- package/src/headers/12/udp_wrap.h +0 -222
- package/src/headers/12/util-inl.h +0 -529
- package/src/headers/12/util.h +0 -765
- package/src/headers/13/async_wrap-inl.h +0 -94
- package/src/headers/13/async_wrap.h +0 -224
- package/src/headers/13/base64.h +0 -197
- package/src/headers/13/base_object-inl.h +0 -353
- package/src/headers/13/base_object.h +0 -229
- package/src/headers/13/connect_wrap.h +0 -26
- package/src/headers/13/connection_wrap.h +0 -30
- package/src/headers/13/debug_utils-inl.h +0 -223
- package/src/headers/13/diagnosticfilename-inl.h +0 -33
- package/src/headers/13/env-inl.h +0 -1293
- package/src/headers/13/env.h +0 -1469
- package/src/headers/13/handle_wrap.h +0 -117
- package/src/headers/13/histogram-inl.h +0 -83
- package/src/headers/13/histogram.h +0 -98
- package/src/headers/13/inspector_io.h +0 -78
- package/src/headers/13/inspector_socket.h +0 -60
- package/src/headers/13/inspector_socket_server.h +0 -110
- package/src/headers/13/js_native_api.h +0 -541
- package/src/headers/13/js_native_api_v8.h +0 -303
- package/src/headers/13/js_native_api_v8_internals.h +0 -38
- package/src/headers/13/js_stream.h +0 -52
- package/src/headers/13/json_utils.h +0 -160
- package/src/headers/13/node_api.h +0 -239
- package/src/headers/13/node_api_types.h +0 -44
- package/src/headers/13/node_binding.h +0 -99
- package/src/headers/13/node_context_data.h +0 -39
- package/src/headers/13/node_contextify.h +0 -161
- package/src/headers/13/node_crypto.h +0 -800
- package/src/headers/13/node_crypto_common.h +0 -138
- package/src/headers/13/node_crypto_groups.h +0 -415
- package/src/headers/13/node_dir.h +0 -52
- package/src/headers/13/node_dtrace.h +0 -86
- package/src/headers/13/node_errors.h +0 -210
- package/src/headers/13/node_file.h +0 -364
- package/src/headers/13/node_http2_state.h +0 -144
- package/src/headers/13/node_internals.h +0 -405
- package/src/headers/13/node_mem-inl.h +0 -112
- package/src/headers/13/node_mem.h +0 -41
- package/src/headers/13/node_metadata.h +0 -109
- package/src/headers/13/node_mutex.h +0 -247
- package/src/headers/13/node_native_module.h +0 -99
- package/src/headers/13/node_object_wrap.h +0 -132
- package/src/headers/13/node_perf.h +0 -181
- package/src/headers/13/node_perf_common.h +0 -97
- package/src/headers/13/node_platform.h +0 -190
- package/src/headers/13/node_process.h +0 -41
- package/src/headers/13/node_root_certs.h +0 -3424
- package/src/headers/13/node_sockaddr-inl.h +0 -170
- package/src/headers/13/node_sockaddr.h +0 -123
- package/src/headers/13/node_stat_watcher.h +0 -66
- package/src/headers/13/node_union_bytes.h +0 -103
- package/src/headers/13/node_v8_platform-inl.h +0 -184
- package/src/headers/13/node_wasi.h +0 -108
- package/src/headers/13/node_win32_etw_provider-inl.h +0 -287
- package/src/headers/13/node_win32_etw_provider.h +0 -99
- package/src/headers/13/pipe_wrap.h +0 -78
- package/src/headers/13/req_wrap-inl.h +0 -170
- package/src/headers/13/req_wrap.h +0 -77
- package/src/headers/13/spawn_sync.h +0 -242
- package/src/headers/13/stream_wrap.h +0 -130
- package/src/headers/13/string_decoder-inl.h +0 -37
- package/src/headers/13/string_decoder.h +0 -50
- package/src/headers/13/tcp_wrap.h +0 -101
- package/src/headers/13/threadpoolwork-inl.h +0 -57
- package/src/headers/13/tracing/node_trace_buffer.h +0 -83
- package/src/headers/13/tracing/node_trace_writer.h +0 -75
- package/src/headers/13/tracing/trace_event_common.h +0 -1109
- package/src/headers/13/tracing/traced_value.h +0 -70
- package/src/headers/13/v8abbr.h +0 -124
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
package/src/Addon.h
CHANGED
|
@@ -32,8 +32,13 @@
|
|
|
32
32
|
#include "headers/16/base_object-inl.h"
|
|
33
33
|
#endif
|
|
34
34
|
|
|
35
|
+
#if NODE_MAJOR_VERSION==18
|
|
36
|
+
#include "headers/18/crypto/crypto_tls.h"
|
|
37
|
+
#include "headers/18/base_object-inl.h"
|
|
38
|
+
#endif
|
|
39
|
+
|
|
35
40
|
using BaseObject = node::BaseObject;
|
|
36
|
-
#if NODE_MAJOR_VERSION==16
|
|
41
|
+
#if NODE_MAJOR_VERSION==16 || NODE_MAJOR_VERSION==18
|
|
37
42
|
using TLSWrap = node::crypto::TLSWrap;
|
|
38
43
|
#else
|
|
39
44
|
using TLSWrap = node::TLSWrap;
|
|
@@ -125,14 +130,26 @@ class NativeString {
|
|
|
125
130
|
} else if (value->IsTypedArray()) {
|
|
126
131
|
Local<ArrayBufferView> arrayBufferView =
|
|
127
132
|
Local<ArrayBufferView>::Cast(value);
|
|
133
|
+
#if NODE_MAJOR_VERSION == 18
|
|
134
|
+
std::shared_ptr<v8::BackingStore> contents = arrayBufferView->Buffer()->GetBackingStore();
|
|
135
|
+
length = arrayBufferView->ByteLength();
|
|
136
|
+
data = (char *)contents->Data();
|
|
137
|
+
#else
|
|
128
138
|
ArrayBuffer::Contents contents = arrayBufferView->Buffer()->GetContents();
|
|
129
139
|
length = contents.ByteLength();
|
|
130
140
|
data = (char *)contents.Data();
|
|
141
|
+
#endif
|
|
131
142
|
} else if (value->IsArrayBuffer()) {
|
|
132
143
|
Local<ArrayBuffer> arrayBuffer = Local<ArrayBuffer>::Cast(value);
|
|
144
|
+
#if NODE_MAJOR_VERSION == 18
|
|
145
|
+
std::shared_ptr<v8::BackingStore> contents = arrayBuffer->GetBackingStore();
|
|
146
|
+
length = arrayBuffer->ByteLength();
|
|
147
|
+
data = (char *)contents->Data();
|
|
148
|
+
#else
|
|
133
149
|
ArrayBuffer::Contents contents = arrayBuffer->GetContents();
|
|
134
150
|
length = contents.ByteLength();
|
|
135
151
|
data = (char *)contents.Data();
|
|
152
|
+
#endif
|
|
136
153
|
} else {
|
|
137
154
|
static char empty[] = "";
|
|
138
155
|
data = empty;
|
|
@@ -187,7 +204,12 @@ inline Local<Value> wrapMessage(const char *message, size_t length,
|
|
|
187
204
|
cWS::OpCode opCode, Isolate *isolate) {
|
|
188
205
|
|
|
189
206
|
if (opCode == cWS::OpCode::BINARY) {
|
|
190
|
-
return (Local<Value>)ArrayBuffer::New(isolate, (char *)message, length);
|
|
207
|
+
// return (Local<Value>)ArrayBuffer::New(isolate, (char *)message, length);
|
|
208
|
+
std::unique_ptr<v8::BackingStore> backing = v8::ArrayBuffer::NewBackingStore((char*)message,
|
|
209
|
+
length,
|
|
210
|
+
[](void*, size_t, void*){},
|
|
211
|
+
nullptr);
|
|
212
|
+
return (Local<Value>)v8::ArrayBuffer::New(isolate, std::move(backing));
|
|
191
213
|
}
|
|
192
214
|
|
|
193
215
|
#if NODE_MAJOR_VERSION >= 13
|
package/src/HTTPSocket.cpp
CHANGED
|
@@ -247,7 +247,7 @@ void HttpSocket<isServer>::upgrade(const char *secKey, const char *extensions, s
|
|
|
247
247
|
memcpy(upgradeBuffer + upgradeResponseLength + 24 + subprotocolLength, "\r\n", 2);
|
|
248
248
|
upgradeResponseLength += 24 + subprotocolLength + 2;
|
|
249
249
|
}
|
|
250
|
-
static char stamp[] = "Sec-WebSocket-Version: 13\r\
|
|
250
|
+
static char stamp[] = "Sec-WebSocket-Version: 13\r\n\r\n";
|
|
251
251
|
memcpy(upgradeBuffer + upgradeResponseLength, stamp, sizeof(stamp) - 1);
|
|
252
252
|
upgradeResponseLength += sizeof(stamp) - 1;
|
|
253
253
|
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
namespace node {
|
|
11
11
|
|
|
12
|
+
typedef size_t AliasedBufferIndex;
|
|
13
|
+
|
|
12
14
|
/**
|
|
13
15
|
* Do not use this class directly when creating instances of it - use the
|
|
14
16
|
* Aliased*Array defined at the end of this file instead.
|
|
@@ -32,9 +34,15 @@ template <class NativeT,
|
|
|
32
34
|
typename = std::enable_if_t<std::is_scalar<NativeT>::value>>
|
|
33
35
|
class AliasedBufferBase {
|
|
34
36
|
public:
|
|
35
|
-
AliasedBufferBase(v8::Isolate* isolate,
|
|
36
|
-
|
|
37
|
+
AliasedBufferBase(v8::Isolate* isolate,
|
|
38
|
+
const size_t count,
|
|
39
|
+
const AliasedBufferIndex* index = nullptr)
|
|
40
|
+
: isolate_(isolate), count_(count), byte_offset_(0), index_(index) {
|
|
37
41
|
CHECK_GT(count, 0);
|
|
42
|
+
if (index != nullptr) {
|
|
43
|
+
// Will be deserialized later.
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
38
46
|
const v8::HandleScope handle_scope(isolate_);
|
|
39
47
|
const size_t size_in_bytes =
|
|
40
48
|
MultiplyWithOverflowCheck(sizeof(NativeT), count);
|
|
@@ -62,10 +70,17 @@ class AliasedBufferBase {
|
|
|
62
70
|
v8::Isolate* isolate,
|
|
63
71
|
const size_t byte_offset,
|
|
64
72
|
const size_t count,
|
|
65
|
-
const AliasedBufferBase<uint8_t, v8::Uint8Array>& backing_buffer
|
|
66
|
-
|
|
73
|
+
const AliasedBufferBase<uint8_t, v8::Uint8Array>& backing_buffer,
|
|
74
|
+
const AliasedBufferIndex* index = nullptr)
|
|
75
|
+
: isolate_(isolate),
|
|
76
|
+
count_(count),
|
|
77
|
+
byte_offset_(byte_offset),
|
|
78
|
+
index_(index) {
|
|
79
|
+
if (index != nullptr) {
|
|
80
|
+
// Will be deserialized later.
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
67
83
|
const v8::HandleScope handle_scope(isolate_);
|
|
68
|
-
|
|
69
84
|
v8::Local<v8::ArrayBuffer> ab = backing_buffer.GetArrayBuffer();
|
|
70
85
|
|
|
71
86
|
// validate that the byte_offset is aligned with sizeof(NativeT)
|
|
@@ -86,10 +101,33 @@ class AliasedBufferBase {
|
|
|
86
101
|
count_(that.count_),
|
|
87
102
|
byte_offset_(that.byte_offset_),
|
|
88
103
|
buffer_(that.buffer_) {
|
|
104
|
+
DCHECK_NULL(index_);
|
|
89
105
|
js_array_ = v8::Global<V8T>(that.isolate_, that.GetJSArray());
|
|
90
106
|
}
|
|
91
107
|
|
|
108
|
+
AliasedBufferIndex Serialize(v8::Local<v8::Context> context,
|
|
109
|
+
v8::SnapshotCreator* creator) {
|
|
110
|
+
DCHECK_NULL(index_);
|
|
111
|
+
return creator->AddData(context, GetJSArray());
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
inline void Deserialize(v8::Local<v8::Context> context) {
|
|
115
|
+
DCHECK_NOT_NULL(index_);
|
|
116
|
+
v8::Local<V8T> arr =
|
|
117
|
+
context->GetDataFromSnapshotOnce<V8T>(*index_).ToLocalChecked();
|
|
118
|
+
// These may not hold true for AliasedBuffers that have grown, so should
|
|
119
|
+
// be removed when we expand the snapshot support.
|
|
120
|
+
DCHECK_EQ(count_, arr->Length());
|
|
121
|
+
DCHECK_EQ(byte_offset_, arr->ByteOffset());
|
|
122
|
+
uint8_t* raw =
|
|
123
|
+
static_cast<uint8_t*>(arr->Buffer()->GetBackingStore()->Data());
|
|
124
|
+
buffer_ = reinterpret_cast<NativeT*>(raw + byte_offset_);
|
|
125
|
+
js_array_.Reset(isolate_, arr);
|
|
126
|
+
index_ = nullptr;
|
|
127
|
+
}
|
|
128
|
+
|
|
92
129
|
AliasedBufferBase& operator=(AliasedBufferBase&& that) noexcept {
|
|
130
|
+
DCHECK_NULL(index_);
|
|
93
131
|
this->~AliasedBufferBase();
|
|
94
132
|
isolate_ = that.isolate_;
|
|
95
133
|
count_ = that.count_;
|
|
@@ -155,9 +193,15 @@ class AliasedBufferBase {
|
|
|
155
193
|
* Get the underlying v8 TypedArray overlayed on top of the native buffer
|
|
156
194
|
*/
|
|
157
195
|
v8::Local<V8T> GetJSArray() const {
|
|
196
|
+
DCHECK_NULL(index_);
|
|
158
197
|
return js_array_.Get(isolate_);
|
|
159
198
|
}
|
|
160
199
|
|
|
200
|
+
void Release() {
|
|
201
|
+
DCHECK_NULL(index_);
|
|
202
|
+
js_array_.Reset();
|
|
203
|
+
}
|
|
204
|
+
|
|
161
205
|
/**
|
|
162
206
|
* Get the underlying v8::ArrayBuffer underlying the TypedArray and
|
|
163
207
|
* overlaying the native buffer
|
|
@@ -171,6 +215,7 @@ class AliasedBufferBase {
|
|
|
171
215
|
* through the GetValue/SetValue/operator[] methods
|
|
172
216
|
*/
|
|
173
217
|
inline const NativeT* GetNativeBuffer() const {
|
|
218
|
+
DCHECK_NULL(index_);
|
|
174
219
|
return buffer_;
|
|
175
220
|
}
|
|
176
221
|
|
|
@@ -186,6 +231,7 @@ class AliasedBufferBase {
|
|
|
186
231
|
*/
|
|
187
232
|
inline void SetValue(const size_t index, NativeT value) {
|
|
188
233
|
DCHECK_LT(index, count_);
|
|
234
|
+
DCHECK_NULL(index_);
|
|
189
235
|
buffer_[index] = value;
|
|
190
236
|
}
|
|
191
237
|
|
|
@@ -193,6 +239,7 @@ class AliasedBufferBase {
|
|
|
193
239
|
* Get value at position index
|
|
194
240
|
*/
|
|
195
241
|
inline const NativeT GetValue(const size_t index) const {
|
|
242
|
+
DCHECK_NULL(index_);
|
|
196
243
|
DCHECK_LT(index, count_);
|
|
197
244
|
return buffer_[index];
|
|
198
245
|
}
|
|
@@ -201,6 +248,7 @@ class AliasedBufferBase {
|
|
|
201
248
|
* Effectively, a synonym for GetValue/SetValue
|
|
202
249
|
*/
|
|
203
250
|
Reference operator[](size_t index) {
|
|
251
|
+
DCHECK_NULL(index_);
|
|
204
252
|
return Reference(this, index);
|
|
205
253
|
}
|
|
206
254
|
|
|
@@ -216,6 +264,7 @@ class AliasedBufferBase {
|
|
|
216
264
|
// Should only be used on an owning array, not one created as a sub array of
|
|
217
265
|
// an owning `AliasedBufferBase`.
|
|
218
266
|
void reserve(size_t new_capacity) {
|
|
267
|
+
DCHECK_NULL(index_);
|
|
219
268
|
DCHECK_GE(new_capacity, count_);
|
|
220
269
|
DCHECK_EQ(byte_offset_, 0);
|
|
221
270
|
const v8::HandleScope handle_scope(isolate_);
|
|
@@ -244,11 +293,14 @@ class AliasedBufferBase {
|
|
|
244
293
|
}
|
|
245
294
|
|
|
246
295
|
private:
|
|
247
|
-
v8::Isolate* isolate_;
|
|
248
|
-
size_t count_;
|
|
249
|
-
size_t byte_offset_;
|
|
250
|
-
NativeT* buffer_;
|
|
296
|
+
v8::Isolate* isolate_ = nullptr;
|
|
297
|
+
size_t count_ = 0;
|
|
298
|
+
size_t byte_offset_ = 0;
|
|
299
|
+
NativeT* buffer_ = nullptr;
|
|
251
300
|
v8::Global<V8T> js_array_;
|
|
301
|
+
|
|
302
|
+
// Deserialize data
|
|
303
|
+
const AliasedBufferIndex* index_ = nullptr;
|
|
252
304
|
};
|
|
253
305
|
|
|
254
306
|
typedef AliasedBufferBase<int32_t, v8::Int32Array> AliasedInt32Array;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#ifndef SRC_ALIASED_STRUCT_INL_H_
|
|
2
|
+
#define SRC_ALIASED_STRUCT_INL_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "aliased_struct.h"
|
|
7
|
+
#include "v8.h"
|
|
8
|
+
#include <memory>
|
|
9
|
+
|
|
10
|
+
namespace node {
|
|
11
|
+
|
|
12
|
+
template <typename T>
|
|
13
|
+
template <typename... Args>
|
|
14
|
+
AliasedStruct<T>::AliasedStruct(v8::Isolate* isolate, Args&&... args)
|
|
15
|
+
: isolate_(isolate) {
|
|
16
|
+
const v8::HandleScope handle_scope(isolate);
|
|
17
|
+
|
|
18
|
+
store_ = v8::ArrayBuffer::NewBackingStore(isolate, sizeof(T));
|
|
19
|
+
ptr_ = new (store_->Data()) T(std::forward<Args>(args)...);
|
|
20
|
+
DCHECK_NOT_NULL(ptr_);
|
|
21
|
+
|
|
22
|
+
v8::Local<v8::ArrayBuffer> buffer = v8::ArrayBuffer::New(isolate, store_);
|
|
23
|
+
buffer_ = v8::Global<v8::ArrayBuffer>(isolate, buffer);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
template <typename T>
|
|
27
|
+
AliasedStruct<T>::AliasedStruct(const AliasedStruct& that)
|
|
28
|
+
: AliasedStruct(that.isolate_, *that) {}
|
|
29
|
+
|
|
30
|
+
template <typename T>
|
|
31
|
+
AliasedStruct<T>& AliasedStruct<T>::operator=(
|
|
32
|
+
AliasedStruct<T>&& that) noexcept {
|
|
33
|
+
this->~AliasedStruct();
|
|
34
|
+
isolate_ = that.isolate_;
|
|
35
|
+
store_ = that.store_;
|
|
36
|
+
ptr_ = that.ptr_;
|
|
37
|
+
|
|
38
|
+
buffer_ = std::move(that.buffer_);
|
|
39
|
+
|
|
40
|
+
that.ptr_ = nullptr;
|
|
41
|
+
that.store_.reset();
|
|
42
|
+
return *this;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
template <typename T>
|
|
46
|
+
AliasedStruct<T>::~AliasedStruct() {
|
|
47
|
+
if (ptr_ != nullptr) ptr_->~T();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
} // namespace node
|
|
51
|
+
|
|
52
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
53
|
+
|
|
54
|
+
#endif // SRC_ALIASED_STRUCT_INL_H_
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#ifndef SRC_ALIASED_STRUCT_H_
|
|
2
|
+
#define SRC_ALIASED_STRUCT_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "node_internals.h"
|
|
7
|
+
#include "v8.h"
|
|
8
|
+
#include <memory>
|
|
9
|
+
|
|
10
|
+
namespace node {
|
|
11
|
+
|
|
12
|
+
// AliasedStruct is a utility that allows uses a V8 Backing Store
|
|
13
|
+
// to be exposed to the C++/C side as a struct and to the
|
|
14
|
+
// JavaScript side as an ArrayBuffer to efficiently share
|
|
15
|
+
// data without marshalling. It is similar in nature to
|
|
16
|
+
// AliasedBuffer.
|
|
17
|
+
//
|
|
18
|
+
// struct Foo { int x; }
|
|
19
|
+
//
|
|
20
|
+
// AliasedStruct<Foo> foo;
|
|
21
|
+
// foo->x = 1;
|
|
22
|
+
//
|
|
23
|
+
// Local<ArrayBuffer> ab = foo.GetArrayBuffer();
|
|
24
|
+
template <typename T>
|
|
25
|
+
class AliasedStruct final {
|
|
26
|
+
public:
|
|
27
|
+
template <typename... Args>
|
|
28
|
+
explicit AliasedStruct(v8::Isolate* isolate, Args&&... args);
|
|
29
|
+
|
|
30
|
+
inline AliasedStruct(const AliasedStruct& that);
|
|
31
|
+
|
|
32
|
+
inline ~AliasedStruct();
|
|
33
|
+
|
|
34
|
+
inline AliasedStruct& operator=(AliasedStruct&& that) noexcept;
|
|
35
|
+
|
|
36
|
+
v8::Local<v8::ArrayBuffer> GetArrayBuffer() const {
|
|
37
|
+
return buffer_.Get(isolate_);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const T* Data() const { return ptr_; }
|
|
41
|
+
|
|
42
|
+
T* Data() { return ptr_; }
|
|
43
|
+
|
|
44
|
+
const T& operator*() const { return *ptr_; }
|
|
45
|
+
|
|
46
|
+
T& operator*() { return *ptr_; }
|
|
47
|
+
|
|
48
|
+
const T* operator->() const { return ptr_; }
|
|
49
|
+
|
|
50
|
+
T* operator->() { return ptr_; }
|
|
51
|
+
|
|
52
|
+
private:
|
|
53
|
+
v8::Isolate* isolate_;
|
|
54
|
+
std::shared_ptr<v8::BackingStore> store_;
|
|
55
|
+
T* ptr_;
|
|
56
|
+
v8::Global<v8::ArrayBuffer> buffer_;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
} // namespace node
|
|
60
|
+
|
|
61
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
62
|
+
|
|
63
|
+
#endif // SRC_ALIASED_STRUCT_H_
|
|
File without changes
|
|
@@ -38,6 +38,7 @@ namespace node {
|
|
|
38
38
|
V(ELDHISTOGRAM) \
|
|
39
39
|
V(FILEHANDLE) \
|
|
40
40
|
V(FILEHANDLECLOSEREQ) \
|
|
41
|
+
V(FIXEDSIZEBLOBCOPY) \
|
|
41
42
|
V(FSEVENTWRAP) \
|
|
42
43
|
V(FSREQCALLBACK) \
|
|
43
44
|
V(FSREQPROMISE) \
|
|
@@ -51,6 +52,7 @@ namespace node {
|
|
|
51
52
|
V(HTTPINCOMINGMESSAGE) \
|
|
52
53
|
V(HTTPCLIENTREQUEST) \
|
|
53
54
|
V(JSSTREAM) \
|
|
55
|
+
V(JSUDPWRAP) \
|
|
54
56
|
V(MESSAGEPORT) \
|
|
55
57
|
V(PIPECONNECTWRAP) \
|
|
56
58
|
V(PIPESERVERWRAP) \
|
|
@@ -76,11 +78,20 @@ namespace node {
|
|
|
76
78
|
|
|
77
79
|
#if HAVE_OPENSSL
|
|
78
80
|
#define NODE_ASYNC_CRYPTO_PROVIDER_TYPES(V) \
|
|
81
|
+
V(CHECKPRIMEREQUEST) \
|
|
79
82
|
V(PBKDF2REQUEST) \
|
|
80
83
|
V(KEYPAIRGENREQUEST) \
|
|
84
|
+
V(KEYGENREQUEST) \
|
|
85
|
+
V(KEYEXPORTREQUEST) \
|
|
86
|
+
V(CIPHERREQUEST) \
|
|
87
|
+
V(DERIVEBITSREQUEST) \
|
|
88
|
+
V(HASHREQUEST) \
|
|
81
89
|
V(RANDOMBYTESREQUEST) \
|
|
90
|
+
V(RANDOMPRIMEREQUEST) \
|
|
82
91
|
V(SCRYPTREQUEST) \
|
|
83
|
-
V(
|
|
92
|
+
V(SIGNREQUEST) \
|
|
93
|
+
V(TLSWRAP) \
|
|
94
|
+
V(VERIFYREQUEST)
|
|
84
95
|
#else
|
|
85
96
|
#define NODE_ASYNC_CRYPTO_PROVIDER_TYPES(V)
|
|
86
97
|
#endif // HAVE_OPENSSL
|
|
@@ -99,6 +110,7 @@ namespace node {
|
|
|
99
110
|
|
|
100
111
|
class Environment;
|
|
101
112
|
class DestroyParam;
|
|
113
|
+
class ExternalReferenceRegistry;
|
|
102
114
|
|
|
103
115
|
class AsyncWrap : public BaseObject {
|
|
104
116
|
public:
|
|
@@ -128,6 +140,7 @@ class AsyncWrap : public BaseObject {
|
|
|
128
140
|
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
|
|
129
141
|
Environment* env);
|
|
130
142
|
|
|
143
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
131
144
|
static void Initialize(v8::Local<v8::Object> target,
|
|
132
145
|
v8::Local<v8::Value> unused,
|
|
133
146
|
v8::Local<v8::Context> context,
|
|
@@ -136,10 +149,16 @@ class AsyncWrap : public BaseObject {
|
|
|
136
149
|
static void GetAsyncId(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
137
150
|
static void PushAsyncContext(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
138
151
|
static void PopAsyncContext(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
152
|
+
static void ExecutionAsyncResource(
|
|
153
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
154
|
+
static void ClearAsyncIdStack(
|
|
155
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
139
156
|
static void AsyncReset(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
140
157
|
static void GetProviderType(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
141
158
|
static void QueueDestroyAsyncId(
|
|
142
159
|
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
160
|
+
static void SetCallbackTrampoline(
|
|
161
|
+
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
143
162
|
|
|
144
163
|
static void EmitAsyncInit(Environment* env,
|
|
145
164
|
v8::Local<v8::Object> object,
|
|
@@ -208,11 +227,16 @@ class AsyncWrap : public BaseObject {
|
|
|
208
227
|
ProviderType provider,
|
|
209
228
|
double execution_async_id,
|
|
210
229
|
bool silent);
|
|
230
|
+
AsyncWrap(Environment* env,
|
|
231
|
+
v8::Local<v8::Object> promise,
|
|
232
|
+
ProviderType provider,
|
|
233
|
+
double execution_async_id,
|
|
234
|
+
double trigger_async_id);
|
|
211
235
|
ProviderType provider_type_ = PROVIDER_NONE;
|
|
212
236
|
bool init_hook_ran_ = false;
|
|
213
237
|
// Because the values may be Reset(), cannot be made const.
|
|
214
238
|
double async_id_ = kInvalidAsyncId;
|
|
215
|
-
double trigger_async_id_;
|
|
239
|
+
double trigger_async_id_ = kInvalidAsyncId;
|
|
216
240
|
};
|
|
217
241
|
|
|
218
242
|
} // namespace node
|