@encharm/cws 4.5.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.
Files changed (237) hide show
  1. package/binding.gyp +1 -1
  2. package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
  3. package/dist/bindings/cws_linux_x64_node137.node +0 -0
  4. package/package.json +1 -1
  5. package/src/Addon.h +6 -1
  6. package/src/headers/24/acorn_version.h +6 -0
  7. package/src/headers/24/addon_permission.h +31 -0
  8. package/src/headers/24/agent.h +195 -0
  9. package/src/headers/24/aliased_buffer-inl.h +244 -0
  10. package/src/headers/24/aliased_buffer.h +206 -0
  11. package/src/headers/24/aliased_struct-inl.h +54 -0
  12. package/src/headers/24/aliased_struct.h +63 -0
  13. package/src/headers/24/amaro_version.h +6 -0
  14. package/src/headers/24/application.h +165 -0
  15. package/src/headers/24/async_context_frame.h +33 -0
  16. package/src/headers/24/async_wrap-inl.h +96 -0
  17. package/src/headers/24/async_wrap.h +244 -0
  18. package/src/headers/24/base_object-inl.h +330 -0
  19. package/src/headers/24/base_object.h +338 -0
  20. package/src/headers/24/base_object_types.h +74 -0
  21. package/src/headers/24/bindingdata.h +272 -0
  22. package/src/headers/24/blob_serializer_deserializer-inl.h +385 -0
  23. package/src/headers/24/blob_serializer_deserializer.h +132 -0
  24. package/src/headers/24/callback_queue-inl.h +97 -0
  25. package/src/headers/24/callback_queue.h +79 -0
  26. package/src/headers/24/cares_wrap.h +447 -0
  27. package/src/headers/24/child_process_permission.h +31 -0
  28. package/src/headers/24/cid.h +127 -0
  29. package/src/headers/24/cjs_module_lexer_version.h +6 -0
  30. package/src/headers/24/cleanup_queue-inl.h +36 -0
  31. package/src/headers/24/cleanup_queue.h +79 -0
  32. package/src/headers/24/compile_cache.h +113 -0
  33. package/src/headers/24/connect_wrap.h +26 -0
  34. package/src/headers/24/connection_wrap.h +30 -0
  35. package/src/headers/24/cppgc_helpers-inl.h +65 -0
  36. package/src/headers/24/cppgc_helpers.h +162 -0
  37. package/src/headers/24/crypto/crypto_aes.h +97 -0
  38. package/src/headers/24/crypto/crypto_argon2.h +86 -0
  39. package/src/headers/24/crypto/crypto_bio.h +193 -0
  40. package/src/headers/24/crypto/crypto_chacha20_poly1305.h +64 -0
  41. package/src/headers/24/crypto/crypto_cipher.h +281 -0
  42. package/src/headers/24/crypto/crypto_clienthello-inl.h +90 -0
  43. package/src/headers/24/crypto/crypto_clienthello.h +131 -0
  44. package/src/headers/24/crypto/crypto_common.h +48 -0
  45. package/src/headers/24/crypto/crypto_context.h +171 -0
  46. package/src/headers/24/crypto/crypto_dh.h +126 -0
  47. package/src/headers/24/crypto/crypto_dsa.h +50 -0
  48. package/src/headers/24/crypto/crypto_ec.h +163 -0
  49. package/src/headers/24/crypto/crypto_hash.h +89 -0
  50. package/src/headers/24/crypto/crypto_hkdf.h +61 -0
  51. package/src/headers/24/crypto/crypto_hmac.h +92 -0
  52. package/src/headers/24/crypto/crypto_kem.h +113 -0
  53. package/src/headers/24/crypto/crypto_keygen.h +290 -0
  54. package/src/headers/24/crypto/crypto_keys.h +392 -0
  55. package/src/headers/24/crypto/crypto_ml_dsa.h +21 -0
  56. package/src/headers/24/crypto/crypto_pbkdf2.h +74 -0
  57. package/src/headers/24/crypto/crypto_random.h +124 -0
  58. package/src/headers/24/crypto/crypto_rsa.h +136 -0
  59. package/src/headers/24/crypto/crypto_scrypt.h +85 -0
  60. package/src/headers/24/crypto/crypto_sig.h +156 -0
  61. package/src/headers/24/crypto/crypto_spkac.h +21 -0
  62. package/src/headers/24/crypto/crypto_timing.h +20 -0
  63. package/src/headers/24/crypto/crypto_tls.h +309 -0
  64. package/src/headers/24/crypto/crypto_util.h +598 -0
  65. package/src/headers/24/crypto/crypto_x509.h +140 -0
  66. package/src/headers/24/data.h +148 -0
  67. package/src/headers/24/debug_utils-inl.h +232 -0
  68. package/src/headers/24/debug_utils.h +193 -0
  69. package/src/headers/24/defs.h +254 -0
  70. package/src/headers/24/diagnosticfilename-inl.h +33 -0
  71. package/src/headers/24/embedded_data.h +17 -0
  72. package/src/headers/24/encoding_binding.h +60 -0
  73. package/src/headers/24/endpoint.h +421 -0
  74. package/src/headers/24/env-inl.h +935 -0
  75. package/src/headers/24/env.h +1257 -0
  76. package/src/headers/24/env_properties.h +561 -0
  77. package/src/headers/24/fs_permission.h +167 -0
  78. package/src/headers/24/handle_wrap.h +123 -0
  79. package/src/headers/24/histogram-inl.h +107 -0
  80. package/src/headers/24/histogram.h +279 -0
  81. package/src/headers/24/http3.h +44 -0
  82. package/src/headers/24/inspector_agent.h +165 -0
  83. package/src/headers/24/inspector_io.h +78 -0
  84. package/src/headers/24/inspector_permission.h +31 -0
  85. package/src/headers/24/inspector_profiler.h +149 -0
  86. package/src/headers/24/inspector_socket.h +60 -0
  87. package/src/headers/24/inspector_socket_server.h +110 -0
  88. package/src/headers/24/io_agent.h +30 -0
  89. package/src/headers/24/js_native_api.h +615 -0
  90. package/src/headers/24/js_native_api_types.h +211 -0
  91. package/src/headers/24/js_native_api_v8.h +485 -0
  92. package/src/headers/24/js_native_api_v8_internals.h +45 -0
  93. package/src/headers/24/js_stream.h +52 -0
  94. package/src/headers/24/json_parser.h +40 -0
  95. package/src/headers/24/json_utils.h +172 -0
  96. package/src/headers/24/logstream.h +81 -0
  97. package/src/headers/24/main_thread_interface.h +116 -0
  98. package/src/headers/24/memory_tracker-inl.h +454 -0
  99. package/src/headers/24/memory_tracker.h +333 -0
  100. package/src/headers/24/module_wrap.h +229 -0
  101. package/src/headers/24/ncrypto.h +1625 -0
  102. package/src/headers/24/network_agent.h +118 -0
  103. package/src/headers/24/network_inspector.h +45 -0
  104. package/src/headers/24/network_resource_manager.h +29 -0
  105. package/src/headers/24/node.h +1620 -0
  106. package/src/headers/24/node_api.h +269 -0
  107. package/src/headers/24/node_api_internals.h +46 -0
  108. package/src/headers/24/node_api_types.h +52 -0
  109. package/src/headers/24/node_binding.h +163 -0
  110. package/src/headers/24/node_blob.h +159 -0
  111. package/src/headers/24/node_bob-inl.h +36 -0
  112. package/src/headers/24/node_bob.h +107 -0
  113. package/src/headers/24/node_buffer.h +92 -0
  114. package/src/headers/24/node_builtins.h +223 -0
  115. package/src/headers/24/node_config_file.h +65 -0
  116. package/src/headers/24/node_constants.h +82 -0
  117. package/src/headers/24/node_context_data.h +168 -0
  118. package/src/headers/24/node_contextify.h +261 -0
  119. package/src/headers/24/node_crypto.h +62 -0
  120. package/src/headers/24/node_debug.h +25 -0
  121. package/src/headers/24/node_dir.h +52 -0
  122. package/src/headers/24/node_dotenv.h +45 -0
  123. package/src/headers/24/node_errors.h +391 -0
  124. package/src/headers/24/node_exit_code.h +54 -0
  125. package/src/headers/24/node_external_reference.h +167 -0
  126. package/src/headers/24/node_file-inl.h +412 -0
  127. package/src/headers/24/node_file.h +540 -0
  128. package/src/headers/24/node_http2.h +1175 -0
  129. package/src/headers/24/node_http2_state.h +159 -0
  130. package/src/headers/24/node_http_common-inl.h +198 -0
  131. package/src/headers/24/node_http_common.h +535 -0
  132. package/src/headers/24/node_i18n.h +132 -0
  133. package/src/headers/24/node_internals.h +476 -0
  134. package/src/headers/24/node_json.h +24 -0
  135. package/src/headers/24/node_large_page.h +34 -0
  136. package/src/headers/24/node_locks.h +180 -0
  137. package/src/headers/24/node_main_instance.h +67 -0
  138. package/src/headers/24/node_mem-inl.h +112 -0
  139. package/src/headers/24/node_mem.h +45 -0
  140. package/src/headers/24/node_messaging.h +389 -0
  141. package/src/headers/24/node_metadata.h +164 -0
  142. package/src/headers/24/node_modules.h +93 -0
  143. package/src/headers/24/node_mutex.h +323 -0
  144. package/src/headers/24/node_object_wrap.h +132 -0
  145. package/src/headers/24/node_options-inl.h +524 -0
  146. package/src/headers/24/node_options.h +682 -0
  147. package/src/headers/24/node_perf.h +166 -0
  148. package/src/headers/24/node_perf_common.h +102 -0
  149. package/src/headers/24/node_platform.h +286 -0
  150. package/src/headers/24/node_process-inl.h +26 -0
  151. package/src/headers/24/node_process.h +111 -0
  152. package/src/headers/24/node_realm-inl.h +153 -0
  153. package/src/headers/24/node_realm.h +236 -0
  154. package/src/headers/24/node_report.h +43 -0
  155. package/src/headers/24/node_revert.h +82 -0
  156. package/src/headers/24/node_root_certs.h +3546 -0
  157. package/src/headers/24/node_sea.h +74 -0
  158. package/src/headers/24/node_shadow_realm.h +46 -0
  159. package/src/headers/24/node_snapshot_builder.h +57 -0
  160. package/src/headers/24/node_snapshotable.h +174 -0
  161. package/src/headers/24/node_sockaddr-inl.h +257 -0
  162. package/src/headers/24/node_sockaddr.h +394 -0
  163. package/src/headers/24/node_sqlite.h +270 -0
  164. package/src/headers/24/node_stat_watcher.h +73 -0
  165. package/src/headers/24/node_string.h +101 -0
  166. package/src/headers/24/node_task_runner.h +92 -0
  167. package/src/headers/24/node_threadsafe_cow-inl.h +54 -0
  168. package/src/headers/24/node_threadsafe_cow.h +105 -0
  169. package/src/headers/24/node_trace_buffer.h +83 -0
  170. package/src/headers/24/node_trace_writer.h +75 -0
  171. package/src/headers/24/node_union_bytes.h +81 -0
  172. package/src/headers/24/node_url.h +101 -0
  173. package/src/headers/24/node_url_pattern.h +118 -0
  174. package/src/headers/24/node_v8.h +77 -0
  175. package/src/headers/24/node_v8_platform-inl.h +185 -0
  176. package/src/headers/24/node_version.h +110 -0
  177. package/src/headers/24/node_wasi.h +185 -0
  178. package/src/headers/24/node_wasm_web_api.h +55 -0
  179. package/src/headers/24/node_watchdog.h +154 -0
  180. package/src/headers/24/node_webstorage.h +60 -0
  181. package/src/headers/24/node_worker.h +159 -0
  182. package/src/headers/24/packet.h +155 -0
  183. package/src/headers/24/path.h +33 -0
  184. package/src/headers/24/permission/addon_permission.h +31 -0
  185. package/src/headers/24/permission/child_process_permission.h +31 -0
  186. package/src/headers/24/permission/fs_permission.h +167 -0
  187. package/src/headers/24/permission/inspector_permission.h +31 -0
  188. package/src/headers/24/permission/permission.h +100 -0
  189. package/src/headers/24/permission/permission_base.h +65 -0
  190. package/src/headers/24/permission/wasi_permission.h +31 -0
  191. package/src/headers/24/permission/worker_permission.h +31 -0
  192. package/src/headers/24/permission.h +100 -0
  193. package/src/headers/24/permission_base.h +65 -0
  194. package/src/headers/24/pipe_wrap.h +80 -0
  195. package/src/headers/24/preferredaddress.h +72 -0
  196. package/src/headers/24/protocol_helper.h +27 -0
  197. package/src/headers/24/queue.h +306 -0
  198. package/src/headers/24/req_wrap-inl.h +176 -0
  199. package/src/headers/24/req_wrap.h +79 -0
  200. package/src/headers/24/runtime_agent.h +41 -0
  201. package/src/headers/24/session.h +528 -0
  202. package/src/headers/24/sessionticket.h +108 -0
  203. package/src/headers/24/spawn_sync.h +243 -0
  204. package/src/headers/24/stream_base-inl.h +173 -0
  205. package/src/headers/24/stream_base.h +478 -0
  206. package/src/headers/24/stream_pipe.h +76 -0
  207. package/src/headers/24/stream_wrap.h +132 -0
  208. package/src/headers/24/streams.h +370 -0
  209. package/src/headers/24/string_bytes.h +109 -0
  210. package/src/headers/24/string_decoder-inl.h +31 -0
  211. package/src/headers/24/string_decoder.h +49 -0
  212. package/src/headers/24/target_agent.h +75 -0
  213. package/src/headers/24/tcp_wrap.h +105 -0
  214. package/src/headers/24/threadpoolwork-inl.h +70 -0
  215. package/src/headers/24/timer_wrap-inl.h +32 -0
  216. package/src/headers/24/timer_wrap.h +87 -0
  217. package/src/headers/24/timers.h +75 -0
  218. package/src/headers/24/tlscontext.h +228 -0
  219. package/src/headers/24/tokens.h +256 -0
  220. package/src/headers/24/trace_event.h +722 -0
  221. package/src/headers/24/trace_event_common.h +1109 -0
  222. package/src/headers/24/traced_value.h +129 -0
  223. package/src/headers/24/tracing_agent.h +43 -0
  224. package/src/headers/24/transportparams.h +166 -0
  225. package/src/headers/24/tty_wrap.h +65 -0
  226. package/src/headers/24/udp_wrap.h +230 -0
  227. package/src/headers/24/undici_version.h +6 -0
  228. package/src/headers/24/util-inl.h +711 -0
  229. package/src/headers/24/util.h +1016 -0
  230. package/src/headers/24/v8-external-memory-accounter.h +60 -0
  231. package/src/headers/24/v8-fast-api-calls.h +819 -0
  232. package/src/headers/24/v8-inspector.h +426 -0
  233. package/src/headers/24/wasi_permission.h +31 -0
  234. package/src/headers/24/worker_agent.h +40 -0
  235. package/src/headers/24/worker_inspector.h +124 -0
  236. package/src/headers/24/worker_permission.h +31 -0
  237. package/src/headers/24/zlib_version.h +6 -0
@@ -0,0 +1,105 @@
1
+ // Copyright Joyent, Inc. and other Node contributors.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a
4
+ // copy of this software and associated documentation files (the
5
+ // "Software"), to deal in the Software without restriction, including
6
+ // without limitation the rights to use, copy, modify, merge, publish,
7
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
8
+ // persons to whom the Software is furnished to do so, subject to the
9
+ // following conditions:
10
+ //
11
+ // The above copyright notice and this permission notice shall be included
12
+ // in all copies or substantial portions of the Software.
13
+ //
14
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ #ifndef SRC_TCP_WRAP_H_
23
+ #define SRC_TCP_WRAP_H_
24
+
25
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
+
27
+ #include "async_wrap.h"
28
+ #include "connection_wrap.h"
29
+
30
+ namespace node {
31
+
32
+ class ExternalReferenceRegistry;
33
+ class Environment;
34
+
35
+ class TCPWrap : public ConnectionWrap<TCPWrap, uv_tcp_t> {
36
+ public:
37
+ enum SocketType {
38
+ SOCKET,
39
+ SERVER
40
+ };
41
+
42
+ static v8::MaybeLocal<v8::Object> Instantiate(Environment* env,
43
+ AsyncWrap* parent,
44
+ SocketType type);
45
+ static void Initialize(v8::Local<v8::Object> target,
46
+ v8::Local<v8::Value> unused,
47
+ v8::Local<v8::Context> context,
48
+ void* priv);
49
+ static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
50
+
51
+ SET_NO_MEMORY_INFO()
52
+ SET_SELF_SIZE(TCPWrap)
53
+ const char* MemoryInfoName() const override {
54
+ switch (provider_type()) {
55
+ case ProviderType::PROVIDER_TCPWRAP:
56
+ return "TCPSocketWrap";
57
+ case ProviderType::PROVIDER_TCPSERVERWRAP:
58
+ return "TCPServerWrap";
59
+ default:
60
+ UNREACHABLE();
61
+ }
62
+ }
63
+
64
+ private:
65
+ typedef uv_tcp_t HandleType;
66
+
67
+ template <typename T,
68
+ int (*F)(const typename T::HandleType*, sockaddr*, int*)>
69
+ friend void GetSockOrPeerName(const v8::FunctionCallbackInfo<v8::Value>&);
70
+
71
+ TCPWrap(Environment* env, v8::Local<v8::Object> object,
72
+ ProviderType provider);
73
+
74
+ static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
75
+ static void SetNoDelay(const v8::FunctionCallbackInfo<v8::Value>& args);
76
+ static void SetKeepAlive(const v8::FunctionCallbackInfo<v8::Value>& args);
77
+ static void Bind(const v8::FunctionCallbackInfo<v8::Value>& args);
78
+ static void Bind6(const v8::FunctionCallbackInfo<v8::Value>& args);
79
+ static void Listen(const v8::FunctionCallbackInfo<v8::Value>& args);
80
+ static void Connect(const v8::FunctionCallbackInfo<v8::Value>& args);
81
+ static void Connect6(const v8::FunctionCallbackInfo<v8::Value>& args);
82
+ template <typename T>
83
+ static void Connect(const v8::FunctionCallbackInfo<v8::Value>& args,
84
+ std::function<int(const char* ip_address, T* addr)> uv_ip_addr);
85
+ static void Open(const v8::FunctionCallbackInfo<v8::Value>& args);
86
+ template <typename T>
87
+ static void Bind(
88
+ const v8::FunctionCallbackInfo<v8::Value>& args,
89
+ int family,
90
+ std::function<int(const char* ip_address, int port, T* addr)> uv_ip_addr);
91
+ static void Reset(const v8::FunctionCallbackInfo<v8::Value>& args);
92
+ int Reset(v8::Local<v8::Value> close_callback = v8::Local<v8::Value>());
93
+
94
+ #ifdef _WIN32
95
+ static void SetSimultaneousAccepts(
96
+ const v8::FunctionCallbackInfo<v8::Value>& args);
97
+ #endif
98
+ };
99
+
100
+
101
+ } // namespace node
102
+
103
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
104
+
105
+ #endif // SRC_TCP_WRAP_H_
@@ -0,0 +1,70 @@
1
+ // Copyright Joyent, Inc. and other Node contributors.
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a
4
+ // copy of this software and associated documentation files (the
5
+ // "Software"), to deal in the Software without restriction, including
6
+ // without limitation the rights to use, copy, modify, merge, publish,
7
+ // distribute, sublicense, and/or sell copies of the Software, and to permit
8
+ // persons to whom the Software is furnished to do so, subject to the
9
+ // following conditions:
10
+ //
11
+ // The above copyright notice and this permission notice shall be included
12
+ // in all copies or substantial portions of the Software.
13
+ //
14
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
+ // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17
+ // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18
+ // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ #ifndef SRC_THREADPOOLWORK_INL_H_
23
+ #define SRC_THREADPOOLWORK_INL_H_
24
+
25
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
+
27
+ #include "node_internals.h"
28
+ #include "tracing/trace_event.h"
29
+ #include "util-inl.h"
30
+
31
+ namespace node {
32
+
33
+ void ThreadPoolWork::ScheduleWork() {
34
+ env_->IncreaseWaitingRequestCounter();
35
+ TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(
36
+ TRACING_CATEGORY_NODE2(threadpoolwork, async), type_, this);
37
+ int status = uv_queue_work(
38
+ env_->event_loop(),
39
+ &work_req_,
40
+ [](uv_work_t* req) {
41
+ ThreadPoolWork* self = ContainerOf(&ThreadPoolWork::work_req_, req);
42
+ TRACE_EVENT_BEGIN0(TRACING_CATEGORY_NODE2(threadpoolwork, sync),
43
+ self->type_);
44
+ self->DoThreadPoolWork();
45
+ TRACE_EVENT_END0(TRACING_CATEGORY_NODE2(threadpoolwork, sync),
46
+ self->type_);
47
+ },
48
+ [](uv_work_t* req, int status) {
49
+ ThreadPoolWork* self = ContainerOf(&ThreadPoolWork::work_req_, req);
50
+ self->env_->DecreaseWaitingRequestCounter();
51
+ TRACE_EVENT_NESTABLE_ASYNC_END1(
52
+ TRACING_CATEGORY_NODE2(threadpoolwork, async),
53
+ self->type_,
54
+ self,
55
+ "result",
56
+ status);
57
+ self->AfterThreadPoolWork(status);
58
+ });
59
+ CHECK_EQ(status, 0);
60
+ }
61
+
62
+ int ThreadPoolWork::CancelWork() {
63
+ return uv_cancel(reinterpret_cast<uv_req_t*>(&work_req_));
64
+ }
65
+
66
+ } // namespace node
67
+
68
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
69
+
70
+ #endif // SRC_THREADPOOLWORK_INL_H_
@@ -0,0 +1,32 @@
1
+ #ifndef SRC_TIMER_WRAP_INL_H_
2
+ #define SRC_TIMER_WRAP_INL_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include "timer_wrap.h"
7
+
8
+ #include <utility>
9
+
10
+ #include "env.h"
11
+ #include "uv.h"
12
+
13
+ namespace node {
14
+
15
+ template <typename... Args>
16
+ inline TimerWrap::TimerWrap(Environment* env, Args&&... args)
17
+ : env_(env), fn_(std::forward<Args>(args)...) {
18
+ uv_timer_init(env->event_loop(), &timer_);
19
+ timer_.data = this;
20
+ }
21
+
22
+ template <typename... Args>
23
+ inline TimerWrapHandle::TimerWrapHandle(Environment* env, Args&&... args) {
24
+ timer_ = new TimerWrap(env, std::forward<Args>(args)...);
25
+ env->AddCleanupHook(CleanupHook, this);
26
+ }
27
+
28
+ } // namespace node
29
+
30
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
31
+
32
+ #endif // SRC_TIMER_WRAP_INL_H_
@@ -0,0 +1,87 @@
1
+ #ifndef SRC_TIMER_WRAP_H_
2
+ #define SRC_TIMER_WRAP_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include "memory_tracker.h"
7
+ #include "env.h"
8
+ #include "uv.h"
9
+
10
+ #include <functional>
11
+
12
+ namespace node {
13
+
14
+ // Utility class that makes working with libuv timers a bit easier.
15
+ class TimerWrap final : public MemoryRetainer {
16
+ public:
17
+ using TimerCb = std::function<void()>;
18
+
19
+ template <typename... Args>
20
+ explicit inline TimerWrap(Environment* env, Args&&... args);
21
+
22
+ TimerWrap(const TimerWrap&) = delete;
23
+
24
+ inline Environment* env() const { return env_; }
25
+
26
+ // Stop calling the timer callback.
27
+ void Stop();
28
+ // Render the timer unusable and delete this object.
29
+ void Close();
30
+
31
+ // Starts / Restarts the Timer
32
+ void Update(uint64_t interval, uint64_t repeat = 0);
33
+
34
+ void Ref();
35
+ void Unref();
36
+
37
+ SET_NO_MEMORY_INFO()
38
+ SET_MEMORY_INFO_NAME(TimerWrap)
39
+ SET_SELF_SIZE(TimerWrap)
40
+
41
+ private:
42
+ static void TimerClosedCb(uv_handle_t* handle);
43
+ static void OnTimeout(uv_timer_t* timer);
44
+ ~TimerWrap() = default;
45
+
46
+ Environment* env_;
47
+ TimerCb fn_;
48
+ uv_timer_t timer_;
49
+
50
+ friend std::unique_ptr<TimerWrap>::deleter_type;
51
+ };
52
+
53
+ class TimerWrapHandle : public MemoryRetainer {
54
+ public:
55
+ template <typename... Args>
56
+ explicit inline TimerWrapHandle(Environment* env, Args&&... args);
57
+
58
+ TimerWrapHandle(const TimerWrapHandle&) = delete;
59
+
60
+ ~TimerWrapHandle() { Close(); }
61
+
62
+ void Update(uint64_t interval, uint64_t repeat = 0);
63
+
64
+ inline operator bool() const { return timer_ != nullptr; }
65
+
66
+ void Ref();
67
+ void Unref();
68
+
69
+ void Stop();
70
+ void Close();
71
+
72
+ void MemoryInfo(node::MemoryTracker* tracker) const override;
73
+
74
+ SET_MEMORY_INFO_NAME(TimerWrapHandle)
75
+ SET_SELF_SIZE(TimerWrapHandle)
76
+
77
+ private:
78
+ static void CleanupHook(void* data);
79
+
80
+ TimerWrap* timer_;
81
+ };
82
+
83
+ } // namespace node
84
+
85
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
86
+
87
+ #endif // SRC_TIMER_WRAP_H_
@@ -0,0 +1,75 @@
1
+ #ifndef SRC_TIMERS_H_
2
+ #define SRC_TIMERS_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include <cinttypes>
7
+ #include "node_snapshotable.h"
8
+
9
+ namespace node {
10
+ class ExternalReferenceRegistry;
11
+
12
+ namespace timers {
13
+ class BindingData : public SnapshotableObject {
14
+ public:
15
+ BindingData(Realm* env, v8::Local<v8::Object> obj);
16
+
17
+ using InternalFieldInfo = InternalFieldInfoBase;
18
+
19
+ SET_BINDING_ID(timers_binding_data)
20
+ SERIALIZABLE_OBJECT_METHODS()
21
+
22
+ SET_NO_MEMORY_INFO()
23
+ SET_SELF_SIZE(BindingData)
24
+ SET_MEMORY_INFO_NAME(BindingData)
25
+
26
+ static void SetupTimers(const v8::FunctionCallbackInfo<v8::Value>& args);
27
+
28
+ static void SlowGetLibuvNow(const v8::FunctionCallbackInfo<v8::Value>& args);
29
+ static double FastGetLibuvNow(v8::Local<v8::Value> receiver);
30
+ static double GetLibuvNowImpl(BindingData* data);
31
+
32
+ static void SlowScheduleTimer(
33
+ const v8::FunctionCallbackInfo<v8::Value>& args);
34
+ static void FastScheduleTimer(v8::Local<v8::Object> unused,
35
+ v8::Local<v8::Object> receiver,
36
+ int64_t duration);
37
+ static void ScheduleTimerImpl(BindingData* data, int64_t duration);
38
+
39
+ static void SlowToggleTimerRef(
40
+ const v8::FunctionCallbackInfo<v8::Value>& args);
41
+ static void FastToggleTimerRef(v8::Local<v8::Object> unused,
42
+ v8::Local<v8::Object> receiver,
43
+ bool ref);
44
+ static void ToggleTimerRefImpl(BindingData* data, bool ref);
45
+
46
+ static void SlowToggleImmediateRef(
47
+ const v8::FunctionCallbackInfo<v8::Value>& args);
48
+ static void FastToggleImmediateRef(v8::Local<v8::Object> unused,
49
+ v8::Local<v8::Object> receiver,
50
+ bool ref);
51
+ static void ToggleImmediateRefImpl(BindingData* data, bool ref);
52
+
53
+ static void CreatePerIsolateProperties(IsolateData* isolate_data,
54
+ v8::Local<v8::ObjectTemplate> target);
55
+ static void CreatePerContextProperties(v8::Local<v8::Object> target,
56
+ v8::Local<v8::Value> unused,
57
+ v8::Local<v8::Context> context,
58
+ void* priv);
59
+ static void RegisterTimerExternalReferences(
60
+ ExternalReferenceRegistry* registry);
61
+
62
+ private:
63
+ static v8::CFunction fast_get_libuv_now_;
64
+ static v8::CFunction fast_schedule_timer_;
65
+ static v8::CFunction fast_toggle_timer_ref_;
66
+ static v8::CFunction fast_toggle_immediate_ref_;
67
+ };
68
+
69
+ } // namespace timers
70
+
71
+ } // namespace node
72
+
73
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
74
+
75
+ #endif // SRC_TIMERS_H_
@@ -0,0 +1,228 @@
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 <crypto/crypto_context.h>
8
+ #include <crypto/crypto_keys.h>
9
+ #include <memory_tracker.h>
10
+ #include <ncrypto.h>
11
+ #include <ngtcp2/ngtcp2_crypto.h>
12
+ #include "bindingdata.h"
13
+ #include "data.h"
14
+ #include "defs.h"
15
+ #include "sessionticket.h"
16
+
17
+ namespace node::quic {
18
+
19
+ class Session;
20
+ class TLSContext;
21
+
22
+ // Every QUIC Session has exactly one TLSSession that maintains the state
23
+ // of the TLS handshake and negotiated keys after the handshake has been
24
+ // completed. It is separated out from the main Session class only as a
25
+ // convenience to help make the code more maintainable and understandable.
26
+ // A TLSSession is created from a TLSContext and maintains a reference to
27
+ // the context.
28
+ class TLSSession final : public MemoryRetainer {
29
+ public:
30
+ static const TLSSession& From(const SSL* ssl);
31
+
32
+ // The constructor is public in order to satisfy the call to std::make_unique
33
+ // in TLSContext::NewSession. It should not be called directly.
34
+ TLSSession(Session* session,
35
+ std::shared_ptr<TLSContext> context,
36
+ const std::optional<SessionTicket>& maybeSessionTicket);
37
+ DISALLOW_COPY_AND_MOVE(TLSSession)
38
+ ~TLSSession();
39
+
40
+ inline operator bool() const { return ssl_ != nullptr; }
41
+ inline Session& session() const { return *session_; }
42
+ inline TLSContext& context() const { return *context_; }
43
+
44
+ // Returns true if the handshake has been completed and early data was
45
+ // accepted by the TLS session. This will assert if the handshake has
46
+ // not been completed.
47
+ bool early_data_was_accepted() const;
48
+
49
+ v8::MaybeLocal<v8::Object> cert(Environment* env) const;
50
+ v8::MaybeLocal<v8::Object> peer_cert(Environment* env) const;
51
+ v8::MaybeLocal<v8::Object> ephemeral_key(Environment* env) const;
52
+ v8::MaybeLocal<v8::Value> cipher_name(Environment* env) const;
53
+ v8::MaybeLocal<v8::Value> cipher_version(Environment* env) const;
54
+
55
+ // The SNI (server name) negotiated for the session
56
+ const std::string_view servername() const;
57
+
58
+ // The ALPN (protocol name) negotiated for the session
59
+ const std::string_view protocol() const;
60
+
61
+ // Triggers key update to begin. This will fail and return false if either a
62
+ // previous key update is in progress or if the initial handshake has not yet
63
+ // been confirmed.
64
+ bool InitiateKeyUpdate();
65
+
66
+ struct PeerIdentityValidationError {
67
+ v8::MaybeLocal<v8::Value> reason;
68
+ v8::MaybeLocal<v8::Value> code;
69
+ };
70
+
71
+ // Checks the peer identity against the configured CA and CRL. If the peer
72
+ // certificate is valid, std::nullopt is returned. Otherwise a
73
+ // PeerIdentityValidationError is returned with the reason and code for the
74
+ // failure.
75
+ std::optional<PeerIdentityValidationError> VerifyPeerIdentity(
76
+ Environment* env);
77
+
78
+ inline const std::string_view validation_error() const {
79
+ return validation_error_;
80
+ }
81
+
82
+ SET_NO_MEMORY_INFO()
83
+ SET_MEMORY_INFO_NAME(TLSSession)
84
+ SET_SELF_SIZE(TLSSession)
85
+
86
+ private:
87
+ operator SSL*() const;
88
+ ncrypto::SSLPointer Initialize(
89
+ const std::optional<SessionTicket>& maybeSessionTicket);
90
+
91
+ static ngtcp2_conn* connection(ngtcp2_crypto_conn_ref* ref);
92
+
93
+ ngtcp2_crypto_conn_ref ref_;
94
+ std::shared_ptr<TLSContext> context_;
95
+ Session* session_;
96
+ ncrypto::SSLPointer ssl_;
97
+ ncrypto::BIOPointer bio_trace_;
98
+ std::string validation_error_ = "";
99
+ bool in_key_update_ = false;
100
+ };
101
+
102
+ // The TLSContext is used to create a TLSSession. For the client, there is
103
+ // typically only a single TLSContext for each TLSSession. For the server,
104
+ // there is a single TLSContext for the server and a TLSSession for every
105
+ // QUIC session created by that server.
106
+ class TLSContext final : public MemoryRetainer,
107
+ public std::enable_shared_from_this<TLSContext> {
108
+ public:
109
+ static constexpr auto DEFAULT_CIPHERS = "TLS_AES_128_GCM_SHA256:"
110
+ "TLS_AES_256_GCM_SHA384:"
111
+ "TLS_CHACHA20_POLY1305_"
112
+ "SHA256:TLS_AES_128_CCM_SHA256";
113
+ static constexpr auto DEFAULT_GROUPS = "X25519:P-256:P-384:P-521";
114
+
115
+ struct Options final : public MemoryRetainer {
116
+ // The SNI servername to use for this session. This option is only used by
117
+ // the client.
118
+ std::string servername = "localhost";
119
+
120
+ // The ALPN (protocol name) to use for this session. This option is only
121
+ // used by the client.
122
+ std::string protocol = NGHTTP3_ALPN_H3;
123
+
124
+ // The list of TLS ciphers to use for this session.
125
+ std::string ciphers = DEFAULT_CIPHERS;
126
+
127
+ // The list of TLS groups to use for this session.
128
+ std::string groups = DEFAULT_GROUPS;
129
+
130
+ // When true, enables keylog output for the session.
131
+ bool keylog = false;
132
+
133
+ // When true, the peer certificate is verified against the list of supplied
134
+ // CA. If verification fails, the connection will be refused. When set,
135
+ // instructs the server session to request a client auth certificate. This
136
+ // option is only used by the server side.
137
+ bool verify_client = false;
138
+
139
+ // When true, enables TLS tracing for the session. This should only be used
140
+ // for debugging.
141
+ // JavaScript option name "tlsTrace".
142
+ bool enable_tls_trace = false;
143
+
144
+ // When true, causes the private key passed in for the session to be
145
+ // verified.
146
+ // JavaScript option name "verifyPrivateKey"
147
+ bool verify_private_key = false;
148
+
149
+ // The TLS private key(s) to use for this session.
150
+ // JavaScript option name "keys"
151
+ std::vector<crypto::KeyObjectData> keys;
152
+
153
+ // Collection of certificates to use for this session.
154
+ // JavaScript option name "certs"
155
+ std::vector<Store> certs;
156
+
157
+ // Optional certificate authority overrides to use.
158
+ // JavaScript option name "ca"
159
+ std::vector<Store> ca;
160
+
161
+ // Optional certificate revocation lists to use.
162
+ // JavaScript option name "crl"
163
+ std::vector<Store> crl;
164
+
165
+ void MemoryInfo(MemoryTracker* tracker) const override;
166
+ SET_MEMORY_INFO_NAME(TLSContext::Options)
167
+ SET_SELF_SIZE(Options)
168
+
169
+ // The default TLS configuration.
170
+ static const Options kDefault;
171
+
172
+ static v8::Maybe<Options> From(Environment* env,
173
+ v8::Local<v8::Value> value);
174
+
175
+ std::string ToString() const;
176
+ };
177
+
178
+ static std::shared_ptr<TLSContext> CreateClient(const Options& options);
179
+ static std::shared_ptr<TLSContext> CreateServer(const Options& options);
180
+
181
+ TLSContext(Side side, const Options& options);
182
+ DISALLOW_COPY_AND_MOVE(TLSContext)
183
+
184
+ // Each QUIC Session has exactly one TLSSession. Each TLSSession maintains
185
+ // a reference to the TLSContext used to create it.
186
+ std::unique_ptr<TLSSession> NewSession(
187
+ Session* session, const std::optional<SessionTicket>& maybeSessionTicket);
188
+
189
+ inline Side side() const { return side_; }
190
+ inline const Options& options() const { return options_; }
191
+ inline operator bool() const { return ctx_ != nullptr; }
192
+
193
+ inline const std::string_view validation_error() const {
194
+ return validation_error_;
195
+ }
196
+
197
+ void MemoryInfo(MemoryTracker* tracker) const override;
198
+ SET_MEMORY_INFO_NAME(TLSContext)
199
+ SET_SELF_SIZE(TLSContext)
200
+
201
+ private:
202
+ ncrypto::SSLCtxPointer Initialize();
203
+ operator SSL_CTX*() const;
204
+
205
+ static void OnKeylog(const SSL* ssl, const char* line);
206
+ static int OnNewSession(SSL* ssl, SSL_SESSION* session);
207
+ static int OnSelectAlpn(SSL* ssl,
208
+ const unsigned char** out,
209
+ unsigned char* outlen,
210
+ const unsigned char* in,
211
+ unsigned int inlen,
212
+ void* arg);
213
+ static int OnVerifyClientCertificate(int preverify_ok, X509_STORE_CTX* ctx);
214
+
215
+ Side side_;
216
+ Options options_;
217
+ ncrypto::X509Pointer cert_;
218
+ ncrypto::X509Pointer issuer_;
219
+ ncrypto::SSLCtxPointer ctx_;
220
+ std::string validation_error_ = "";
221
+
222
+ friend class TLSSession;
223
+ };
224
+
225
+ } // namespace node::quic
226
+
227
+ #endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
228
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS