@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,159 @@
|
|
|
1
|
+
#ifndef SRC_NODE_HTTP2_STATE_H_
|
|
2
|
+
#define SRC_NODE_HTTP2_STATE_H_
|
|
3
|
+
|
|
4
|
+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
5
|
+
|
|
6
|
+
#include "aliased_buffer.h"
|
|
7
|
+
|
|
8
|
+
struct nghttp2_rcbuf;
|
|
9
|
+
|
|
10
|
+
namespace node {
|
|
11
|
+
namespace http2 {
|
|
12
|
+
|
|
13
|
+
enum Http2SettingsIndex {
|
|
14
|
+
IDX_SETTINGS_HEADER_TABLE_SIZE,
|
|
15
|
+
IDX_SETTINGS_ENABLE_PUSH,
|
|
16
|
+
IDX_SETTINGS_INITIAL_WINDOW_SIZE,
|
|
17
|
+
IDX_SETTINGS_MAX_FRAME_SIZE,
|
|
18
|
+
IDX_SETTINGS_MAX_CONCURRENT_STREAMS,
|
|
19
|
+
IDX_SETTINGS_MAX_HEADER_LIST_SIZE,
|
|
20
|
+
IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL,
|
|
21
|
+
IDX_SETTINGS_COUNT
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// number of max additional settings, thus settings not implemented by nghttp2
|
|
25
|
+
const size_t MAX_ADDITIONAL_SETTINGS = 10;
|
|
26
|
+
|
|
27
|
+
enum Http2SessionStateIndex {
|
|
28
|
+
IDX_SESSION_STATE_EFFECTIVE_LOCAL_WINDOW_SIZE,
|
|
29
|
+
IDX_SESSION_STATE_EFFECTIVE_RECV_DATA_LENGTH,
|
|
30
|
+
IDX_SESSION_STATE_NEXT_STREAM_ID,
|
|
31
|
+
IDX_SESSION_STATE_LOCAL_WINDOW_SIZE,
|
|
32
|
+
IDX_SESSION_STATE_LAST_PROC_STREAM_ID,
|
|
33
|
+
IDX_SESSION_STATE_REMOTE_WINDOW_SIZE,
|
|
34
|
+
IDX_SESSION_STATE_OUTBOUND_QUEUE_SIZE,
|
|
35
|
+
IDX_SESSION_STATE_HD_DEFLATE_DYNAMIC_TABLE_SIZE,
|
|
36
|
+
IDX_SESSION_STATE_HD_INFLATE_DYNAMIC_TABLE_SIZE,
|
|
37
|
+
IDX_SESSION_STATE_COUNT
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
enum Http2StreamStateIndex {
|
|
41
|
+
IDX_STREAM_STATE,
|
|
42
|
+
IDX_STREAM_STATE_WEIGHT,
|
|
43
|
+
IDX_STREAM_STATE_SUM_DEPENDENCY_WEIGHT,
|
|
44
|
+
IDX_STREAM_STATE_LOCAL_CLOSE,
|
|
45
|
+
IDX_STREAM_STATE_REMOTE_CLOSE,
|
|
46
|
+
IDX_STREAM_STATE_LOCAL_WINDOW_SIZE,
|
|
47
|
+
IDX_STREAM_STATE_COUNT
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
enum Http2OptionsIndex {
|
|
51
|
+
IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE,
|
|
52
|
+
IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS,
|
|
53
|
+
IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH,
|
|
54
|
+
IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS,
|
|
55
|
+
IDX_OPTIONS_PADDING_STRATEGY,
|
|
56
|
+
IDX_OPTIONS_MAX_HEADER_LIST_PAIRS,
|
|
57
|
+
IDX_OPTIONS_MAX_OUTSTANDING_PINGS,
|
|
58
|
+
IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS,
|
|
59
|
+
IDX_OPTIONS_MAX_SESSION_MEMORY,
|
|
60
|
+
IDX_OPTIONS_MAX_SETTINGS,
|
|
61
|
+
IDX_OPTIONS_STREAM_RESET_RATE,
|
|
62
|
+
IDX_OPTIONS_STREAM_RESET_BURST,
|
|
63
|
+
IDX_OPTIONS_STRICT_HTTP_FIELD_WHITESPACE_VALIDATION,
|
|
64
|
+
IDX_OPTIONS_FLAGS
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
enum Http2StreamStatisticsIndex {
|
|
68
|
+
IDX_STREAM_STATS_ID,
|
|
69
|
+
IDX_STREAM_STATS_TIMETOFIRSTBYTE,
|
|
70
|
+
IDX_STREAM_STATS_TIMETOFIRSTHEADER,
|
|
71
|
+
IDX_STREAM_STATS_TIMETOFIRSTBYTESENT,
|
|
72
|
+
IDX_STREAM_STATS_SENTBYTES,
|
|
73
|
+
IDX_STREAM_STATS_RECEIVEDBYTES,
|
|
74
|
+
IDX_STREAM_STATS_COUNT
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
enum Http2SessionStatisticsIndex {
|
|
78
|
+
IDX_SESSION_STATS_TYPE,
|
|
79
|
+
IDX_SESSION_STATS_PINGRTT,
|
|
80
|
+
IDX_SESSION_STATS_FRAMESRECEIVED,
|
|
81
|
+
IDX_SESSION_STATS_FRAMESSENT,
|
|
82
|
+
IDX_SESSION_STATS_STREAMCOUNT,
|
|
83
|
+
IDX_SESSION_STATS_STREAMAVERAGEDURATION,
|
|
84
|
+
IDX_SESSION_STATS_DATA_SENT,
|
|
85
|
+
IDX_SESSION_STATS_DATA_RECEIVED,
|
|
86
|
+
IDX_SESSION_STATS_MAX_CONCURRENT_STREAMS,
|
|
87
|
+
IDX_SESSION_STATS_COUNT
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
class Http2State : public BaseObject {
|
|
91
|
+
public:
|
|
92
|
+
Http2State(Realm* realm, v8::Local<v8::Object> obj)
|
|
93
|
+
: BaseObject(realm, obj),
|
|
94
|
+
root_buffer(realm->isolate(), sizeof(http2_state_internal)),
|
|
95
|
+
session_state_buffer(
|
|
96
|
+
realm->isolate(),
|
|
97
|
+
offsetof(http2_state_internal, session_state_buffer),
|
|
98
|
+
IDX_SESSION_STATE_COUNT,
|
|
99
|
+
root_buffer),
|
|
100
|
+
stream_state_buffer(realm->isolate(),
|
|
101
|
+
offsetof(http2_state_internal, stream_state_buffer),
|
|
102
|
+
IDX_STREAM_STATE_COUNT,
|
|
103
|
+
root_buffer),
|
|
104
|
+
stream_stats_buffer(realm->isolate(),
|
|
105
|
+
offsetof(http2_state_internal, stream_stats_buffer),
|
|
106
|
+
IDX_STREAM_STATS_COUNT,
|
|
107
|
+
root_buffer),
|
|
108
|
+
session_stats_buffer(
|
|
109
|
+
realm->isolate(),
|
|
110
|
+
offsetof(http2_state_internal, session_stats_buffer),
|
|
111
|
+
IDX_SESSION_STATS_COUNT,
|
|
112
|
+
root_buffer),
|
|
113
|
+
options_buffer(realm->isolate(),
|
|
114
|
+
offsetof(http2_state_internal, options_buffer),
|
|
115
|
+
IDX_OPTIONS_FLAGS + 1,
|
|
116
|
+
root_buffer),
|
|
117
|
+
settings_buffer(
|
|
118
|
+
realm->isolate(),
|
|
119
|
+
offsetof(http2_state_internal, settings_buffer),
|
|
120
|
+
IDX_SETTINGS_COUNT + 1 + 1 + 2 * MAX_ADDITIONAL_SETTINGS,
|
|
121
|
+
root_buffer) {}
|
|
122
|
+
|
|
123
|
+
AliasedUint8Array root_buffer;
|
|
124
|
+
AliasedFloat64Array session_state_buffer;
|
|
125
|
+
AliasedFloat64Array stream_state_buffer;
|
|
126
|
+
AliasedFloat64Array stream_stats_buffer;
|
|
127
|
+
AliasedFloat64Array session_stats_buffer;
|
|
128
|
+
AliasedUint32Array options_buffer;
|
|
129
|
+
AliasedUint32Array settings_buffer;
|
|
130
|
+
|
|
131
|
+
void MemoryInfo(MemoryTracker* tracker) const override;
|
|
132
|
+
SET_SELF_SIZE(Http2State)
|
|
133
|
+
SET_MEMORY_INFO_NAME(Http2State)
|
|
134
|
+
|
|
135
|
+
SET_BINDING_ID(http2_binding_data)
|
|
136
|
+
|
|
137
|
+
private:
|
|
138
|
+
struct http2_state_internal {
|
|
139
|
+
// doubles first so that they are always sizeof(double)-aligned
|
|
140
|
+
double session_state_buffer[IDX_SESSION_STATE_COUNT];
|
|
141
|
+
double stream_state_buffer[IDX_STREAM_STATE_COUNT];
|
|
142
|
+
double stream_stats_buffer[IDX_STREAM_STATS_COUNT];
|
|
143
|
+
double session_stats_buffer[IDX_SESSION_STATS_COUNT];
|
|
144
|
+
uint32_t options_buffer[IDX_OPTIONS_FLAGS + 1];
|
|
145
|
+
// first + 1: number of actual nghttp2 supported settings
|
|
146
|
+
// second + 1: number of additional settings not supported by nghttp2
|
|
147
|
+
// 2 * MAX_ADDITIONAL_SETTINGS: settings id and value for each
|
|
148
|
+
// additional setting
|
|
149
|
+
uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1 + 1 +
|
|
150
|
+
2 * MAX_ADDITIONAL_SETTINGS];
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
} // namespace http2
|
|
155
|
+
} // namespace node
|
|
156
|
+
|
|
157
|
+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
158
|
+
|
|
159
|
+
#endif // SRC_NODE_HTTP2_STATE_H_
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#ifndef SRC_NODE_HTTP_COMMON_INL_H_
|
|
2
|
+
#define SRC_NODE_HTTP_COMMON_INL_H_
|
|
3
|
+
|
|
4
|
+
#include "node_http_common.h"
|
|
5
|
+
|
|
6
|
+
#include "env-inl.h"
|
|
7
|
+
#include "node.h"
|
|
8
|
+
#include "node_mem-inl.h"
|
|
9
|
+
#include "string_bytes.h"
|
|
10
|
+
#include "v8.h"
|
|
11
|
+
|
|
12
|
+
#include <algorithm>
|
|
13
|
+
#include "nbytes.h"
|
|
14
|
+
|
|
15
|
+
namespace node {
|
|
16
|
+
|
|
17
|
+
template <typename T>
|
|
18
|
+
NgHeaders<T>::NgHeaders(Environment* env, v8::Local<v8::Array> headers) {
|
|
19
|
+
v8::Local<v8::Value> header_string =
|
|
20
|
+
headers->Get(env->context(), 0).ToLocalChecked();
|
|
21
|
+
v8::Local<v8::Value> header_count =
|
|
22
|
+
headers->Get(env->context(), 1).ToLocalChecked();
|
|
23
|
+
CHECK(header_count->IsUint32());
|
|
24
|
+
CHECK(header_string->IsString());
|
|
25
|
+
count_ = header_count.As<v8::Uint32>()->Value();
|
|
26
|
+
int header_string_len = header_string.As<v8::String>()->Length();
|
|
27
|
+
|
|
28
|
+
if (count_ == 0) {
|
|
29
|
+
CHECK_EQ(header_string_len, 0);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
buf_.AllocateSufficientStorage((alignof(nv_t) - 1) +
|
|
34
|
+
count_ * sizeof(nv_t) +
|
|
35
|
+
header_string_len);
|
|
36
|
+
|
|
37
|
+
char* start = nbytes::AlignUp(buf_.out(), alignof(nv_t));
|
|
38
|
+
char* header_contents = start + (count_ * sizeof(nv_t));
|
|
39
|
+
nv_t* const nva = reinterpret_cast<nv_t*>(start);
|
|
40
|
+
|
|
41
|
+
CHECK_LE(header_contents + header_string_len, *buf_ + buf_.length());
|
|
42
|
+
CHECK_EQ(StringBytes::Write(env->isolate(),
|
|
43
|
+
header_contents,
|
|
44
|
+
header_string_len,
|
|
45
|
+
header_string.As<v8::String>(),
|
|
46
|
+
LATIN1),
|
|
47
|
+
static_cast<size_t>(header_string_len));
|
|
48
|
+
|
|
49
|
+
size_t n = 0;
|
|
50
|
+
char* p;
|
|
51
|
+
for (p = header_contents; p < header_contents + header_string_len; n++) {
|
|
52
|
+
if (n >= count_) {
|
|
53
|
+
static uint8_t zero = '\0';
|
|
54
|
+
nva[0].name = nva[0].value = &zero;
|
|
55
|
+
nva[0].namelen = nva[0].valuelen = 1;
|
|
56
|
+
count_ = 1;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
nva[n].name = reinterpret_cast<uint8_t*>(p);
|
|
61
|
+
nva[n].namelen = strlen(p);
|
|
62
|
+
p += nva[n].namelen + 1;
|
|
63
|
+
nva[n].value = reinterpret_cast<uint8_t*>(p);
|
|
64
|
+
nva[n].valuelen = strlen(p);
|
|
65
|
+
p += nva[n].valuelen + 1;
|
|
66
|
+
nva[n].flags = *p;
|
|
67
|
+
p++;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
size_t GetClientMaxHeaderPairs(size_t max_header_pairs) {
|
|
72
|
+
static constexpr size_t min_header_pairs = 1;
|
|
73
|
+
return std::max(max_header_pairs, min_header_pairs);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
size_t GetServerMaxHeaderPairs(size_t max_header_pairs) {
|
|
77
|
+
static constexpr size_t min_header_pairs = 4;
|
|
78
|
+
return std::max(max_header_pairs, min_header_pairs);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
template <typename allocator_t>
|
|
82
|
+
std::string NgHeaderBase<allocator_t>::ToString() const {
|
|
83
|
+
std::string ret = name();
|
|
84
|
+
ret += " = ";
|
|
85
|
+
ret += value();
|
|
86
|
+
return ret;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
template <typename T>
|
|
90
|
+
bool NgHeader<T>::IsZeroLength(
|
|
91
|
+
NgHeader<T>::rcbuf_t* name,
|
|
92
|
+
NgHeader<T>::rcbuf_t* value) {
|
|
93
|
+
return IsZeroLength(-1, name, value);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
template <typename T>
|
|
97
|
+
bool NgHeader<T>::IsZeroLength(int32_t token,
|
|
98
|
+
NgHeader<T>::rcbuf_t* name,
|
|
99
|
+
NgHeader<T>::rcbuf_t* value) {
|
|
100
|
+
if (NgHeader<T>::rcbufferpointer_t::IsZeroLength(value))
|
|
101
|
+
return true;
|
|
102
|
+
|
|
103
|
+
return NgHeader<T>::rcbufferpointer_t::IsZeroLength(name);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
template <typename T>
|
|
107
|
+
NgHeader<T>::NgHeader(
|
|
108
|
+
Environment* env,
|
|
109
|
+
NgHeader<T>::rcbuf_t* name,
|
|
110
|
+
NgHeader<T>::rcbuf_t* value,
|
|
111
|
+
uint8_t flags)
|
|
112
|
+
: NgHeader<T>(env, -1, name, value, flags) {}
|
|
113
|
+
|
|
114
|
+
template <typename T>
|
|
115
|
+
NgHeader<T>::NgHeader(
|
|
116
|
+
Environment* env,
|
|
117
|
+
int32_t token,
|
|
118
|
+
NgHeader<T>::rcbuf_t* name,
|
|
119
|
+
NgHeader<T>::rcbuf_t* value,
|
|
120
|
+
uint8_t flags) : env_(env), token_(token), flags_(flags) {
|
|
121
|
+
if (token == -1) {
|
|
122
|
+
CHECK_NOT_NULL(name);
|
|
123
|
+
name_.reset(name, true); // Internalizable
|
|
124
|
+
}
|
|
125
|
+
CHECK_NOT_NULL(value);
|
|
126
|
+
name_.reset(name, true); // Internalizable
|
|
127
|
+
value_.reset(value);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
template <typename T>
|
|
131
|
+
NgHeader<T>::NgHeader(NgHeader<T>&& other) noexcept
|
|
132
|
+
: env_(other.env_),
|
|
133
|
+
name_(std::move(other.name_)),
|
|
134
|
+
value_(std::move(other.value_)),
|
|
135
|
+
token_(other.token_),
|
|
136
|
+
flags_(other.flags_) {
|
|
137
|
+
other.token_ = -1;
|
|
138
|
+
other.flags_ = 0;
|
|
139
|
+
other.env_ = nullptr;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
template <typename T>
|
|
143
|
+
void NgHeader<T>::MemoryInfo(MemoryTracker* tracker) const {
|
|
144
|
+
tracker->TrackField("name", name_);
|
|
145
|
+
tracker->TrackField("value", value_);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
template <typename T>
|
|
149
|
+
v8::MaybeLocal<v8::String> NgHeader<T>::GetName(
|
|
150
|
+
NgHeader<T>::allocator_t* allocator) const {
|
|
151
|
+
|
|
152
|
+
// Not all instances will support using token id's for header names.
|
|
153
|
+
// HTTP/2 specifically does not support it.
|
|
154
|
+
const char* header_name = T::ToHttpHeaderName(token_);
|
|
155
|
+
|
|
156
|
+
// If header_name is not nullptr, then it is a known header with
|
|
157
|
+
// a statically defined name. We can safely internalize it here.
|
|
158
|
+
if (header_name != nullptr) {
|
|
159
|
+
auto& static_str_map = env_->isolate_data()->static_str_map;
|
|
160
|
+
v8::Eternal<v8::String> eternal = static_str_map[header_name];
|
|
161
|
+
if (eternal.IsEmpty()) {
|
|
162
|
+
v8::Local<v8::String> str = OneByteString(env_->isolate(), header_name);
|
|
163
|
+
eternal.Set(env_->isolate(), str);
|
|
164
|
+
return str;
|
|
165
|
+
}
|
|
166
|
+
return eternal.Get(env_->isolate());
|
|
167
|
+
}
|
|
168
|
+
return rcbufferpointer_t::External::New(allocator, name_);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
template <typename T>
|
|
172
|
+
v8::MaybeLocal<v8::String> NgHeader<T>::GetValue(
|
|
173
|
+
NgHeader<T>::allocator_t* allocator) const {
|
|
174
|
+
return rcbufferpointer_t::External::New(allocator, value_);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
template <typename T>
|
|
178
|
+
std::string NgHeader<T>::name() const {
|
|
179
|
+
return name_.str();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
template <typename T>
|
|
183
|
+
std::string NgHeader<T>::value() const {
|
|
184
|
+
return value_.str();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
template <typename T>
|
|
188
|
+
size_t NgHeader<T>::length() const {
|
|
189
|
+
return name_.len() + value_.len();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
template <typename T>
|
|
193
|
+
uint8_t NgHeader<T>::flags() const {
|
|
194
|
+
return flags_;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
} // namespace node
|
|
198
|
+
|
|
199
|
+
#endif // SRC_NODE_HTTP_COMMON_INL_H_
|