@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.
- package/binding.gyp +1 -1
- package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
- package/dist/bindings/cws_linux_x64_node137.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +6 -1
- package/src/headers/24/acorn_version.h +6 -0
- package/src/headers/24/addon_permission.h +31 -0
- package/src/headers/24/agent.h +195 -0
- package/src/headers/24/aliased_buffer-inl.h +244 -0
- package/src/headers/24/aliased_buffer.h +206 -0
- package/src/headers/24/aliased_struct-inl.h +54 -0
- package/src/headers/24/aliased_struct.h +63 -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/24/async_wrap-inl.h +96 -0
- package/src/headers/24/async_wrap.h +244 -0
- package/src/headers/24/base_object-inl.h +330 -0
- package/src/headers/24/base_object.h +338 -0
- 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/24/callback_queue-inl.h +97 -0
- package/src/headers/24/callback_queue.h +79 -0
- package/src/headers/24/cares_wrap.h +447 -0
- 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/connect_wrap.h +26 -0
- package/src/headers/24/connection_wrap.h +30 -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/24/crypto/crypto_bio.h +193 -0
- package/src/headers/24/crypto/crypto_chacha20_poly1305.h +64 -0
- package/src/headers/24/crypto/crypto_cipher.h +281 -0
- package/src/headers/24/crypto/crypto_clienthello-inl.h +90 -0
- package/src/headers/24/crypto/crypto_clienthello.h +131 -0
- package/src/headers/24/crypto/crypto_common.h +48 -0
- package/src/headers/24/crypto/crypto_context.h +171 -0
- package/src/headers/24/crypto/crypto_dh.h +126 -0
- package/src/headers/24/crypto/crypto_dsa.h +50 -0
- package/src/headers/24/crypto/crypto_ec.h +163 -0
- package/src/headers/24/crypto/crypto_hash.h +89 -0
- package/src/headers/24/crypto/crypto_hkdf.h +61 -0
- package/src/headers/24/crypto/crypto_hmac.h +92 -0
- package/src/headers/24/crypto/crypto_kem.h +113 -0
- package/src/headers/24/crypto/crypto_keygen.h +290 -0
- package/src/headers/24/crypto/crypto_keys.h +392 -0
- package/src/headers/24/crypto/crypto_ml_dsa.h +21 -0
- package/src/headers/24/crypto/crypto_pbkdf2.h +74 -0
- package/src/headers/24/crypto/crypto_random.h +124 -0
- package/src/headers/24/crypto/crypto_rsa.h +136 -0
- package/src/headers/24/crypto/crypto_scrypt.h +85 -0
- package/src/headers/24/crypto/crypto_sig.h +156 -0
- package/src/headers/24/crypto/crypto_spkac.h +21 -0
- package/src/headers/24/crypto/crypto_timing.h +20 -0
- package/src/headers/24/crypto/crypto_tls.h +309 -0
- package/src/headers/24/crypto/crypto_util.h +598 -0
- package/src/headers/24/crypto/crypto_x509.h +140 -0
- package/src/headers/24/data.h +148 -0
- package/src/headers/24/debug_utils-inl.h +232 -0
- package/src/headers/24/debug_utils.h +193 -0
- package/src/headers/24/defs.h +254 -0
- package/src/headers/24/diagnosticfilename-inl.h +33 -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/24/env-inl.h +935 -0
- 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/24/handle_wrap.h +123 -0
- package/src/headers/24/histogram-inl.h +107 -0
- package/src/headers/24/histogram.h +279 -0
- package/src/headers/24/http3.h +44 -0
- package/src/headers/24/inspector_agent.h +165 -0
- package/src/headers/24/inspector_io.h +78 -0
- package/src/headers/24/inspector_permission.h +31 -0
- package/src/headers/24/inspector_profiler.h +149 -0
- package/src/headers/24/inspector_socket.h +60 -0
- package/src/headers/24/inspector_socket_server.h +110 -0
- package/src/headers/24/io_agent.h +30 -0
- package/src/headers/24/js_native_api.h +615 -0
- package/src/headers/24/js_native_api_types.h +211 -0
- package/src/headers/24/js_native_api_v8.h +485 -0
- package/src/headers/24/js_native_api_v8_internals.h +45 -0
- package/src/headers/24/js_stream.h +52 -0
- package/src/headers/24/json_parser.h +40 -0
- package/src/headers/24/json_utils.h +172 -0
- package/src/headers/24/logstream.h +81 -0
- package/src/headers/24/main_thread_interface.h +116 -0
- package/src/headers/24/memory_tracker-inl.h +454 -0
- package/src/headers/24/memory_tracker.h +333 -0
- 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/24/node.h +1620 -0
- package/src/headers/24/node_api.h +269 -0
- package/src/headers/24/node_api_internals.h +46 -0
- package/src/headers/24/node_api_types.h +52 -0
- package/src/headers/24/node_binding.h +163 -0
- package/src/headers/24/node_blob.h +159 -0
- package/src/headers/24/node_bob-inl.h +36 -0
- package/src/headers/24/node_bob.h +107 -0
- package/src/headers/24/node_buffer.h +92 -0
- package/src/headers/24/node_builtins.h +223 -0
- package/src/headers/24/node_config_file.h +65 -0
- package/src/headers/24/node_constants.h +82 -0
- package/src/headers/24/node_context_data.h +168 -0
- package/src/headers/24/node_contextify.h +261 -0
- package/src/headers/24/node_crypto.h +62 -0
- package/src/headers/24/node_debug.h +25 -0
- package/src/headers/24/node_dir.h +52 -0
- package/src/headers/24/node_dotenv.h +45 -0
- package/src/headers/24/node_errors.h +391 -0
- package/src/headers/24/node_exit_code.h +54 -0
- package/src/headers/24/node_external_reference.h +167 -0
- package/src/headers/24/node_file-inl.h +412 -0
- package/src/headers/24/node_file.h +540 -0
- package/src/headers/24/node_http2.h +1175 -0
- package/src/headers/24/node_http2_state.h +159 -0
- package/src/headers/24/node_http_common-inl.h +198 -0
- package/src/headers/24/node_http_common.h +535 -0
- package/src/headers/24/node_i18n.h +132 -0
- package/src/headers/24/node_internals.h +476 -0
- 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/24/node_main_instance.h +67 -0
- package/src/headers/24/node_mem-inl.h +112 -0
- package/src/headers/24/node_mem.h +45 -0
- package/src/headers/24/node_messaging.h +389 -0
- package/src/headers/24/node_metadata.h +164 -0
- package/src/headers/24/node_modules.h +93 -0
- package/src/headers/24/node_mutex.h +323 -0
- package/src/headers/24/node_object_wrap.h +132 -0
- package/src/headers/24/node_options-inl.h +524 -0
- package/src/headers/24/node_options.h +682 -0
- package/src/headers/24/node_perf.h +166 -0
- package/src/headers/24/node_perf_common.h +102 -0
- package/src/headers/24/node_platform.h +286 -0
- package/src/headers/24/node_process-inl.h +26 -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/24/node_report.h +43 -0
- package/src/headers/24/node_revert.h +82 -0
- package/src/headers/24/node_root_certs.h +3546 -0
- 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/24/node_sockaddr-inl.h +257 -0
- package/src/headers/24/node_sockaddr.h +394 -0
- package/src/headers/24/node_sqlite.h +270 -0
- package/src/headers/24/node_stat_watcher.h +73 -0
- 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_trace_buffer.h +83 -0
- package/src/headers/24/node_trace_writer.h +75 -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/24/node_v8_platform-inl.h +185 -0
- package/src/headers/24/node_version.h +110 -0
- package/src/headers/24/node_wasi.h +185 -0
- package/src/headers/24/node_wasm_web_api.h +55 -0
- package/src/headers/24/node_watchdog.h +154 -0
- package/src/headers/24/node_webstorage.h +60 -0
- package/src/headers/24/node_worker.h +159 -0
- 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/pipe_wrap.h +80 -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/24/req_wrap-inl.h +176 -0
- package/src/headers/24/req_wrap.h +79 -0
- 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/24/spawn_sync.h +243 -0
- package/src/headers/24/stream_base-inl.h +173 -0
- package/src/headers/24/stream_base.h +478 -0
- package/src/headers/24/stream_pipe.h +76 -0
- package/src/headers/24/stream_wrap.h +132 -0
- package/src/headers/24/streams.h +370 -0
- package/src/headers/24/string_bytes.h +109 -0
- package/src/headers/24/string_decoder-inl.h +31 -0
- package/src/headers/24/string_decoder.h +49 -0
- package/src/headers/24/target_agent.h +75 -0
- package/src/headers/24/tcp_wrap.h +105 -0
- package/src/headers/24/threadpoolwork-inl.h +70 -0
- package/src/headers/24/timer_wrap-inl.h +32 -0
- package/src/headers/24/timer_wrap.h +87 -0
- 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/24/trace_event.h +722 -0
- package/src/headers/24/trace_event_common.h +1109 -0
- 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/24/tty_wrap.h +65 -0
- package/src/headers/24/udp_wrap.h +230 -0
- package/src/headers/24/undici_version.h +6 -0
- package/src/headers/24/util-inl.h +711 -0
- package/src/headers/24/util.h +1016 -0
- 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
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#ifndef SRC_CRYPTO_CRYPTO_X509_H_
|
|
2
|
+
#define SRC_CRYPTO_CRYPTO_X509_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "base_object.h"
|
|
7
|
+
#include "crypto/crypto_util.h"
|
|
8
|
+
#include "env.h"
|
|
9
|
+
#include "memory_tracker.h"
|
|
10
|
+
#include "ncrypto.h"
|
|
11
|
+
#include "node_worker.h"
|
|
12
|
+
#include "v8.h"
|
|
13
|
+
|
|
14
|
+
namespace node {
|
|
15
|
+
namespace crypto {
|
|
16
|
+
|
|
17
|
+
// The ManagedX509 class is essentially a smart pointer for
|
|
18
|
+
// X509 objects that allows an X509Certificate instance to
|
|
19
|
+
// be cloned at the JS level while pointing at the same
|
|
20
|
+
// underlying X509 instance.
|
|
21
|
+
class ManagedX509 final : public MemoryRetainer {
|
|
22
|
+
public:
|
|
23
|
+
ManagedX509() = default;
|
|
24
|
+
explicit ManagedX509(ncrypto::X509Pointer&& cert);
|
|
25
|
+
ManagedX509(const ManagedX509& that);
|
|
26
|
+
ManagedX509& operator=(const ManagedX509& that);
|
|
27
|
+
|
|
28
|
+
inline operator bool() const { return !!cert_; }
|
|
29
|
+
inline X509* get() const { return cert_.get(); }
|
|
30
|
+
inline ncrypto::X509View view() const { return cert_; }
|
|
31
|
+
inline operator ncrypto::X509View() const { return cert_; }
|
|
32
|
+
|
|
33
|
+
void MemoryInfo(MemoryTracker* tracker) const override;
|
|
34
|
+
SET_MEMORY_INFO_NAME(ManagedX509)
|
|
35
|
+
SET_SELF_SIZE(ManagedX509)
|
|
36
|
+
|
|
37
|
+
private:
|
|
38
|
+
ncrypto::X509Pointer cert_;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
class X509Certificate final : public BaseObject {
|
|
42
|
+
public:
|
|
43
|
+
enum class GetPeerCertificateFlag {
|
|
44
|
+
NONE,
|
|
45
|
+
SERVER
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
static void Initialize(Environment* env, v8::Local<v8::Object> target);
|
|
49
|
+
static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
|
|
50
|
+
static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
|
|
51
|
+
Environment* env);
|
|
52
|
+
static bool HasInstance(Environment* env, v8::Local<v8::Object> object);
|
|
53
|
+
|
|
54
|
+
static v8::MaybeLocal<v8::Object> New(
|
|
55
|
+
Environment* env,
|
|
56
|
+
ncrypto::X509Pointer cert,
|
|
57
|
+
STACK_OF(X509) * issuer_chain = nullptr);
|
|
58
|
+
|
|
59
|
+
static v8::MaybeLocal<v8::Object> New(
|
|
60
|
+
Environment* env,
|
|
61
|
+
std::shared_ptr<ManagedX509> cert,
|
|
62
|
+
STACK_OF(X509)* issuer_chain = nullptr);
|
|
63
|
+
|
|
64
|
+
static v8::MaybeLocal<v8::Object> GetCert(Environment* env,
|
|
65
|
+
const ncrypto::SSLPointer& ssl);
|
|
66
|
+
|
|
67
|
+
static v8::MaybeLocal<v8::Object> GetPeerCert(Environment* env,
|
|
68
|
+
const ncrypto::SSLPointer& ssl,
|
|
69
|
+
GetPeerCertificateFlag flag);
|
|
70
|
+
|
|
71
|
+
static v8::Local<v8::Object> Wrap(Environment* env,
|
|
72
|
+
v8::Local<v8::Object> object,
|
|
73
|
+
ncrypto::X509Pointer cert);
|
|
74
|
+
|
|
75
|
+
inline BaseObjectPtr<X509Certificate> getIssuerCert() const {
|
|
76
|
+
return issuer_cert_;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
inline ncrypto::X509View view() const { return *cert_; }
|
|
80
|
+
inline X509* get() { return cert_->get(); }
|
|
81
|
+
|
|
82
|
+
v8::MaybeLocal<v8::Value> toObject(Environment* env);
|
|
83
|
+
static v8::MaybeLocal<v8::Value> toObject(Environment* env,
|
|
84
|
+
const ncrypto::X509View& cert);
|
|
85
|
+
|
|
86
|
+
void MemoryInfo(MemoryTracker* tracker) const override;
|
|
87
|
+
SET_MEMORY_INFO_NAME(X509Certificate)
|
|
88
|
+
SET_SELF_SIZE(X509Certificate)
|
|
89
|
+
|
|
90
|
+
class X509CertificateTransferData : public worker::TransferData {
|
|
91
|
+
public:
|
|
92
|
+
explicit X509CertificateTransferData(
|
|
93
|
+
const std::shared_ptr<ManagedX509>& data)
|
|
94
|
+
: data_(data) {}
|
|
95
|
+
|
|
96
|
+
BaseObjectPtr<BaseObject> Deserialize(
|
|
97
|
+
Environment* env,
|
|
98
|
+
v8::Local<v8::Context> context,
|
|
99
|
+
std::unique_ptr<worker::TransferData> self) override;
|
|
100
|
+
|
|
101
|
+
SET_MEMORY_INFO_NAME(X509CertificateTransferData)
|
|
102
|
+
SET_SELF_SIZE(X509CertificateTransferData)
|
|
103
|
+
SET_NO_MEMORY_INFO()
|
|
104
|
+
|
|
105
|
+
private:
|
|
106
|
+
std::shared_ptr<ManagedX509> data_;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
BaseObject::TransferMode GetTransferMode() const override;
|
|
110
|
+
std::unique_ptr<worker::TransferData> CloneForMessaging() const override;
|
|
111
|
+
|
|
112
|
+
private:
|
|
113
|
+
X509Certificate(Environment* env,
|
|
114
|
+
v8::Local<v8::Object> object,
|
|
115
|
+
std::shared_ptr<ManagedX509> cert,
|
|
116
|
+
v8::Local<v8::Object> issuer_chain = v8::Local<v8::Object>());
|
|
117
|
+
|
|
118
|
+
std::shared_ptr<ManagedX509> cert_;
|
|
119
|
+
BaseObjectPtr<X509Certificate> issuer_cert_;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
inline X509Certificate::GetPeerCertificateFlag operator|(
|
|
123
|
+
X509Certificate::GetPeerCertificateFlag lhs,
|
|
124
|
+
X509Certificate::GetPeerCertificateFlag rhs) {
|
|
125
|
+
return static_cast<X509Certificate::GetPeerCertificateFlag>(
|
|
126
|
+
static_cast<int>(lhs) | static_cast<int>(rhs));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
inline X509Certificate::GetPeerCertificateFlag operator&(
|
|
130
|
+
X509Certificate::GetPeerCertificateFlag lhs,
|
|
131
|
+
X509Certificate::GetPeerCertificateFlag rhs) {
|
|
132
|
+
return static_cast<X509Certificate::GetPeerCertificateFlag>(
|
|
133
|
+
static_cast<int>(lhs) & static_cast<int>(rhs));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
} // namespace crypto
|
|
137
|
+
} // namespace node
|
|
138
|
+
|
|
139
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
140
|
+
#endif // SRC_CRYPTO_CRYPTO_X509_H_
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
4
|
+
#if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
|
|
5
|
+
|
|
6
|
+
#include <env.h>
|
|
7
|
+
#include <memory_tracker.h>
|
|
8
|
+
#include <nghttp3/nghttp3.h>
|
|
9
|
+
#include <ngtcp2/ngtcp2.h>
|
|
10
|
+
#include <node_internals.h>
|
|
11
|
+
#include <node_sockaddr.h>
|
|
12
|
+
#include <v8.h>
|
|
13
|
+
#include <string>
|
|
14
|
+
#include "defs.h"
|
|
15
|
+
|
|
16
|
+
namespace node::quic {
|
|
17
|
+
|
|
18
|
+
struct Path final : public ngtcp2_path {
|
|
19
|
+
Path(const SocketAddress& local, const SocketAddress& remote);
|
|
20
|
+
inline operator ngtcp2_path*() { return this; }
|
|
21
|
+
std::string ToString() const;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
struct PathStorage final : public ngtcp2_path_storage {
|
|
25
|
+
PathStorage();
|
|
26
|
+
operator ngtcp2_path();
|
|
27
|
+
|
|
28
|
+
void Reset();
|
|
29
|
+
void CopyTo(PathStorage* path) const;
|
|
30
|
+
|
|
31
|
+
bool operator==(const PathStorage& other) const;
|
|
32
|
+
bool operator!=(const PathStorage& other) const;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
class Store final : public MemoryRetainer {
|
|
36
|
+
public:
|
|
37
|
+
Store() = default;
|
|
38
|
+
|
|
39
|
+
Store(std::shared_ptr<v8::BackingStore> store,
|
|
40
|
+
size_t length,
|
|
41
|
+
size_t offset = 0);
|
|
42
|
+
Store(std::unique_ptr<v8::BackingStore> store,
|
|
43
|
+
size_t length,
|
|
44
|
+
size_t offset = 0);
|
|
45
|
+
|
|
46
|
+
enum class Option {
|
|
47
|
+
NONE,
|
|
48
|
+
DETACH,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
Store(v8::Local<v8::ArrayBuffer> buffer, Option option = Option::NONE);
|
|
52
|
+
Store(v8::Local<v8::ArrayBufferView> view, Option option = Option::NONE);
|
|
53
|
+
|
|
54
|
+
v8::Local<v8::Uint8Array> ToUint8Array(Environment* env) const;
|
|
55
|
+
|
|
56
|
+
operator uv_buf_t() const;
|
|
57
|
+
operator ngtcp2_vec() const;
|
|
58
|
+
operator nghttp3_vec() const;
|
|
59
|
+
operator bool() const;
|
|
60
|
+
size_t length() const;
|
|
61
|
+
|
|
62
|
+
void MemoryInfo(MemoryTracker* tracker) const override;
|
|
63
|
+
SET_MEMORY_INFO_NAME(Store)
|
|
64
|
+
SET_SELF_SIZE(Store)
|
|
65
|
+
|
|
66
|
+
private:
|
|
67
|
+
template <typename T, typename t>
|
|
68
|
+
T convert() const;
|
|
69
|
+
std::shared_ptr<v8::BackingStore> store_;
|
|
70
|
+
size_t length_ = 0;
|
|
71
|
+
size_t offset_ = 0;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
class QuicError final : public MemoryRetainer {
|
|
75
|
+
public:
|
|
76
|
+
static constexpr error_code QUIC_NO_ERROR = NGTCP2_NO_ERROR;
|
|
77
|
+
static constexpr error_code QUIC_APP_NO_ERROR = 65280;
|
|
78
|
+
|
|
79
|
+
enum class Type {
|
|
80
|
+
TRANSPORT = NGTCP2_CCERR_TYPE_TRANSPORT,
|
|
81
|
+
APPLICATION = NGTCP2_CCERR_TYPE_APPLICATION,
|
|
82
|
+
VERSION_NEGOTIATION = NGTCP2_CCERR_TYPE_VERSION_NEGOTIATION,
|
|
83
|
+
IDLE_CLOSE = NGTCP2_CCERR_TYPE_IDLE_CLOSE,
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
explicit QuicError(const std::string& reason = "");
|
|
87
|
+
explicit QuicError(const ngtcp2_ccerr* ptr);
|
|
88
|
+
explicit QuicError(const ngtcp2_ccerr& error);
|
|
89
|
+
|
|
90
|
+
Type type() const;
|
|
91
|
+
error_code code() const;
|
|
92
|
+
const std::string_view reason() const;
|
|
93
|
+
uint64_t frame_type() const;
|
|
94
|
+
|
|
95
|
+
operator const ngtcp2_ccerr&() const;
|
|
96
|
+
operator const ngtcp2_ccerr*() const;
|
|
97
|
+
|
|
98
|
+
// Returns false if the QuicError uses a no_error code with type
|
|
99
|
+
// transport or application.
|
|
100
|
+
operator bool() const;
|
|
101
|
+
|
|
102
|
+
bool is_crypto() const;
|
|
103
|
+
std::optional<int> crypto_error() const;
|
|
104
|
+
|
|
105
|
+
bool operator==(const QuicError& other) const;
|
|
106
|
+
bool operator!=(const QuicError& other) const;
|
|
107
|
+
|
|
108
|
+
void MemoryInfo(MemoryTracker* tracker) const override;
|
|
109
|
+
SET_MEMORY_INFO_NAME(QuicError)
|
|
110
|
+
SET_SELF_SIZE(QuicError)
|
|
111
|
+
|
|
112
|
+
std::string ToString() const;
|
|
113
|
+
v8::MaybeLocal<v8::Value> ToV8Value(Environment* env) const;
|
|
114
|
+
|
|
115
|
+
static std::string reason_for_liberr(int liberr);
|
|
116
|
+
static std::string reason_for_h3_liberr(int liberr);
|
|
117
|
+
static bool is_fatal_liberror(int liberr);
|
|
118
|
+
static bool is_fatal_h3_liberror(int liberr);
|
|
119
|
+
static error_code liberr_to_code(int liberr);
|
|
120
|
+
static error_code h3_liberr_to_code(int liberr);
|
|
121
|
+
|
|
122
|
+
static QuicError ForTransport(error_code code, std::string reason = "");
|
|
123
|
+
static QuicError ForApplication(error_code code, std::string reason = "");
|
|
124
|
+
static QuicError ForVersionNegotiation(std::string reason = "");
|
|
125
|
+
static QuicError ForIdleClose(std::string reason = "");
|
|
126
|
+
static QuicError ForNgtcp2Error(int code, std::string reason = "");
|
|
127
|
+
static QuicError ForTlsAlert(int code, std::string reason = "");
|
|
128
|
+
|
|
129
|
+
static QuicError FromConnectionClose(ngtcp2_conn* session);
|
|
130
|
+
|
|
131
|
+
static QuicError TRANSPORT_NO_ERROR;
|
|
132
|
+
static QuicError APPLICATION_NO_ERROR;
|
|
133
|
+
static QuicError VERSION_NEGOTIATION;
|
|
134
|
+
static QuicError IDLE_CLOSE;
|
|
135
|
+
static QuicError INTERNAL_ERROR;
|
|
136
|
+
|
|
137
|
+
private:
|
|
138
|
+
const uint8_t* reason_c_str() const;
|
|
139
|
+
|
|
140
|
+
std::string reason_;
|
|
141
|
+
ngtcp2_ccerr error_;
|
|
142
|
+
const ngtcp2_ccerr* ptr_ = nullptr;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
} // namespace node::quic
|
|
146
|
+
|
|
147
|
+
#endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
|
|
148
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
#ifndef SRC_DEBUG_UTILS_INL_H_
|
|
2
|
+
#define SRC_DEBUG_UTILS_INL_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "debug_utils.h"
|
|
7
|
+
#include "env.h"
|
|
8
|
+
#include "util-inl.h"
|
|
9
|
+
|
|
10
|
+
#include <type_traits>
|
|
11
|
+
|
|
12
|
+
namespace node {
|
|
13
|
+
|
|
14
|
+
struct ToStringHelper {
|
|
15
|
+
template <typename T>
|
|
16
|
+
static std::string Convert(
|
|
17
|
+
const T& value,
|
|
18
|
+
std::string(T::* to_string)() const = &T::ToString) {
|
|
19
|
+
return (value.*to_string)();
|
|
20
|
+
}
|
|
21
|
+
template <typename T,
|
|
22
|
+
typename test_for_number = typename std::
|
|
23
|
+
enable_if<std::is_arithmetic<T>::value, bool>::type,
|
|
24
|
+
typename dummy = bool>
|
|
25
|
+
static std::string Convert(const T& value) { return std::to_string(value); }
|
|
26
|
+
static std::string Convert(const char* value) {
|
|
27
|
+
return value != nullptr ? value : "(null)";
|
|
28
|
+
}
|
|
29
|
+
static std::string Convert(const std::string& value) { return value; }
|
|
30
|
+
static std::string Convert(std::string_view value) {
|
|
31
|
+
return std::string(value);
|
|
32
|
+
}
|
|
33
|
+
static std::string Convert(bool value) { return value ? "true" : "false"; }
|
|
34
|
+
template <unsigned BASE_BITS,
|
|
35
|
+
typename T,
|
|
36
|
+
typename = std::enable_if_t<std::is_integral_v<T>>>
|
|
37
|
+
static std::string BaseConvert(const T& value) {
|
|
38
|
+
auto v = static_cast<uint64_t>(value);
|
|
39
|
+
char ret[3 * sizeof(T)];
|
|
40
|
+
char* ptr = ret + 3 * sizeof(T) - 1;
|
|
41
|
+
*ptr = '\0';
|
|
42
|
+
const char* digits = "0123456789abcdef";
|
|
43
|
+
do {
|
|
44
|
+
unsigned digit = v & ((1 << BASE_BITS) - 1);
|
|
45
|
+
*--ptr =
|
|
46
|
+
(BASE_BITS < 4 ? static_cast<char>('0' + digit) : digits[digit]);
|
|
47
|
+
} while ((v >>= BASE_BITS) != 0);
|
|
48
|
+
return ptr;
|
|
49
|
+
}
|
|
50
|
+
template <unsigned BASE_BITS,
|
|
51
|
+
typename T,
|
|
52
|
+
typename = std::enable_if_t<!std::is_integral_v<T>>>
|
|
53
|
+
static std::string BaseConvert(T& value) { // NOLINT(runtime/references)
|
|
54
|
+
return Convert(std::forward<T>(value));
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
template <typename T>
|
|
59
|
+
std::string ToString(const T& value) {
|
|
60
|
+
return ToStringHelper::Convert(value);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
template <unsigned BASE_BITS, typename T>
|
|
64
|
+
std::string ToBaseString(const T& value) {
|
|
65
|
+
return ToStringHelper::BaseConvert<BASE_BITS>(value);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
inline std::string SPrintFImpl(const char* format) {
|
|
69
|
+
const char* p = strchr(format, '%');
|
|
70
|
+
if (p == nullptr) [[unlikely]]
|
|
71
|
+
return format;
|
|
72
|
+
CHECK_EQ(p[1], '%'); // Only '%%' allowed when there are no arguments.
|
|
73
|
+
|
|
74
|
+
return std::string(format, p + 1) + SPrintFImpl(p + 2);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
template <typename Arg, typename... Args>
|
|
78
|
+
std::string COLD_NOINLINE SPrintFImpl( // NOLINT(runtime/string)
|
|
79
|
+
const char* format, Arg&& arg, Args&&... args) {
|
|
80
|
+
const char* p = strchr(format, '%');
|
|
81
|
+
CHECK_NOT_NULL(p); // If you hit this, you passed in too many arguments.
|
|
82
|
+
std::string ret(format, p);
|
|
83
|
+
// Ignore long / size_t modifiers
|
|
84
|
+
while (strchr("lz", *++p) != nullptr) {}
|
|
85
|
+
switch (*p) {
|
|
86
|
+
case '%': {
|
|
87
|
+
return ret + '%' + SPrintFImpl(p + 1,
|
|
88
|
+
std::forward<Arg>(arg),
|
|
89
|
+
std::forward<Args>(args)...);
|
|
90
|
+
}
|
|
91
|
+
default: {
|
|
92
|
+
return ret + '%' + SPrintFImpl(p,
|
|
93
|
+
std::forward<Arg>(arg),
|
|
94
|
+
std::forward<Args>(args)...);
|
|
95
|
+
}
|
|
96
|
+
case 'd':
|
|
97
|
+
case 'i':
|
|
98
|
+
case 'u':
|
|
99
|
+
case 's':
|
|
100
|
+
ret += ToString(arg);
|
|
101
|
+
break;
|
|
102
|
+
case 'o':
|
|
103
|
+
ret += ToBaseString<3>(arg);
|
|
104
|
+
break;
|
|
105
|
+
case 'x':
|
|
106
|
+
ret += ToBaseString<4>(arg);
|
|
107
|
+
break;
|
|
108
|
+
case 'X':
|
|
109
|
+
ret += node::ToUpper(ToBaseString<4>(arg));
|
|
110
|
+
break;
|
|
111
|
+
case 'p': {
|
|
112
|
+
CHECK(std::is_pointer<typename std::remove_reference<Arg>::type>::value);
|
|
113
|
+
char out[20];
|
|
114
|
+
int n = snprintf(out,
|
|
115
|
+
sizeof(out),
|
|
116
|
+
"%p",
|
|
117
|
+
*reinterpret_cast<const void* const*>(&arg));
|
|
118
|
+
CHECK_GE(n, 0);
|
|
119
|
+
ret += out;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return ret + SPrintFImpl(p + 1, std::forward<Args>(args)...);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
template <typename... Args>
|
|
127
|
+
std::string COLD_NOINLINE SPrintF( // NOLINT(runtime/string)
|
|
128
|
+
const char* format, Args&&... args) {
|
|
129
|
+
return SPrintFImpl(format, std::forward<Args>(args)...);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
template <typename... Args>
|
|
133
|
+
void COLD_NOINLINE FPrintF(FILE* file, const char* format, Args&&... args) {
|
|
134
|
+
FWrite(file, SPrintF(format, std::forward<Args>(args)...));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
template <typename... Args>
|
|
138
|
+
inline void FORCE_INLINE Debug(EnabledDebugList* list,
|
|
139
|
+
DebugCategory cat,
|
|
140
|
+
const char* format,
|
|
141
|
+
Args&&... args) {
|
|
142
|
+
if (!list->enabled(cat)) [[unlikely]]
|
|
143
|
+
return;
|
|
144
|
+
FPrintF(stderr, format, std::forward<Args>(args)...);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
inline void FORCE_INLINE Debug(EnabledDebugList* list,
|
|
148
|
+
DebugCategory cat,
|
|
149
|
+
const char* message) {
|
|
150
|
+
if (!list->enabled(cat)) [[unlikely]]
|
|
151
|
+
return;
|
|
152
|
+
FPrintF(stderr, "%s", message);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
template <typename... Args>
|
|
156
|
+
inline void FORCE_INLINE
|
|
157
|
+
Debug(Environment* env, DebugCategory cat, const char* format, Args&&... args) {
|
|
158
|
+
Debug(env->enabled_debug_list(), cat, format, std::forward<Args>(args)...);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
inline void FORCE_INLINE Debug(Environment* env,
|
|
162
|
+
DebugCategory cat,
|
|
163
|
+
const char* message) {
|
|
164
|
+
Debug(env->enabled_debug_list(), cat, message);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
template <typename... Args>
|
|
168
|
+
inline void Debug(Environment* env,
|
|
169
|
+
DebugCategory cat,
|
|
170
|
+
const std::string& format,
|
|
171
|
+
Args&&... args) {
|
|
172
|
+
Debug(env->enabled_debug_list(),
|
|
173
|
+
cat,
|
|
174
|
+
format.c_str(),
|
|
175
|
+
std::forward<Args>(args)...);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Used internally by the 'real' Debug(AsyncWrap*, ...) functions below, so that
|
|
179
|
+
// the FORCE_INLINE flag on them doesn't apply to the contents of this function
|
|
180
|
+
// as well.
|
|
181
|
+
// We apply COLD_NOINLINE to tell the compiler that it's not worth optimizing
|
|
182
|
+
// this function for speed and it should rather focus on keeping it out of
|
|
183
|
+
// hot code paths. In particular, we want to keep the string concatenating code
|
|
184
|
+
// out of the function containing the original `Debug()` call.
|
|
185
|
+
template <typename... Args>
|
|
186
|
+
void COLD_NOINLINE UnconditionalAsyncWrapDebug(AsyncWrap* async_wrap,
|
|
187
|
+
const char* format,
|
|
188
|
+
Args&&... args) {
|
|
189
|
+
Debug(async_wrap->env(),
|
|
190
|
+
static_cast<DebugCategory>(async_wrap->provider_type()),
|
|
191
|
+
async_wrap->diagnostic_name() + " " + format + "\n",
|
|
192
|
+
std::forward<Args>(args)...);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
template <typename... Args>
|
|
196
|
+
inline void FORCE_INLINE Debug(AsyncWrap* async_wrap,
|
|
197
|
+
const char* format,
|
|
198
|
+
Args&&... args) {
|
|
199
|
+
DCHECK_NOT_NULL(async_wrap);
|
|
200
|
+
if (auto cat = static_cast<DebugCategory>(async_wrap->provider_type());
|
|
201
|
+
!async_wrap->env()->enabled_debug_list()->enabled(cat)) [[unlikely]] {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
UnconditionalAsyncWrapDebug(async_wrap, format, std::forward<Args>(args)...);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
template <typename... Args>
|
|
208
|
+
inline void FORCE_INLINE Debug(AsyncWrap* async_wrap,
|
|
209
|
+
const std::string& format,
|
|
210
|
+
Args&&... args) {
|
|
211
|
+
Debug(async_wrap, format.c_str(), std::forward<Args>(args)...);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
namespace per_process {
|
|
215
|
+
|
|
216
|
+
template <typename... Args>
|
|
217
|
+
inline void FORCE_INLINE Debug(DebugCategory cat,
|
|
218
|
+
const char* format,
|
|
219
|
+
Args&&... args) {
|
|
220
|
+
Debug(&enabled_debug_list, cat, format, std::forward<Args>(args)...);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
inline void FORCE_INLINE Debug(DebugCategory cat, const char* message) {
|
|
224
|
+
Debug(&enabled_debug_list, cat, message);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
} // namespace per_process
|
|
228
|
+
} // namespace node
|
|
229
|
+
|
|
230
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
231
|
+
|
|
232
|
+
#endif // SRC_DEBUG_UTILS_INL_H_
|