@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,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,198 @@
1
+ #ifndef SRC_NODE_HTTP_COMMON_INL_H_
2
+ #define SRC_NODE_HTTP_COMMON_INL_H_
3
+
4
+ #include "node_http_common.h"
5
+ #include "node.h"
6
+ #include "node_mem-inl.h"
7
+ #include "env-inl.h"
8
+ #include "v8.h"
9
+
10
+ #include <algorithm>
11
+ #include "nbytes.h"
12
+
13
+ namespace node {
14
+
15
+ template <typename T>
16
+ NgHeaders<T>::NgHeaders(Environment* env, v8::Local<v8::Array> headers) {
17
+ v8::Local<v8::Value> header_string =
18
+ headers->Get(env->context(), 0).ToLocalChecked();
19
+ v8::Local<v8::Value> header_count =
20
+ headers->Get(env->context(), 1).ToLocalChecked();
21
+ CHECK(header_count->IsUint32());
22
+ CHECK(header_string->IsString());
23
+ count_ = header_count.As<v8::Uint32>()->Value();
24
+ int header_string_len = header_string.As<v8::String>()->Length();
25
+
26
+ if (count_ == 0) {
27
+ CHECK_EQ(header_string_len, 0);
28
+ return;
29
+ }
30
+
31
+ buf_.AllocateSufficientStorage((alignof(nv_t) - 1) +
32
+ count_ * sizeof(nv_t) +
33
+ header_string_len);
34
+
35
+ char* start = nbytes::AlignUp(buf_.out(), alignof(nv_t));
36
+ char* header_contents = start + (count_ * sizeof(nv_t));
37
+ nv_t* const nva = reinterpret_cast<nv_t*>(start);
38
+
39
+ CHECK_LE(header_contents + header_string_len, *buf_ + buf_.length());
40
+ CHECK_EQ(header_string.As<v8::String>()->WriteOneByte(
41
+ env->isolate(),
42
+ reinterpret_cast<uint8_t*>(header_contents),
43
+ 0,
44
+ header_string_len,
45
+ v8::String::NO_NULL_TERMINATION),
46
+ header_string_len);
47
+
48
+ size_t n = 0;
49
+ char* p;
50
+ for (p = header_contents; p < header_contents + header_string_len; n++) {
51
+ if (n >= count_) {
52
+ static uint8_t zero = '\0';
53
+ nva[0].name = nva[0].value = &zero;
54
+ nva[0].namelen = nva[0].valuelen = 1;
55
+ count_ = 1;
56
+ return;
57
+ }
58
+
59
+ nva[n].name = reinterpret_cast<uint8_t*>(p);
60
+ nva[n].namelen = strlen(p);
61
+ p += nva[n].namelen + 1;
62
+ nva[n].value = reinterpret_cast<uint8_t*>(p);
63
+ nva[n].valuelen = strlen(p);
64
+ p += nva[n].valuelen + 1;
65
+ nva[n].flags = *p;
66
+ p++;
67
+ }
68
+ }
69
+
70
+ size_t GetClientMaxHeaderPairs(size_t max_header_pairs) {
71
+ static constexpr size_t min_header_pairs = 1;
72
+ return std::max(max_header_pairs, min_header_pairs);
73
+ }
74
+
75
+ size_t GetServerMaxHeaderPairs(size_t max_header_pairs) {
76
+ static constexpr size_t min_header_pairs = 4;
77
+ return std::max(max_header_pairs, min_header_pairs);
78
+ }
79
+
80
+ template <typename allocator_t>
81
+ std::string NgHeaderBase<allocator_t>::ToString() const {
82
+ std::string ret = name();
83
+ ret += " = ";
84
+ ret += value();
85
+ return ret;
86
+ }
87
+
88
+ template <typename T>
89
+ bool NgHeader<T>::IsZeroLength(
90
+ NgHeader<T>::rcbuf_t* name,
91
+ NgHeader<T>::rcbuf_t* value) {
92
+ return IsZeroLength(-1, name, value);
93
+ }
94
+
95
+ template <typename T>
96
+ bool NgHeader<T>::IsZeroLength(int32_t token,
97
+ NgHeader<T>::rcbuf_t* name,
98
+ NgHeader<T>::rcbuf_t* value) {
99
+ if (NgHeader<T>::rcbufferpointer_t::IsZeroLength(value))
100
+ return true;
101
+
102
+ return NgHeader<T>::rcbufferpointer_t::IsZeroLength(name);
103
+ }
104
+
105
+ template <typename T>
106
+ NgHeader<T>::NgHeader(
107
+ Environment* env,
108
+ NgHeader<T>::rcbuf_t* name,
109
+ NgHeader<T>::rcbuf_t* value,
110
+ uint8_t flags)
111
+ : NgHeader<T>(env, -1, name, value, flags) {}
112
+
113
+ template <typename T>
114
+ NgHeader<T>::NgHeader(
115
+ Environment* env,
116
+ int32_t token,
117
+ NgHeader<T>::rcbuf_t* name,
118
+ NgHeader<T>::rcbuf_t* value,
119
+ uint8_t flags) : env_(env), token_(token), flags_(flags) {
120
+ if (token == -1) {
121
+ CHECK_NOT_NULL(name);
122
+ name_.reset(name, true); // Internalizable
123
+ }
124
+ CHECK_NOT_NULL(value);
125
+ name_.reset(name, true); // Internalizable
126
+ value_.reset(value);
127
+ }
128
+
129
+ template <typename T>
130
+ NgHeader<T>::NgHeader(NgHeader<T>&& other) noexcept
131
+ : env_(other.env_),
132
+ name_(std::move(other.name_)),
133
+ value_(std::move(other.value_)),
134
+ token_(other.token_),
135
+ flags_(other.flags_) {
136
+ other.token_ = -1;
137
+ other.flags_ = 0;
138
+ other.env_ = nullptr;
139
+ }
140
+
141
+ template <typename T>
142
+ void NgHeader<T>::MemoryInfo(MemoryTracker* tracker) const {
143
+ tracker->TrackField("name", name_);
144
+ tracker->TrackField("value", value_);
145
+ }
146
+
147
+ template <typename T>
148
+ v8::MaybeLocal<v8::String> NgHeader<T>::GetName(
149
+ NgHeader<T>::allocator_t* allocator) const {
150
+
151
+ // Not all instances will support using token id's for header names.
152
+ // HTTP/2 specifically does not support it.
153
+ const char* header_name = T::ToHttpHeaderName(token_);
154
+
155
+ // If header_name is not nullptr, then it is a known header with
156
+ // a statically defined name. We can safely internalize it here.
157
+ if (header_name != nullptr) {
158
+ auto& static_str_map = env_->isolate_data()->static_str_map;
159
+ v8::Eternal<v8::String> eternal = static_str_map[header_name];
160
+ if (eternal.IsEmpty()) {
161
+ v8::Local<v8::String> str = OneByteString(env_->isolate(), header_name);
162
+ eternal.Set(env_->isolate(), str);
163
+ return str;
164
+ }
165
+ return eternal.Get(env_->isolate());
166
+ }
167
+ return rcbufferpointer_t::External::New(allocator, name_);
168
+ }
169
+
170
+ template <typename T>
171
+ v8::MaybeLocal<v8::String> NgHeader<T>::GetValue(
172
+ NgHeader<T>::allocator_t* allocator) const {
173
+ return rcbufferpointer_t::External::New(allocator, value_);
174
+ }
175
+
176
+ template <typename T>
177
+ std::string NgHeader<T>::name() const {
178
+ return name_.str();
179
+ }
180
+
181
+ template <typename T>
182
+ std::string NgHeader<T>::value() const {
183
+ return value_.str();
184
+ }
185
+
186
+ template <typename T>
187
+ size_t NgHeader<T>::length() const {
188
+ return name_.len() + value_.len();
189
+ }
190
+
191
+ template <typename T>
192
+ uint8_t NgHeader<T>::flags() const {
193
+ return flags_;
194
+ }
195
+
196
+ } // namespace node
197
+
198
+ #endif // SRC_NODE_HTTP_COMMON_INL_H_