@encharm/cws 4.5.2 → 4.6.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/CHANGELOG.md +9 -0
- package/CLAUDE.md +81 -0
- package/README.md +10 -5
- package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node147.node +0 -0
- package/dist/bindings/cws_linux_arm64_node115.node +0 -0
- package/dist/bindings/cws_linux_arm64_node127.node +0 -0
- package/dist/bindings/cws_linux_arm64_node137.node +0 -0
- package/dist/bindings/cws_linux_arm64_node147.node +0 -0
- package/dist/bindings/cws_linux_x64_node115.node +0 -0
- package/dist/bindings/cws_linux_x64_node127.node +0 -0
- package/dist/bindings/cws_linux_x64_node137.node +0 -0
- package/dist/bindings/cws_linux_x64_node147.node +0 -0
- package/dist/bindings/cws_win32_x64_node115.node +0 -0
- package/dist/bindings/cws_win32_x64_node127.node +0 -0
- package/dist/bindings/cws_win32_x64_node137.node +0 -0
- package/dist/bindings/cws_win32_x64_node147.node +0 -0
- package/package.json +1 -1
- package/src/Addon.cpp +2 -1
- package/src/Addon.h +70 -14
- package/src/Hub.h +1 -0
- package/src/Networking.h +11 -0
- package/src/Socket.h +201 -6
- package/src/WebSocket.cpp +4 -1
- package/src/cSNode.cpp +2 -0
- package/src/cSNode.h +4 -0
- package/src/headers/24/tracing/agent.h +195 -0
- package/src/headers/24/tracing/trace_event.h +722 -0
- package/src/headers/26/acorn_version.h +6 -0
- package/src/headers/26/aliased_buffer-inl.h +264 -0
- package/src/headers/26/aliased_buffer.h +205 -0
- package/src/headers/26/aliased_struct-inl.h +143 -0
- package/src/headers/26/aliased_struct.h +248 -0
- package/src/headers/26/amaro_version.h +6 -0
- package/src/headers/26/async_context_frame.h +33 -0
- package/src/headers/26/async_wrap-inl.h +123 -0
- package/src/headers/26/async_wrap.h +254 -0
- package/src/headers/26/base_object-inl.h +333 -0
- package/src/headers/26/base_object.h +339 -0
- package/src/headers/26/base_object_types.h +76 -0
- package/src/headers/26/blob_serializer_deserializer-inl.h +385 -0
- package/src/headers/26/blob_serializer_deserializer.h +142 -0
- package/src/headers/26/builtin_info.h +57 -0
- package/src/headers/26/callback_queue-inl.h +97 -0
- package/src/headers/26/callback_queue.h +79 -0
- package/src/headers/26/cares_wrap.h +475 -0
- package/src/headers/26/cleanup_queue-inl.h +36 -0
- package/src/headers/26/cleanup_queue.h +79 -0
- package/src/headers/26/compile_cache.h +134 -0
- package/src/headers/26/connect_wrap.h +26 -0
- package/src/headers/26/connection_wrap.h +30 -0
- package/src/headers/26/cppgc_helpers-inl.h +69 -0
- package/src/headers/26/cppgc_helpers.h +162 -0
- package/src/headers/26/crypto/crypto_aes.h +107 -0
- package/src/headers/26/crypto/crypto_argon2.h +88 -0
- package/src/headers/26/crypto/crypto_bio.h +193 -0
- package/src/headers/26/crypto/crypto_chacha20_poly1305.h +62 -0
- package/src/headers/26/crypto/crypto_cipher.h +291 -0
- package/src/headers/26/crypto/crypto_common.h +48 -0
- package/src/headers/26/crypto/crypto_context.h +219 -0
- package/src/headers/26/crypto/crypto_dh.h +104 -0
- package/src/headers/26/crypto/crypto_dsa.h +50 -0
- package/src/headers/26/crypto/crypto_ec.h +102 -0
- package/src/headers/26/crypto/crypto_hash.h +157 -0
- package/src/headers/26/crypto/crypto_hkdf.h +62 -0
- package/src/headers/26/crypto/crypto_hmac.h +92 -0
- package/src/headers/26/crypto/crypto_kem.h +131 -0
- package/src/headers/26/crypto/crypto_keygen.h +382 -0
- package/src/headers/26/crypto/crypto_keys.h +366 -0
- package/src/headers/26/crypto/crypto_kmac.h +79 -0
- package/src/headers/26/crypto/crypto_pbkdf2.h +76 -0
- package/src/headers/26/crypto/crypto_pqc.h +39 -0
- package/src/headers/26/crypto/crypto_random.h +127 -0
- package/src/headers/26/crypto/crypto_rsa.h +108 -0
- package/src/headers/26/crypto/crypto_scrypt.h +85 -0
- package/src/headers/26/crypto/crypto_sig.h +159 -0
- package/src/headers/26/crypto/crypto_spkac.h +21 -0
- package/src/headers/26/crypto/crypto_timing.h +20 -0
- package/src/headers/26/crypto/crypto_tls.h +342 -0
- package/src/headers/26/crypto/crypto_turboshake.h +105 -0
- package/src/headers/26/crypto/crypto_util.h +775 -0
- package/src/headers/26/crypto/crypto_x509.h +140 -0
- package/src/headers/26/dataqueue/queue.h +311 -0
- package/src/headers/26/debug_utils-inl.h +291 -0
- package/src/headers/26/debug_utils.h +200 -0
- package/src/headers/26/diagnosticfilename-inl.h +33 -0
- package/src/headers/26/embedded_data.h +17 -0
- package/src/headers/26/encoding_binding.h +59 -0
- package/src/headers/26/env-inl.h +956 -0
- package/src/headers/26/env.h +1294 -0
- package/src/headers/26/env_properties.h +562 -0
- package/src/headers/26/ffi/data.h +30 -0
- package/src/headers/26/ffi/fast.h +96 -0
- package/src/headers/26/ffi/jit_memory.h +26 -0
- package/src/headers/26/ffi/types.h +99 -0
- package/src/headers/26/handle_wrap.h +123 -0
- package/src/headers/26/histogram-inl.h +211 -0
- package/src/headers/26/histogram.h +474 -0
- package/src/headers/26/inspector/dom_storage_agent.h +68 -0
- package/src/headers/26/inspector/inspector_object_utils.h +38 -0
- package/src/headers/26/inspector/io_agent.h +30 -0
- package/src/headers/26/inspector/main_thread_interface.h +116 -0
- package/src/headers/26/inspector/network_agent.h +110 -0
- package/src/headers/26/inspector/network_inspector.h +45 -0
- package/src/headers/26/inspector/network_requests_buffer.h +195 -0
- package/src/headers/26/inspector/network_resource_manager.h +29 -0
- package/src/headers/26/inspector/node_json.h +24 -0
- package/src/headers/26/inspector/node_string.h +101 -0
- package/src/headers/26/inspector/notification_emitter.h +38 -0
- package/src/headers/26/inspector/protocol_helper.h +27 -0
- package/src/headers/26/inspector/runtime_agent.h +41 -0
- package/src/headers/26/inspector/storage_agent.h +33 -0
- package/src/headers/26/inspector/target_agent.h +59 -0
- package/src/headers/26/inspector/target_manager.h +70 -0
- package/src/headers/26/inspector/tracing_agent.h +43 -0
- package/src/headers/26/inspector/worker_agent.h +40 -0
- package/src/headers/26/inspector/worker_inspector.h +124 -0
- package/src/headers/26/inspector_agent.h +168 -0
- package/src/headers/26/inspector_io.h +78 -0
- package/src/headers/26/inspector_profiler.h +149 -0
- package/src/headers/26/inspector_socket.h +60 -0
- package/src/headers/26/inspector_socket_server.h +110 -0
- package/src/headers/26/js_native_api.h +634 -0
- package/src/headers/26/js_native_api_types.h +244 -0
- package/src/headers/26/js_native_api_v8.h +485 -0
- package/src/headers/26/js_native_api_v8_internals.h +45 -0
- package/src/headers/26/js_stream.h +57 -0
- package/src/headers/26/json_utils.h +172 -0
- package/src/headers/26/large_pages/node_large_page.h +34 -0
- package/src/headers/26/lru_cache-inl.h +69 -0
- package/src/headers/26/memory_tracker-inl.h +461 -0
- package/src/headers/26/memory_tracker.h +341 -0
- package/src/headers/26/module_wrap.h +231 -0
- package/src/headers/26/ncrypto.h +2008 -0
- package/src/headers/26/node.h +1693 -0
- package/src/headers/26/node_api.h +265 -0
- package/src/headers/26/node_api_internals.h +48 -0
- package/src/headers/26/node_api_types.h +58 -0
- package/src/headers/26/node_binding.h +170 -0
- package/src/headers/26/node_blob.h +160 -0
- package/src/headers/26/node_bob-inl.h +36 -0
- package/src/headers/26/node_bob.h +107 -0
- package/src/headers/26/node_buffer.h +92 -0
- package/src/headers/26/node_builtins.h +239 -0
- package/src/headers/26/node_concepts.h +46 -0
- package/src/headers/26/node_config_file.h +77 -0
- package/src/headers/26/node_constants.h +82 -0
- package/src/headers/26/node_context_data.h +171 -0
- package/src/headers/26/node_contextify.h +261 -0
- package/src/headers/26/node_crypto.h +66 -0
- package/src/headers/26/node_debug.h +30 -0
- package/src/headers/26/node_diagnostics_channel.h +121 -0
- package/src/headers/26/node_dir.h +52 -0
- package/src/headers/26/node_dotenv.h +45 -0
- package/src/headers/26/node_errors.h +378 -0
- package/src/headers/26/node_exit_code.h +54 -0
- package/src/headers/26/node_external_reference.h +171 -0
- package/src/headers/26/node_ffi.h +212 -0
- package/src/headers/26/node_file-inl.h +421 -0
- package/src/headers/26/node_file.h +561 -0
- package/src/headers/26/node_file_utils.h +39 -0
- package/src/headers/26/node_hash.h +212 -0
- package/src/headers/26/node_http2.h +1202 -0
- package/src/headers/26/node_http2_state.h +159 -0
- package/src/headers/26/node_http_common-inl.h +199 -0
- package/src/headers/26/node_http_common.h +535 -0
- package/src/headers/26/node_i18n.h +132 -0
- package/src/headers/26/node_internals.h +485 -0
- package/src/headers/26/node_locks.h +184 -0
- package/src/headers/26/node_main_instance.h +67 -0
- package/src/headers/26/node_mem-inl.h +113 -0
- package/src/headers/26/node_mem.h +45 -0
- package/src/headers/26/node_messaging.h +389 -0
- package/src/headers/26/node_metadata.h +172 -0
- package/src/headers/26/node_modules.h +102 -0
- package/src/headers/26/node_mutex.h +323 -0
- package/src/headers/26/node_object_wrap.h +145 -0
- package/src/headers/26/node_options-inl.h +524 -0
- package/src/headers/26/node_options.h +710 -0
- package/src/headers/26/node_perf.h +167 -0
- package/src/headers/26/node_perf_common.h +103 -0
- package/src/headers/26/node_platform.h +290 -0
- package/src/headers/26/node_process-inl.h +26 -0
- package/src/headers/26/node_process.h +112 -0
- package/src/headers/26/node_profiling.h +38 -0
- package/src/headers/26/node_realm-inl.h +156 -0
- package/src/headers/26/node_realm.h +236 -0
- package/src/headers/26/node_report.h +43 -0
- package/src/headers/26/node_revert.h +82 -0
- package/src/headers/26/node_root_certs.h +2937 -0
- package/src/headers/26/node_sea.h +101 -0
- package/src/headers/26/node_shadow_realm.h +46 -0
- package/src/headers/26/node_snapshot_builder.h +57 -0
- package/src/headers/26/node_snapshotable.h +167 -0
- package/src/headers/26/node_sockaddr-inl.h +248 -0
- package/src/headers/26/node_sockaddr.h +459 -0
- package/src/headers/26/node_sqlite.h +607 -0
- package/src/headers/26/node_stat_watcher.h +73 -0
- package/src/headers/26/node_task_runner.h +92 -0
- package/src/headers/26/node_threadsafe_cow-inl.h +54 -0
- package/src/headers/26/node_threadsafe_cow.h +105 -0
- package/src/headers/26/node_union_bytes.h +81 -0
- package/src/headers/26/node_url.h +101 -0
- package/src/headers/26/node_url_pattern.h +118 -0
- package/src/headers/26/node_v8.h +78 -0
- package/src/headers/26/node_v8_embedder.h +26 -0
- package/src/headers/26/node_v8_platform-inl.h +96 -0
- package/src/headers/26/node_version.h +116 -0
- package/src/headers/26/node_wasi.h +184 -0
- package/src/headers/26/node_wasm_web_api.h +55 -0
- package/src/headers/26/node_watchdog.h +164 -0
- package/src/headers/26/node_webstorage.h +62 -0
- package/src/headers/26/node_worker.h +162 -0
- package/src/headers/26/path.h +36 -0
- package/src/headers/26/permission/boolean_permission.h +50 -0
- package/src/headers/26/permission/fs_permission.h +192 -0
- package/src/headers/26/permission/permission.h +155 -0
- package/src/headers/26/permission/permission_base.h +79 -0
- package/src/headers/26/pipe_wrap.h +80 -0
- package/src/headers/26/quic/application.h +279 -0
- package/src/headers/26/quic/arena.h +373 -0
- package/src/headers/26/quic/bindingdata.h +440 -0
- package/src/headers/26/quic/cid.h +127 -0
- package/src/headers/26/quic/data.h +358 -0
- package/src/headers/26/quic/defs.h +417 -0
- package/src/headers/26/quic/endpoint.h +519 -0
- package/src/headers/26/quic/guard.h +5 -0
- package/src/headers/26/quic/http3.h +25 -0
- package/src/headers/26/quic/packet.h +166 -0
- package/src/headers/26/quic/preferredaddress.h +72 -0
- package/src/headers/26/quic/session.h +770 -0
- package/src/headers/26/quic/session_manager.h +107 -0
- package/src/headers/26/quic/sessionticket.h +110 -0
- package/src/headers/26/quic/streams.h +518 -0
- package/src/headers/26/quic/tlscontext.h +353 -0
- package/src/headers/26/quic/tokens.h +263 -0
- package/src/headers/26/quic/transportparams.h +184 -0
- package/src/headers/26/req_wrap-inl.h +175 -0
- package/src/headers/26/req_wrap.h +79 -0
- package/src/headers/26/spawn_sync.h +243 -0
- package/src/headers/26/stream_base-inl.h +170 -0
- package/src/headers/26/stream_base.h +487 -0
- package/src/headers/26/stream_pipe.h +76 -0
- package/src/headers/26/stream_wrap.h +137 -0
- package/src/headers/26/string_bytes.h +114 -0
- package/src/headers/26/string_decoder-inl.h +31 -0
- package/src/headers/26/string_decoder.h +49 -0
- package/src/headers/26/tcp_wrap.h +138 -0
- package/src/headers/26/threadpoolwork-inl.h +70 -0
- package/src/headers/26/timer_wrap-inl.h +32 -0
- package/src/headers/26/timer_wrap.h +87 -0
- package/src/headers/26/timers.h +70 -0
- package/src/headers/26/tracing/agent.h +125 -0
- package/src/headers/26/tracing/agent_legacy.h +146 -0
- package/src/headers/26/tracing/agent_perfetto.h +145 -0
- package/src/headers/26/tracing/node_trace_buffer.h +91 -0
- package/src/headers/26/tracing/node_trace_writer.h +79 -0
- package/src/headers/26/tracing/trace_event.h +27 -0
- package/src/headers/26/tracing/trace_event_helper.h +40 -0
- package/src/headers/26/tracing/trace_event_legacy.h +1113 -0
- package/src/headers/26/tracing/trace_event_legacy_inl.h +711 -0
- package/src/headers/26/tracing/trace_event_perfetto.h +47 -0
- package/src/headers/26/tracing/traced_value.h +167 -0
- package/src/headers/26/tty_wrap.h +65 -0
- package/src/headers/26/udp_wrap.h +231 -0
- package/src/headers/26/undici_version.h +6 -0
- package/src/headers/26/util-inl.h +788 -0
- package/src/headers/26/util.h +1207 -0
- package/src/headers/26/v8-cpp-heap-external.h +56 -0
- package/src/headers/26/v8-external-memory-accounter.h +60 -0
- package/src/headers/26/v8-fast-api-calls.h +784 -0
- package/src/headers/26/v8-inspector-protocol.h +13 -0
- package/src/headers/26/v8-inspector.h +458 -0
- package/src/headers/26/v8-metrics.h +273 -0
- package/src/headers/26/v8-trace-categories.h +28 -0
- package/src/headers/26/v8-unwinder-state.h +30 -0
- package/src/headers/26/v8-util.h +549 -0
- package/src/headers/26/v8-value-serializer-version.h +24 -0
- package/src/headers/26/v8-version-string.h +38 -0
- package/src/headers/26/v8-wasm-trap-handler-posix.h +31 -0
- package/src/headers/26/v8-wasm-trap-handler-win.h +28 -0
- package/src/headers/26/zlib_version.h +6 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#ifndef SRC_INSPECTOR_PROFILER_H_
|
|
2
|
+
#define SRC_INSPECTOR_PROFILER_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#if !HAVE_INSPECTOR
|
|
7
|
+
#error("This header can only be used when inspector is enabled")
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
#include <optional>
|
|
11
|
+
#include <unordered_set>
|
|
12
|
+
#include "inspector_agent.h"
|
|
13
|
+
#include "simdjson.h"
|
|
14
|
+
|
|
15
|
+
namespace node {
|
|
16
|
+
// Forward declaration to break recursive dependency chain with src/env.h.
|
|
17
|
+
class Environment;
|
|
18
|
+
|
|
19
|
+
namespace profiler {
|
|
20
|
+
|
|
21
|
+
class V8ProfilerConnection {
|
|
22
|
+
public:
|
|
23
|
+
class V8ProfilerSessionDelegate : public inspector::InspectorSessionDelegate {
|
|
24
|
+
public:
|
|
25
|
+
explicit V8ProfilerSessionDelegate(V8ProfilerConnection* connection)
|
|
26
|
+
: connection_(connection) {}
|
|
27
|
+
|
|
28
|
+
void SendMessageToFrontend(
|
|
29
|
+
const v8_inspector::StringView& message) override;
|
|
30
|
+
|
|
31
|
+
private:
|
|
32
|
+
V8ProfilerConnection* connection_;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
explicit V8ProfilerConnection(Environment* env);
|
|
36
|
+
virtual ~V8ProfilerConnection() = default;
|
|
37
|
+
|
|
38
|
+
Environment* env() const { return env_; }
|
|
39
|
+
|
|
40
|
+
// Dispatch a protocol message, and returns the id of the message.
|
|
41
|
+
// `method` does not need to be surrounded by quotes.
|
|
42
|
+
// The optional `params` should be formatted in JSON.
|
|
43
|
+
// The strings should be in one byte characters - which is enough for
|
|
44
|
+
// the commands we use here.
|
|
45
|
+
uint64_t DispatchMessage(const char* method,
|
|
46
|
+
const char* params = nullptr,
|
|
47
|
+
bool is_profile_request = false);
|
|
48
|
+
|
|
49
|
+
// Use DispatchMessage() to dispatch necessary inspector messages
|
|
50
|
+
// to start and end the profiling.
|
|
51
|
+
virtual void Start() = 0;
|
|
52
|
+
virtual void End() = 0;
|
|
53
|
+
|
|
54
|
+
// Return a descriptive name of the profile for debugging.
|
|
55
|
+
virtual const char* type() const = 0;
|
|
56
|
+
// Return if the profile is ending and the response can be parsed.
|
|
57
|
+
virtual bool ending() const = 0;
|
|
58
|
+
// Return the directory where the profile should be placed.
|
|
59
|
+
virtual std::string GetDirectory() const = 0;
|
|
60
|
+
// Return the filename the profile should be written as.
|
|
61
|
+
virtual std::string GetFilename() const = 0;
|
|
62
|
+
// Return the profile object parsed from `message.result`,
|
|
63
|
+
// which will be then written as a JSON.
|
|
64
|
+
virtual std::optional<std::string_view> GetProfile(
|
|
65
|
+
simdjson::ondemand::object* result);
|
|
66
|
+
virtual void WriteProfile(simdjson::ondemand::object* result);
|
|
67
|
+
|
|
68
|
+
bool HasProfileId(uint64_t id) const { return profile_ids_.contains(id); }
|
|
69
|
+
|
|
70
|
+
void RemoveProfileId(uint64_t id) { profile_ids_.erase(id); }
|
|
71
|
+
|
|
72
|
+
private:
|
|
73
|
+
uint64_t next_id() { return id_++; }
|
|
74
|
+
std::unique_ptr<inspector::InspectorSession> session_;
|
|
75
|
+
uint64_t id_ = 1;
|
|
76
|
+
std::unordered_set<uint64_t> profile_ids_;
|
|
77
|
+
|
|
78
|
+
protected:
|
|
79
|
+
simdjson::ondemand::parser json_parser_;
|
|
80
|
+
Environment* env_ = nullptr;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
class V8CoverageConnection : public V8ProfilerConnection {
|
|
84
|
+
public:
|
|
85
|
+
explicit V8CoverageConnection(Environment* env) : V8ProfilerConnection(env) {}
|
|
86
|
+
|
|
87
|
+
void Start() override;
|
|
88
|
+
void End() override;
|
|
89
|
+
|
|
90
|
+
const char* type() const override { return "coverage"; }
|
|
91
|
+
bool ending() const override { return ending_; }
|
|
92
|
+
|
|
93
|
+
std::string GetDirectory() const override;
|
|
94
|
+
std::string GetFilename() const override;
|
|
95
|
+
std::optional<std::string_view> GetProfile(
|
|
96
|
+
simdjson::ondemand::object* result) override;
|
|
97
|
+
void WriteProfile(simdjson::ondemand::object* result) override;
|
|
98
|
+
void WriteSourceMapCache();
|
|
99
|
+
void TakeCoverage();
|
|
100
|
+
void StopCoverage();
|
|
101
|
+
|
|
102
|
+
private:
|
|
103
|
+
std::unique_ptr<inspector::InspectorSession> session_;
|
|
104
|
+
bool ending_ = false;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
class V8CpuProfilerConnection : public V8ProfilerConnection {
|
|
108
|
+
public:
|
|
109
|
+
explicit V8CpuProfilerConnection(Environment* env)
|
|
110
|
+
: V8ProfilerConnection(env) {}
|
|
111
|
+
|
|
112
|
+
void Start() override;
|
|
113
|
+
void End() override;
|
|
114
|
+
|
|
115
|
+
const char* type() const override { return "CPU"; }
|
|
116
|
+
bool ending() const override { return ending_; }
|
|
117
|
+
|
|
118
|
+
std::string GetDirectory() const override;
|
|
119
|
+
std::string GetFilename() const override;
|
|
120
|
+
|
|
121
|
+
private:
|
|
122
|
+
std::unique_ptr<inspector::InspectorSession> session_;
|
|
123
|
+
bool ending_ = false;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
class V8HeapProfilerConnection : public V8ProfilerConnection {
|
|
127
|
+
public:
|
|
128
|
+
explicit V8HeapProfilerConnection(Environment* env)
|
|
129
|
+
: V8ProfilerConnection(env) {}
|
|
130
|
+
|
|
131
|
+
void Start() override;
|
|
132
|
+
void End() override;
|
|
133
|
+
|
|
134
|
+
const char* type() const override { return "heap"; }
|
|
135
|
+
bool ending() const override { return ending_; }
|
|
136
|
+
|
|
137
|
+
std::string GetDirectory() const override;
|
|
138
|
+
std::string GetFilename() const override;
|
|
139
|
+
|
|
140
|
+
private:
|
|
141
|
+
std::unique_ptr<inspector::InspectorSession> session_;
|
|
142
|
+
bool ending_ = false;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
} // namespace profiler
|
|
146
|
+
} // namespace node
|
|
147
|
+
|
|
148
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
149
|
+
#endif // SRC_INSPECTOR_PROFILER_H_
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#ifndef SRC_INSPECTOR_SOCKET_H_
|
|
2
|
+
#define SRC_INSPECTOR_SOCKET_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "util.h"
|
|
7
|
+
#include "uv.h"
|
|
8
|
+
|
|
9
|
+
#include <string>
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
12
|
+
namespace node {
|
|
13
|
+
namespace inspector {
|
|
14
|
+
|
|
15
|
+
class ProtocolHandler;
|
|
16
|
+
|
|
17
|
+
// HTTP Wrapper around a uv_tcp_t
|
|
18
|
+
class InspectorSocket {
|
|
19
|
+
public:
|
|
20
|
+
class Delegate {
|
|
21
|
+
public:
|
|
22
|
+
virtual void OnHttpGet(const std::string& host,
|
|
23
|
+
const std::string& path) = 0;
|
|
24
|
+
virtual void OnSocketUpgrade(const std::string& host,
|
|
25
|
+
const std::string& path,
|
|
26
|
+
const std::string& accept_key) = 0;
|
|
27
|
+
virtual void OnWsFrame(const std::vector<char>& frame) = 0;
|
|
28
|
+
virtual ~Delegate() = default;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
using DelegatePointer = std::unique_ptr<Delegate>;
|
|
32
|
+
using Pointer = std::unique_ptr<InspectorSocket>;
|
|
33
|
+
|
|
34
|
+
static Pointer Accept(uv_stream_t* server, DelegatePointer delegate);
|
|
35
|
+
|
|
36
|
+
~InspectorSocket();
|
|
37
|
+
|
|
38
|
+
void AcceptUpgrade(const std::string& accept_key);
|
|
39
|
+
void CancelHandshake();
|
|
40
|
+
void Write(const char* data, size_t len);
|
|
41
|
+
void SwitchProtocol(ProtocolHandler* handler);
|
|
42
|
+
std::string GetHost();
|
|
43
|
+
|
|
44
|
+
InspectorSocket(const InspectorSocket&) = delete;
|
|
45
|
+
InspectorSocket& operator=(const InspectorSocket&) = delete;
|
|
46
|
+
|
|
47
|
+
private:
|
|
48
|
+
static void Shutdown(ProtocolHandler*);
|
|
49
|
+
InspectorSocket() = default;
|
|
50
|
+
|
|
51
|
+
DeleteFnPtr<ProtocolHandler, Shutdown> protocol_handler_;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
} // namespace inspector
|
|
56
|
+
} // namespace node
|
|
57
|
+
|
|
58
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
59
|
+
|
|
60
|
+
#endif // SRC_INSPECTOR_SOCKET_H_
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#ifndef SRC_INSPECTOR_SOCKET_SERVER_H_
|
|
2
|
+
#define SRC_INSPECTOR_SOCKET_SERVER_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "inspector_agent.h"
|
|
7
|
+
#include "inspector_socket.h"
|
|
8
|
+
#include "uv.h"
|
|
9
|
+
|
|
10
|
+
#include <map>
|
|
11
|
+
#include <string>
|
|
12
|
+
#include <vector>
|
|
13
|
+
|
|
14
|
+
#if !HAVE_INSPECTOR
|
|
15
|
+
#error("This header can only be used when inspector is enabled")
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
namespace node {
|
|
19
|
+
namespace inspector {
|
|
20
|
+
|
|
21
|
+
std::string FormatWsAddress(const std::string& host, int port,
|
|
22
|
+
const std::string& target_id,
|
|
23
|
+
bool include_protocol);
|
|
24
|
+
|
|
25
|
+
class InspectorSocketServer;
|
|
26
|
+
class SocketSession;
|
|
27
|
+
class ServerSocket;
|
|
28
|
+
|
|
29
|
+
class SocketServerDelegate {
|
|
30
|
+
public:
|
|
31
|
+
virtual void AssignServer(InspectorSocketServer* server) = 0;
|
|
32
|
+
virtual void StartSession(int session_id, const std::string& target_id) = 0;
|
|
33
|
+
virtual void EndSession(int session_id) = 0;
|
|
34
|
+
virtual void MessageReceived(int session_id, const std::string& message) = 0;
|
|
35
|
+
virtual std::vector<std::string> GetTargetIds() = 0;
|
|
36
|
+
virtual std::string GetTargetTitle(const std::string& id) = 0;
|
|
37
|
+
virtual std::string GetTargetUrl(const std::string& id) = 0;
|
|
38
|
+
virtual ~SocketServerDelegate() = default;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// HTTP Server, writes messages requested as TransportActions, and responds
|
|
42
|
+
// to HTTP requests and WS upgrades.
|
|
43
|
+
|
|
44
|
+
class InspectorSocketServer {
|
|
45
|
+
public:
|
|
46
|
+
InspectorSocketServer(std::unique_ptr<SocketServerDelegate> delegate,
|
|
47
|
+
uv_loop_t* loop,
|
|
48
|
+
const std::string& host,
|
|
49
|
+
int port,
|
|
50
|
+
const InspectPublishUid& inspect_publish_uid,
|
|
51
|
+
FILE* out = stderr);
|
|
52
|
+
~InspectorSocketServer();
|
|
53
|
+
|
|
54
|
+
// Start listening on host/port
|
|
55
|
+
bool Start();
|
|
56
|
+
|
|
57
|
+
// Called by the TransportAction sent with InspectorIo::Write():
|
|
58
|
+
// kKill and kStop
|
|
59
|
+
void Stop();
|
|
60
|
+
// kSendMessage
|
|
61
|
+
void Send(int session_id, const std::string& message);
|
|
62
|
+
// kKill
|
|
63
|
+
void TerminateConnections();
|
|
64
|
+
int Port() const;
|
|
65
|
+
|
|
66
|
+
// Session connection lifecycle
|
|
67
|
+
void Accept(int server_port, uv_stream_t* server_socket);
|
|
68
|
+
bool HandleGetRequest(int session_id, const std::string& host,
|
|
69
|
+
const std::string& path);
|
|
70
|
+
void SessionStarted(int session_id, const std::string& target_id,
|
|
71
|
+
const std::string& ws_id);
|
|
72
|
+
void SessionTerminated(int session_id);
|
|
73
|
+
void MessageReceived(int session_id, const std::string& message) {
|
|
74
|
+
delegate_->MessageReceived(session_id, message);
|
|
75
|
+
}
|
|
76
|
+
SocketSession* Session(int session_id);
|
|
77
|
+
bool done() const {
|
|
78
|
+
return server_sockets_.empty() && connected_sessions_.empty();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
static void CloseServerSocket(ServerSocket*);
|
|
82
|
+
using ServerSocketPtr = DeleteFnPtr<ServerSocket, CloseServerSocket>;
|
|
83
|
+
|
|
84
|
+
private:
|
|
85
|
+
void SendListResponse(InspectorSocket* socket, const std::string& host,
|
|
86
|
+
SocketSession* session);
|
|
87
|
+
std::string GetFrontendURL(bool is_compat,
|
|
88
|
+
const std::string &formatted_address);
|
|
89
|
+
bool TargetExists(const std::string& id);
|
|
90
|
+
|
|
91
|
+
enum class ServerState {kNew, kRunning, kStopped};
|
|
92
|
+
uv_loop_t* loop_;
|
|
93
|
+
std::unique_ptr<SocketServerDelegate> delegate_;
|
|
94
|
+
const std::string host_;
|
|
95
|
+
int port_;
|
|
96
|
+
InspectPublishUid inspect_publish_uid_;
|
|
97
|
+
std::vector<ServerSocketPtr> server_sockets_;
|
|
98
|
+
std::map<int, std::pair<std::string, std::unique_ptr<SocketSession>>>
|
|
99
|
+
connected_sessions_;
|
|
100
|
+
int next_session_id_;
|
|
101
|
+
FILE* out_;
|
|
102
|
+
ServerState state_;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
} // namespace inspector
|
|
106
|
+
} // namespace node
|
|
107
|
+
|
|
108
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
109
|
+
|
|
110
|
+
#endif // SRC_INSPECTOR_SOCKET_SERVER_H_
|