@encharm/cws 4.3.0 → 4.4.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.
Files changed (234) hide show
  1. package/README.md +5 -7
  2. package/dist/bindings/cws_darwin_arm64_node108.node +0 -0
  3. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  4. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  5. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  6. package/dist/bindings/cws_darwin_x64_node108.node +0 -0
  7. package/dist/bindings/cws_darwin_x64_node115.node +0 -0
  8. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  9. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  10. package/dist/bindings/cws_linux_arm64_node108.node +0 -0
  11. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  12. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  13. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  14. package/dist/bindings/cws_linux_x64_node108.node +0 -0
  15. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  16. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  17. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  18. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  19. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  20. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  21. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  22. package/dist/shared.js +1 -1
  23. package/package.json +5 -5
  24. package/src/Addon.cpp +4 -12
  25. package/src/Addon.h +55 -90
  26. package/src/Socket.h +1 -0
  27. package/src/cSNode.cpp +3 -8
  28. package/src/headers/20/acorn_version.h +6 -0
  29. package/src/headers/20/aliased_buffer-inl.h +243 -0
  30. package/src/headers/20/aliased_buffer.h +206 -0
  31. package/src/headers/20/aliased_struct-inl.h +54 -0
  32. package/src/headers/20/aliased_struct.h +63 -0
  33. package/src/headers/20/async_wrap-inl.h +93 -0
  34. package/src/headers/20/async_wrap.h +252 -0
  35. package/src/headers/20/base64-inl.h +193 -0
  36. package/src/headers/20/base64.h +53 -0
  37. package/src/headers/20/base64_version.h +6 -0
  38. package/src/headers/20/base_object-inl.h +316 -0
  39. package/src/headers/20/base_object.h +320 -0
  40. package/src/headers/20/base_object_types.h +73 -0
  41. package/src/headers/20/blob_serializer_deserializer-inl.h +361 -0
  42. package/src/headers/20/blob_serializer_deserializer.h +132 -0
  43. package/src/headers/20/callback_queue-inl.h +97 -0
  44. package/src/headers/20/callback_queue.h +79 -0
  45. package/src/headers/20/cares_wrap.h +524 -0
  46. package/src/headers/20/cjs_module_lexer_version.h +6 -0
  47. package/src/headers/20/cleanup_queue-inl.h +62 -0
  48. package/src/headers/20/cleanup_queue.h +85 -0
  49. package/src/headers/20/connect_wrap.h +26 -0
  50. package/src/headers/20/connection_wrap.h +29 -0
  51. package/src/headers/20/cppgc/DEPS +8 -0
  52. package/src/headers/20/cppgc/OWNERS +2 -0
  53. package/src/headers/20/cppgc/README.md +135 -0
  54. package/src/headers/20/cppgc/allocation.h +310 -0
  55. package/src/headers/20/cppgc/common.h +28 -0
  56. package/src/headers/20/cppgc/cross-thread-persistent.h +466 -0
  57. package/src/headers/20/cppgc/custom-space.h +97 -0
  58. package/src/headers/20/cppgc/default-platform.h +67 -0
  59. package/src/headers/20/cppgc/ephemeron-pair.h +30 -0
  60. package/src/headers/20/cppgc/explicit-management.h +100 -0
  61. package/src/headers/20/cppgc/garbage-collected.h +106 -0
  62. package/src/headers/20/cppgc/heap-consistency.h +309 -0
  63. package/src/headers/20/cppgc/heap-handle.h +48 -0
  64. package/src/headers/20/cppgc/heap-state.h +82 -0
  65. package/src/headers/20/cppgc/heap-statistics.h +120 -0
  66. package/src/headers/20/cppgc/heap.h +202 -0
  67. package/src/headers/20/cppgc/internal/api-constants.h +68 -0
  68. package/src/headers/20/cppgc/internal/atomic-entry-flag.h +48 -0
  69. package/src/headers/20/cppgc/internal/base-page-handle.h +45 -0
  70. package/src/headers/20/cppgc/internal/caged-heap-local-data.h +111 -0
  71. package/src/headers/20/cppgc/internal/caged-heap.h +61 -0
  72. package/src/headers/20/cppgc/internal/compiler-specific.h +38 -0
  73. package/src/headers/20/cppgc/internal/finalizer-trait.h +93 -0
  74. package/src/headers/20/cppgc/internal/gc-info.h +157 -0
  75. package/src/headers/20/cppgc/internal/logging.h +50 -0
  76. package/src/headers/20/cppgc/internal/member-storage.h +248 -0
  77. package/src/headers/20/cppgc/internal/name-trait.h +137 -0
  78. package/src/headers/20/cppgc/internal/persistent-node.h +214 -0
  79. package/src/headers/20/cppgc/internal/pointer-policies.h +243 -0
  80. package/src/headers/20/cppgc/internal/write-barrier.h +487 -0
  81. package/src/headers/20/cppgc/liveness-broker.h +78 -0
  82. package/src/headers/20/cppgc/macros.h +35 -0
  83. package/src/headers/20/cppgc/member.h +604 -0
  84. package/src/headers/20/cppgc/name-provider.h +65 -0
  85. package/src/headers/20/cppgc/object-size-trait.h +58 -0
  86. package/src/headers/20/cppgc/persistent.h +373 -0
  87. package/src/headers/20/cppgc/platform.h +158 -0
  88. package/src/headers/20/cppgc/prefinalizer.h +75 -0
  89. package/src/headers/20/cppgc/process-heap-statistics.h +36 -0
  90. package/src/headers/20/cppgc/sentinel-pointer.h +32 -0
  91. package/src/headers/20/cppgc/source-location.h +92 -0
  92. package/src/headers/20/cppgc/testing.h +106 -0
  93. package/src/headers/20/cppgc/trace-trait.h +120 -0
  94. package/src/headers/20/cppgc/type-traits.h +250 -0
  95. package/src/headers/20/cppgc/visitor.h +426 -0
  96. package/src/headers/20/crypto/crypto_clienthello.h +131 -0
  97. package/src/headers/20/crypto/crypto_context.h +160 -0
  98. package/src/headers/20/crypto/crypto_keys.h +416 -0
  99. package/src/headers/20/crypto/crypto_tls.h +295 -0
  100. package/src/headers/20/crypto/crypto_util.h +805 -0
  101. package/src/headers/20/crypto_clienthello.h +131 -0
  102. package/src/headers/20/debug_utils-inl.h +226 -0
  103. package/src/headers/20/debug_utils.h +188 -0
  104. package/src/headers/20/diagnosticfilename-inl.h +33 -0
  105. package/src/headers/20/encoding_binding.h +59 -0
  106. package/src/headers/20/env-inl.h +923 -0
  107. package/src/headers/20/env.h +1193 -0
  108. package/src/headers/20/env_properties.h +444 -0
  109. package/src/headers/20/handle_wrap.h +123 -0
  110. package/src/headers/20/histogram-inl.h +107 -0
  111. package/src/headers/20/histogram.h +240 -0
  112. package/src/headers/20/inspector_agent.h +144 -0
  113. package/src/headers/20/inspector_io.h +78 -0
  114. package/src/headers/20/inspector_profiler.h +149 -0
  115. package/src/headers/20/inspector_socket.h +60 -0
  116. package/src/headers/20/inspector_socket_server.h +110 -0
  117. package/src/headers/20/js_native_api.h +591 -0
  118. package/src/headers/20/js_native_api_types.h +168 -0
  119. package/src/headers/20/js_native_api_v8.h +426 -0
  120. package/src/headers/20/js_native_api_v8_internals.h +39 -0
  121. package/src/headers/20/js_stream.h +52 -0
  122. package/src/headers/20/json_parser.h +38 -0
  123. package/src/headers/20/json_utils.h +172 -0
  124. package/src/headers/20/memory_tracker-inl.h +356 -0
  125. package/src/headers/20/memory_tracker.h +289 -0
  126. package/src/headers/20/module_wrap.h +117 -0
  127. package/src/headers/20/node.h +1514 -0
  128. package/src/headers/20/node_api.h +260 -0
  129. package/src/headers/20/node_api_internals.h +42 -0
  130. package/src/headers/20/node_api_types.h +52 -0
  131. package/src/headers/20/node_binding.h +142 -0
  132. package/src/headers/20/node_blob.h +159 -0
  133. package/src/headers/20/node_bob-inl.h +36 -0
  134. package/src/headers/20/node_bob.h +107 -0
  135. package/src/headers/20/node_buffer.h +92 -0
  136. package/src/headers/20/node_builtins.h +197 -0
  137. package/src/headers/20/node_constants.h +79 -0
  138. package/src/headers/20/node_context_data.h +98 -0
  139. package/src/headers/20/node_contextify.h +182 -0
  140. package/src/headers/20/node_crypto.h +56 -0
  141. package/src/headers/20/node_dir.h +52 -0
  142. package/src/headers/20/node_dotenv.h +37 -0
  143. package/src/headers/20/node_errors.h +313 -0
  144. package/src/headers/20/node_exit_code.h +54 -0
  145. package/src/headers/20/node_external_reference.h +172 -0
  146. package/src/headers/20/node_file-inl.h +357 -0
  147. package/src/headers/20/node_file.h +524 -0
  148. package/src/headers/20/node_http2.h +1146 -0
  149. package/src/headers/20/node_http2_state.h +147 -0
  150. package/src/headers/20/node_http_common-inl.h +201 -0
  151. package/src/headers/20/node_http_common.h +532 -0
  152. package/src/headers/20/node_i18n.h +145 -0
  153. package/src/headers/20/node_internals.h +443 -0
  154. package/src/headers/20/node_main_instance.h +67 -0
  155. package/src/headers/20/node_mem-inl.h +112 -0
  156. package/src/headers/20/node_mem.h +45 -0
  157. package/src/headers/20/node_messaging.h +377 -0
  158. package/src/headers/20/node_metadata.h +138 -0
  159. package/src/headers/20/node_mutex.h +323 -0
  160. package/src/headers/20/node_object_wrap.h +132 -0
  161. package/src/headers/20/node_options-inl.h +478 -0
  162. package/src/headers/20/node_options.h +538 -0
  163. package/src/headers/20/node_perf.h +166 -0
  164. package/src/headers/20/node_perf_common.h +98 -0
  165. package/src/headers/20/node_platform.h +195 -0
  166. package/src/headers/20/node_process-inl.h +26 -0
  167. package/src/headers/20/node_process.h +99 -0
  168. package/src/headers/20/node_realm-inl.h +139 -0
  169. package/src/headers/20/node_realm.h +184 -0
  170. package/src/headers/20/node_report.h +42 -0
  171. package/src/headers/20/node_revert.h +82 -0
  172. package/src/headers/20/node_root_certs.h +3443 -0
  173. package/src/headers/20/node_sea.h +56 -0
  174. package/src/headers/20/node_shadow_realm.h +46 -0
  175. package/src/headers/20/node_snapshot_builder.h +54 -0
  176. package/src/headers/20/node_snapshotable.h +164 -0
  177. package/src/headers/20/node_sockaddr-inl.h +266 -0
  178. package/src/headers/20/node_sockaddr.h +405 -0
  179. package/src/headers/20/node_stat_watcher.h +73 -0
  180. package/src/headers/20/node_threadsafe_cow-inl.h +54 -0
  181. package/src/headers/20/node_threadsafe_cow.h +105 -0
  182. package/src/headers/20/node_union_bytes.h +81 -0
  183. package/src/headers/20/node_url.h +92 -0
  184. package/src/headers/20/node_v8.h +77 -0
  185. package/src/headers/20/node_v8_platform-inl.h +205 -0
  186. package/src/headers/20/node_version.h +109 -0
  187. package/src/headers/20/node_wasi.h +184 -0
  188. package/src/headers/20/node_wasm_web_api.h +55 -0
  189. package/src/headers/20/node_watchdog.h +154 -0
  190. package/src/headers/20/node_worker.h +151 -0
  191. package/src/headers/20/permission/child_process_permission.h +28 -0
  192. package/src/headers/20/permission/fs_permission.h +152 -0
  193. package/src/headers/20/permission/permission.h +71 -0
  194. package/src/headers/20/permission/permission_base.h +49 -0
  195. package/src/headers/20/permission/worker_permission.h +28 -0
  196. package/src/headers/20/pipe_wrap.h +80 -0
  197. package/src/headers/20/req_wrap-inl.h +171 -0
  198. package/src/headers/20/req_wrap.h +77 -0
  199. package/src/headers/20/spawn_sync.h +242 -0
  200. package/src/headers/20/stream_base-inl.h +173 -0
  201. package/src/headers/20/stream_base.h +469 -0
  202. package/src/headers/20/stream_pipe.h +76 -0
  203. package/src/headers/20/stream_wrap.h +131 -0
  204. package/src/headers/20/string_bytes.h +120 -0
  205. package/src/headers/20/string_decoder-inl.h +37 -0
  206. package/src/headers/20/string_decoder.h +50 -0
  207. package/src/headers/20/string_search.h +638 -0
  208. package/src/headers/20/tcp_wrap.h +105 -0
  209. package/src/headers/20/threadpoolwork-inl.h +70 -0
  210. package/src/headers/20/timer_wrap-inl.h +32 -0
  211. package/src/headers/20/timer_wrap.h +85 -0
  212. package/src/headers/20/timers.h +70 -0
  213. package/src/headers/20/tracing/agent.h +195 -0
  214. package/src/headers/20/tracing/trace_event.h +720 -0
  215. package/src/headers/20/tracing/trace_event_common.h +1109 -0
  216. package/src/headers/20/tty_wrap.h +65 -0
  217. package/src/headers/20/udp_wrap.h +227 -0
  218. package/src/headers/20/undici_version.h +6 -0
  219. package/src/headers/20/util-inl.h +623 -0
  220. package/src/headers/20/util.h +988 -0
  221. package/src/headers/20/v8-cppgc.h +245 -0
  222. package/src/headers/20/v8-fast-api-calls.h +957 -0
  223. package/dist/bindings/cws_darwin_arm64_node64.node +0 -0
  224. package/dist/bindings/cws_darwin_arm64_node72.node +0 -0
  225. package/dist/bindings/cws_darwin_arm64_node79.node +0 -0
  226. package/dist/bindings/cws_darwin_x64_node64.node +0 -0
  227. package/dist/bindings/cws_darwin_x64_node72.node +0 -0
  228. package/dist/bindings/cws_darwin_x64_node79.node +0 -0
  229. package/dist/bindings/cws_linux_x64_node64.node +0 -0
  230. package/dist/bindings/cws_linux_x64_node72.node +0 -0
  231. package/dist/bindings/cws_linux_x64_node79.node +0 -0
  232. package/dist/bindings/cws_win32_x64_node64.node +0 -0
  233. package/dist/bindings/cws_win32_x64_node72.node +0 -0
  234. package/dist/bindings/cws_win32_x64_node79.node +0 -0
@@ -0,0 +1,147 @@
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
+ enum Http2SessionStateIndex {
25
+ IDX_SESSION_STATE_EFFECTIVE_LOCAL_WINDOW_SIZE,
26
+ IDX_SESSION_STATE_EFFECTIVE_RECV_DATA_LENGTH,
27
+ IDX_SESSION_STATE_NEXT_STREAM_ID,
28
+ IDX_SESSION_STATE_LOCAL_WINDOW_SIZE,
29
+ IDX_SESSION_STATE_LAST_PROC_STREAM_ID,
30
+ IDX_SESSION_STATE_REMOTE_WINDOW_SIZE,
31
+ IDX_SESSION_STATE_OUTBOUND_QUEUE_SIZE,
32
+ IDX_SESSION_STATE_HD_DEFLATE_DYNAMIC_TABLE_SIZE,
33
+ IDX_SESSION_STATE_HD_INFLATE_DYNAMIC_TABLE_SIZE,
34
+ IDX_SESSION_STATE_COUNT
35
+ };
36
+
37
+ enum Http2StreamStateIndex {
38
+ IDX_STREAM_STATE,
39
+ IDX_STREAM_STATE_WEIGHT,
40
+ IDX_STREAM_STATE_SUM_DEPENDENCY_WEIGHT,
41
+ IDX_STREAM_STATE_LOCAL_CLOSE,
42
+ IDX_STREAM_STATE_REMOTE_CLOSE,
43
+ IDX_STREAM_STATE_LOCAL_WINDOW_SIZE,
44
+ IDX_STREAM_STATE_COUNT
45
+ };
46
+
47
+ enum Http2OptionsIndex {
48
+ IDX_OPTIONS_MAX_DEFLATE_DYNAMIC_TABLE_SIZE,
49
+ IDX_OPTIONS_MAX_RESERVED_REMOTE_STREAMS,
50
+ IDX_OPTIONS_MAX_SEND_HEADER_BLOCK_LENGTH,
51
+ IDX_OPTIONS_PEER_MAX_CONCURRENT_STREAMS,
52
+ IDX_OPTIONS_PADDING_STRATEGY,
53
+ IDX_OPTIONS_MAX_HEADER_LIST_PAIRS,
54
+ IDX_OPTIONS_MAX_OUTSTANDING_PINGS,
55
+ IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS,
56
+ IDX_OPTIONS_MAX_SESSION_MEMORY,
57
+ IDX_OPTIONS_MAX_SETTINGS,
58
+ IDX_OPTIONS_FLAGS
59
+ };
60
+
61
+ enum Http2StreamStatisticsIndex {
62
+ IDX_STREAM_STATS_ID,
63
+ IDX_STREAM_STATS_TIMETOFIRSTBYTE,
64
+ IDX_STREAM_STATS_TIMETOFIRSTHEADER,
65
+ IDX_STREAM_STATS_TIMETOFIRSTBYTESENT,
66
+ IDX_STREAM_STATS_SENTBYTES,
67
+ IDX_STREAM_STATS_RECEIVEDBYTES,
68
+ IDX_STREAM_STATS_COUNT
69
+ };
70
+
71
+ enum Http2SessionStatisticsIndex {
72
+ IDX_SESSION_STATS_TYPE,
73
+ IDX_SESSION_STATS_PINGRTT,
74
+ IDX_SESSION_STATS_FRAMESRECEIVED,
75
+ IDX_SESSION_STATS_FRAMESSENT,
76
+ IDX_SESSION_STATS_STREAMCOUNT,
77
+ IDX_SESSION_STATS_STREAMAVERAGEDURATION,
78
+ IDX_SESSION_STATS_DATA_SENT,
79
+ IDX_SESSION_STATS_DATA_RECEIVED,
80
+ IDX_SESSION_STATS_MAX_CONCURRENT_STREAMS,
81
+ IDX_SESSION_STATS_COUNT
82
+ };
83
+
84
+ class Http2State : public BaseObject {
85
+ public:
86
+ Http2State(Realm* realm, v8::Local<v8::Object> obj)
87
+ : BaseObject(realm, obj),
88
+ root_buffer(realm->isolate(), sizeof(http2_state_internal)),
89
+ session_state_buffer(
90
+ realm->isolate(),
91
+ offsetof(http2_state_internal, session_state_buffer),
92
+ IDX_SESSION_STATE_COUNT,
93
+ root_buffer),
94
+ stream_state_buffer(realm->isolate(),
95
+ offsetof(http2_state_internal, stream_state_buffer),
96
+ IDX_STREAM_STATE_COUNT,
97
+ root_buffer),
98
+ stream_stats_buffer(realm->isolate(),
99
+ offsetof(http2_state_internal, stream_stats_buffer),
100
+ IDX_STREAM_STATS_COUNT,
101
+ root_buffer),
102
+ session_stats_buffer(
103
+ realm->isolate(),
104
+ offsetof(http2_state_internal, session_stats_buffer),
105
+ IDX_SESSION_STATS_COUNT,
106
+ root_buffer),
107
+ options_buffer(realm->isolate(),
108
+ offsetof(http2_state_internal, options_buffer),
109
+ IDX_OPTIONS_FLAGS + 1,
110
+ root_buffer),
111
+ settings_buffer(realm->isolate(),
112
+ offsetof(http2_state_internal, settings_buffer),
113
+ IDX_SETTINGS_COUNT + 1,
114
+ root_buffer) {}
115
+
116
+ AliasedUint8Array root_buffer;
117
+ AliasedFloat64Array session_state_buffer;
118
+ AliasedFloat64Array stream_state_buffer;
119
+ AliasedFloat64Array stream_stats_buffer;
120
+ AliasedFloat64Array session_stats_buffer;
121
+ AliasedUint32Array options_buffer;
122
+ AliasedUint32Array settings_buffer;
123
+
124
+ void MemoryInfo(MemoryTracker* tracker) const override;
125
+ SET_SELF_SIZE(Http2State)
126
+ SET_MEMORY_INFO_NAME(Http2State)
127
+
128
+ SET_BINDING_ID(http2_binding_data)
129
+
130
+ private:
131
+ struct http2_state_internal {
132
+ // doubles first so that they are always sizeof(double)-aligned
133
+ double session_state_buffer[IDX_SESSION_STATE_COUNT];
134
+ double stream_state_buffer[IDX_STREAM_STATE_COUNT];
135
+ double stream_stats_buffer[IDX_STREAM_STATS_COUNT];
136
+ double session_stats_buffer[IDX_SESSION_STATS_COUNT];
137
+ uint32_t options_buffer[IDX_OPTIONS_FLAGS + 1];
138
+ uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1];
139
+ };
140
+ };
141
+
142
+ } // namespace http2
143
+ } // namespace node
144
+
145
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
146
+
147
+ #endif // SRC_NODE_HTTP2_STATE_H_
@@ -0,0 +1,201 @@
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
+
12
+ namespace node {
13
+
14
+ template <typename T>
15
+ NgHeaders<T>::NgHeaders(Environment* env, v8::Local<v8::Array> headers) {
16
+ v8::Local<v8::Value> header_string =
17
+ headers->Get(env->context(), 0).ToLocalChecked();
18
+ v8::Local<v8::Value> header_count =
19
+ headers->Get(env->context(), 1).ToLocalChecked();
20
+ CHECK(header_count->IsUint32());
21
+ CHECK(header_string->IsString());
22
+ count_ = header_count.As<v8::Uint32>()->Value();
23
+ int header_string_len = header_string.As<v8::String>()->Length();
24
+
25
+ if (count_ == 0) {
26
+ CHECK_EQ(header_string_len, 0);
27
+ return;
28
+ }
29
+
30
+ buf_.AllocateSufficientStorage((alignof(nv_t) - 1) +
31
+ count_ * sizeof(nv_t) +
32
+ header_string_len);
33
+
34
+ char* start = AlignUp(buf_.out(), alignof(nv_t));
35
+ char* header_contents = start + (count_ * sizeof(nv_t));
36
+ nv_t* const nva = reinterpret_cast<nv_t*>(start);
37
+
38
+ CHECK_LE(header_contents + header_string_len, *buf_ + buf_.length());
39
+ CHECK_EQ(header_string.As<v8::String>()->WriteOneByte(
40
+ env->isolate(),
41
+ reinterpret_cast<uint8_t*>(header_contents),
42
+ 0,
43
+ header_string_len,
44
+ v8::String::NO_NULL_TERMINATION),
45
+ header_string_len);
46
+
47
+ size_t n = 0;
48
+ char* p;
49
+ for (p = header_contents; p < header_contents + header_string_len; n++) {
50
+ if (n >= count_) {
51
+ static uint8_t zero = '\0';
52
+ nva[0].name = nva[0].value = &zero;
53
+ nva[0].namelen = nva[0].valuelen = 1;
54
+ count_ = 1;
55
+ return;
56
+ }
57
+
58
+ nva[n].name = reinterpret_cast<uint8_t*>(p);
59
+ nva[n].namelen = strlen(p);
60
+ p += nva[n].namelen + 1;
61
+ nva[n].value = reinterpret_cast<uint8_t*>(p);
62
+ nva[n].valuelen = strlen(p);
63
+ p += nva[n].valuelen + 1;
64
+ nva[n].flags = *p;
65
+ p++;
66
+ }
67
+ }
68
+
69
+ size_t GetClientMaxHeaderPairs(size_t max_header_pairs) {
70
+ static constexpr size_t min_header_pairs = 1;
71
+ return std::max(max_header_pairs, min_header_pairs);
72
+ }
73
+
74
+ size_t GetServerMaxHeaderPairs(size_t max_header_pairs) {
75
+ static constexpr size_t min_header_pairs = 4;
76
+ return std::max(max_header_pairs, min_header_pairs);
77
+ }
78
+
79
+ template <typename allocator_t>
80
+ std::string NgHeaderBase<allocator_t>::ToString() const {
81
+ std::string ret = name();
82
+ ret += " = ";
83
+ ret += value();
84
+ return ret;
85
+ }
86
+
87
+ template <typename T>
88
+ bool NgHeader<T>::IsZeroLength(
89
+ NgHeader<T>::rcbuf_t* name,
90
+ NgHeader<T>::rcbuf_t* value) {
91
+ return IsZeroLength(-1, name, value);
92
+ }
93
+
94
+ template <typename T>
95
+ bool NgHeader<T>::IsZeroLength(
96
+ int32_t token,
97
+ NgHeader<T>::rcbuf_t* name,
98
+ NgHeader<T>::rcbuf_t* value) {
99
+
100
+ if (NgHeader<T>::rcbufferpointer_t::IsZeroLength(value))
101
+ return true;
102
+
103
+ const char* header_name = T::ToHttpHeaderName(token);
104
+ return header_name != nullptr ||
105
+ NgHeader<T>::rcbufferpointer_t::IsZeroLength(name);
106
+ }
107
+
108
+ template <typename T>
109
+ NgHeader<T>::NgHeader(
110
+ Environment* env,
111
+ NgHeader<T>::rcbuf_t* name,
112
+ NgHeader<T>::rcbuf_t* value,
113
+ uint8_t flags)
114
+ : NgHeader<T>(env, -1, name, value, flags) {}
115
+
116
+ template <typename T>
117
+ NgHeader<T>::NgHeader(
118
+ Environment* env,
119
+ int32_t token,
120
+ NgHeader<T>::rcbuf_t* name,
121
+ NgHeader<T>::rcbuf_t* value,
122
+ uint8_t flags) : env_(env), token_(token), flags_(flags) {
123
+ if (token == -1) {
124
+ CHECK_NOT_NULL(name);
125
+ name_.reset(name, true); // Internalizable
126
+ }
127
+ CHECK_NOT_NULL(value);
128
+ name_.reset(name, true); // Internalizable
129
+ value_.reset(value);
130
+ }
131
+
132
+ template <typename T>
133
+ NgHeader<T>::NgHeader(NgHeader<T>&& other) noexcept
134
+ : env_(other.env_),
135
+ name_(std::move(other.name_)),
136
+ value_(std::move(other.value_)),
137
+ token_(other.token_),
138
+ flags_(other.flags_) {
139
+ other.token_ = -1;
140
+ other.flags_ = 0;
141
+ other.env_ = nullptr;
142
+ }
143
+
144
+ template <typename T>
145
+ void NgHeader<T>::MemoryInfo(MemoryTracker* tracker) const {
146
+ tracker->TrackField("name", name_);
147
+ tracker->TrackField("value", value_);
148
+ }
149
+
150
+ template <typename T>
151
+ v8::MaybeLocal<v8::String> NgHeader<T>::GetName(
152
+ NgHeader<T>::allocator_t* allocator) const {
153
+
154
+ // Not all instances will support using token id's for header names.
155
+ // HTTP/2 specifically does not support it.
156
+ const char* header_name = T::ToHttpHeaderName(token_);
157
+
158
+ // If header_name is not nullptr, then it is a known header with
159
+ // a statically defined name. We can safely internalize it here.
160
+ if (header_name != nullptr) {
161
+ auto& static_str_map = env_->isolate_data()->static_str_map;
162
+ v8::Eternal<v8::String> eternal = static_str_map[header_name];
163
+ if (eternal.IsEmpty()) {
164
+ v8::Local<v8::String> str = OneByteString(env_->isolate(), header_name);
165
+ eternal.Set(env_->isolate(), str);
166
+ return str;
167
+ }
168
+ return eternal.Get(env_->isolate());
169
+ }
170
+ return rcbufferpointer_t::External::New(allocator, name_);
171
+ }
172
+
173
+ template <typename T>
174
+ v8::MaybeLocal<v8::String> NgHeader<T>::GetValue(
175
+ NgHeader<T>::allocator_t* allocator) const {
176
+ return rcbufferpointer_t::External::New(allocator, value_);
177
+ }
178
+
179
+ template <typename T>
180
+ std::string NgHeader<T>::name() const {
181
+ return name_.str();
182
+ }
183
+
184
+ template <typename T>
185
+ std::string NgHeader<T>::value() const {
186
+ return value_.str();
187
+ }
188
+
189
+ template <typename T>
190
+ size_t NgHeader<T>::length() const {
191
+ return name_.len() + value_.len();
192
+ }
193
+
194
+ template <typename T>
195
+ uint8_t NgHeader<T>::flags() const {
196
+ return flags_;
197
+ }
198
+
199
+ } // namespace node
200
+
201
+ #endif // SRC_NODE_HTTP_COMMON_INL_H_