@bytecodealliance/preview2-shim 0.17.8 → 0.17.9

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.
@@ -1,57 +1,57 @@
1
1
  import {
2
- SOCKET_DATAGRAM_STREAM_DISPOSE,
3
- SOCKET_DATAGRAM_STREAM_SUBSCRIBE,
4
- SOCKET_INCOMING_DATAGRAM_STREAM_RECEIVE,
5
- SOCKET_OUTGOING_DATAGRAM_STREAM_CHECK_SEND,
6
- SOCKET_OUTGOING_DATAGRAM_STREAM_SEND,
7
- SOCKET_RESOLVE_ADDRESS_CREATE_REQUEST,
8
- SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST,
9
- SOCKET_RESOLVE_ADDRESS_SUBSCRIBE_REQUEST,
10
- SOCKET_RESOLVE_ADDRESS_TAKE_REQUEST,
11
- SOCKET_GET_DEFAULT_RECEIVE_BUFFER_SIZE,
12
- SOCKET_GET_DEFAULT_SEND_BUFFER_SIZE,
13
- SOCKET_TCP_ACCEPT,
14
- SOCKET_TCP_BIND_FINISH,
15
- SOCKET_TCP_BIND_START,
16
- SOCKET_TCP_CONNECT_FINISH,
17
- SOCKET_TCP_CONNECT_START,
18
- SOCKET_TCP_CREATE_HANDLE,
19
- SOCKET_TCP_DISPOSE,
20
- SOCKET_TCP_GET_LOCAL_ADDRESS,
21
- SOCKET_TCP_GET_REMOTE_ADDRESS,
22
- SOCKET_TCP_IS_LISTENING,
23
- SOCKET_TCP_LISTEN_FINISH,
24
- SOCKET_TCP_LISTEN_START,
25
- SOCKET_TCP_SET_KEEP_ALIVE,
26
- SOCKET_TCP_SET_LISTEN_BACKLOG_SIZE,
27
- SOCKET_TCP_SHUTDOWN,
28
- SOCKET_TCP_SUBSCRIBE,
29
- SOCKET_TCP,
30
- SOCKET_UDP_BIND_FINISH,
31
- SOCKET_UDP_BIND_START,
32
- SOCKET_UDP_CREATE_HANDLE,
33
- SOCKET_UDP_DISPOSE,
34
- SOCKET_UDP_GET_LOCAL_ADDRESS,
35
- SOCKET_UDP_GET_RECEIVE_BUFFER_SIZE,
36
- SOCKET_UDP_GET_REMOTE_ADDRESS,
37
- SOCKET_UDP_GET_SEND_BUFFER_SIZE,
38
- SOCKET_UDP_GET_UNICAST_HOP_LIMIT,
39
- SOCKET_UDP_SET_RECEIVE_BUFFER_SIZE,
40
- SOCKET_UDP_SET_SEND_BUFFER_SIZE,
41
- SOCKET_UDP_SET_UNICAST_HOP_LIMIT,
42
- SOCKET_UDP_STREAM,
43
- SOCKET_UDP_SUBSCRIBE,
44
- } from '../io/calls.js';
2
+ SOCKET_DATAGRAM_STREAM_DISPOSE,
3
+ SOCKET_DATAGRAM_STREAM_SUBSCRIBE,
4
+ SOCKET_INCOMING_DATAGRAM_STREAM_RECEIVE,
5
+ SOCKET_OUTGOING_DATAGRAM_STREAM_CHECK_SEND,
6
+ SOCKET_OUTGOING_DATAGRAM_STREAM_SEND,
7
+ SOCKET_RESOLVE_ADDRESS_CREATE_REQUEST,
8
+ SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST,
9
+ SOCKET_RESOLVE_ADDRESS_SUBSCRIBE_REQUEST,
10
+ SOCKET_RESOLVE_ADDRESS_TAKE_REQUEST,
11
+ SOCKET_GET_DEFAULT_RECEIVE_BUFFER_SIZE,
12
+ SOCKET_GET_DEFAULT_SEND_BUFFER_SIZE,
13
+ SOCKET_TCP_ACCEPT,
14
+ SOCKET_TCP_BIND_FINISH,
15
+ SOCKET_TCP_BIND_START,
16
+ SOCKET_TCP_CONNECT_FINISH,
17
+ SOCKET_TCP_CONNECT_START,
18
+ SOCKET_TCP_CREATE_HANDLE,
19
+ SOCKET_TCP_DISPOSE,
20
+ SOCKET_TCP_GET_LOCAL_ADDRESS,
21
+ SOCKET_TCP_GET_REMOTE_ADDRESS,
22
+ SOCKET_TCP_IS_LISTENING,
23
+ SOCKET_TCP_LISTEN_FINISH,
24
+ SOCKET_TCP_LISTEN_START,
25
+ SOCKET_TCP_SET_KEEP_ALIVE,
26
+ SOCKET_TCP_SET_LISTEN_BACKLOG_SIZE,
27
+ SOCKET_TCP_SHUTDOWN,
28
+ SOCKET_TCP_SUBSCRIBE,
29
+ SOCKET_TCP,
30
+ SOCKET_UDP_BIND_FINISH,
31
+ SOCKET_UDP_BIND_START,
32
+ SOCKET_UDP_CREATE_HANDLE,
33
+ SOCKET_UDP_DISPOSE,
34
+ SOCKET_UDP_GET_LOCAL_ADDRESS,
35
+ SOCKET_UDP_GET_RECEIVE_BUFFER_SIZE,
36
+ SOCKET_UDP_GET_REMOTE_ADDRESS,
37
+ SOCKET_UDP_GET_SEND_BUFFER_SIZE,
38
+ SOCKET_UDP_GET_UNICAST_HOP_LIMIT,
39
+ SOCKET_UDP_SET_RECEIVE_BUFFER_SIZE,
40
+ SOCKET_UDP_SET_SEND_BUFFER_SIZE,
41
+ SOCKET_UDP_SET_UNICAST_HOP_LIMIT,
42
+ SOCKET_UDP_STREAM,
43
+ SOCKET_UDP_SUBSCRIBE,
44
+ } from "../io/calls.js";
45
45
  import {
46
- earlyDispose,
47
- inputStreamCreate,
48
- ioCall,
49
- outputStreamCreate,
50
- pollableCreate,
51
- registerDispose,
52
- } from '../io/worker-io.js';
46
+ earlyDispose,
47
+ inputStreamCreate,
48
+ ioCall,
49
+ outputStreamCreate,
50
+ pollableCreate,
51
+ registerDispose,
52
+ } from "../io/worker-io.js";
53
53
 
54
- const symbolDispose = Symbol.dispose || Symbol.for('dispose');
54
+ const symbolDispose = Symbol.dispose || Symbol.for("dispose");
55
55
 
56
56
  /**
57
57
  * @typedef {import("../../types/interfaces/wasi-sockets-network").IpSocketAddress} IpSocketAddress
@@ -60,28 +60,28 @@ const symbolDispose = Symbol.dispose || Symbol.for('dispose');
60
60
 
61
61
  // Network class privately stores capabilities
62
62
  class Network {
63
- #allowDnsLookup = true;
64
- #allowTcp = true;
65
- #allowUdp = true;
66
-
67
- static _denyDnsLookup(network = defaultNetwork) {
68
- network.#allowDnsLookup = false;
69
- }
70
- static _denyTcp(network = defaultNetwork) {
71
- network.#allowTcp = false;
72
- }
73
- static _denyUdp(network = defaultNetwork) {
74
- network.#allowUdp = false;
75
- }
76
- static _mayDnsLookup(network = defaultNetwork) {
77
- return network.#allowDnsLookup;
78
- }
79
- static _mayTcp(network = defaultNetwork) {
80
- return network.#allowTcp;
81
- }
82
- static _mayUdp(network = defaultNetwork) {
83
- return network.#allowUdp;
84
- }
63
+ #allowDnsLookup = true;
64
+ #allowTcp = true;
65
+ #allowUdp = true;
66
+
67
+ static _denyDnsLookup(network = defaultNetwork) {
68
+ network.#allowDnsLookup = false;
69
+ }
70
+ static _denyTcp(network = defaultNetwork) {
71
+ network.#allowTcp = false;
72
+ }
73
+ static _denyUdp(network = defaultNetwork) {
74
+ network.#allowUdp = false;
75
+ }
76
+ static _mayDnsLookup(network = defaultNetwork) {
77
+ return network.#allowDnsLookup;
78
+ }
79
+ static _mayTcp(network = defaultNetwork) {
80
+ return network.#allowTcp;
81
+ }
82
+ static _mayUdp(network = defaultNetwork) {
83
+ return network.#allowUdp;
84
+ }
85
85
  }
86
86
 
87
87
  export const _denyDnsLookup = Network._denyDnsLookup;
@@ -105,531 +105,461 @@ delete Network._mayUdp;
105
105
  const defaultNetwork = new Network();
106
106
 
107
107
  export const instanceNetwork = {
108
- instanceNetwork() {
109
- return defaultNetwork;
110
- },
108
+ instanceNetwork() {
109
+ return defaultNetwork;
110
+ },
111
111
  };
112
112
 
113
113
  export const network = { Network };
114
114
 
115
115
  class ResolveAddressStream {
116
- #id;
117
- #data;
118
- #curItem = 0;
119
- #error = false;
120
- #finalizer;
121
- resolveNextAddress() {
122
- if (!this.#data) {
123
- const res = ioCall(
124
- SOCKET_RESOLVE_ADDRESS_TAKE_REQUEST,
125
- this.#id,
126
- null
127
- );
128
- this.#data = res.val;
129
- this.#error = res.tag === 'err';
130
- }
131
- if (this.#error) {
132
- throw this.#data;
133
- }
134
- if (this.#curItem < this.#data.length) {
135
- return this.#data[this.#curItem++];
136
- }
137
- return undefined;
138
- }
139
- subscribe() {
140
- return pollableCreate(
141
- ioCall(SOCKET_RESOLVE_ADDRESS_SUBSCRIBE_REQUEST, this.#id, null),
142
- this
143
- );
144
- }
145
- static _resolveAddresses(network, name) {
146
- if (!mayDnsLookup(network)) {
147
- throw 'permanent-resolver-failure';
148
- }
149
- const res = new ResolveAddressStream();
150
- res.#id = ioCall(SOCKET_RESOLVE_ADDRESS_CREATE_REQUEST, null, name);
151
- res.#finalizer = registerDispose(
152
- res,
153
- null,
154
- res.#id,
155
- resolveAddressStreamDispose
156
- );
157
- return res;
158
- }
159
- [symbolDispose]() {
160
- if (this.#finalizer) {
161
- earlyDispose(this.#finalizer);
162
- this.#finalizer = null;
163
- }
164
- }
116
+ #id;
117
+ #data;
118
+ #curItem = 0;
119
+ #error = false;
120
+ #finalizer;
121
+ resolveNextAddress() {
122
+ if (!this.#data) {
123
+ const res = ioCall(SOCKET_RESOLVE_ADDRESS_TAKE_REQUEST, this.#id, null);
124
+ this.#data = res.val;
125
+ this.#error = res.tag === "err";
126
+ }
127
+ if (this.#error) {
128
+ throw this.#data;
129
+ }
130
+ if (this.#curItem < this.#data.length) {
131
+ return this.#data[this.#curItem++];
132
+ }
133
+ return undefined;
134
+ }
135
+ subscribe() {
136
+ return pollableCreate(ioCall(SOCKET_RESOLVE_ADDRESS_SUBSCRIBE_REQUEST, this.#id, null), this);
137
+ }
138
+ static _resolveAddresses(network, name) {
139
+ if (!mayDnsLookup(network)) {
140
+ throw "permanent-resolver-failure";
141
+ }
142
+ const res = new ResolveAddressStream();
143
+ res.#id = ioCall(SOCKET_RESOLVE_ADDRESS_CREATE_REQUEST, null, name);
144
+ res.#finalizer = registerDispose(res, null, res.#id, resolveAddressStreamDispose);
145
+ return res;
146
+ }
147
+ [symbolDispose]() {
148
+ if (this.#finalizer) {
149
+ earlyDispose(this.#finalizer);
150
+ this.#finalizer = null;
151
+ }
152
+ }
165
153
  }
166
154
  function resolveAddressStreamDispose(id) {
167
- ioCall(SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST, id, null);
155
+ ioCall(SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST, id, null);
168
156
  }
169
157
 
170
158
  const resolveAddresses = ResolveAddressStream._resolveAddresses;
171
159
  delete ResolveAddressStream._resolveAddresses;
172
160
 
173
161
  export const ipNameLookup = {
174
- ResolveAddressStream,
175
- resolveAddresses,
162
+ ResolveAddressStream,
163
+ resolveAddresses,
176
164
  };
177
165
 
178
166
  class TcpSocket {
179
- #id;
180
- #network;
181
- #family;
182
- #finalizer;
183
- #options = {
184
- // defaults per https://nodejs.org/docs/latest/api/net.html#socketsetkeepaliveenable-initialdelay
185
- keepAlive: false,
186
- // Node.js doesn't give us the ability to detect the OS default,
187
- // therefore we hardcode the default value instead of using the OS default,
188
- // since we would never be able to report it as a return value otherwise.
189
- // We could make this configurable as a global JCO implementation configuration
190
- // instead.
191
- keepAliveIdleTime: 7200_000_000_000n,
192
-
193
- // The following options are NOT configurable in Node.js!
194
- // Any configurations set will respond correctly, but underneath retain
195
- // system / Node.js defaults.
196
- keepAliveInterval: 1_000_000_000n,
197
- keepAliveCount: 10,
198
- hopLimit: 1,
199
-
200
- // For sendBufferSize and receiveBufferSize we can at least
201
- // use the system defaults, but still we can't support setting them.
202
- sendBufferSize: undefined,
203
- receiveBufferSize: undefined,
204
- };
205
- /**
206
- * @param {IpAddressFamily} addressFamily
207
- * @param {number} id
208
- * @returns {TcpSocket}
209
- */
210
- static _create(addressFamily, id) {
211
- const socket = new TcpSocket();
212
- socket.#id = id;
213
- socket.#family = addressFamily;
214
- socket.#finalizer = registerDispose(socket, null, id, socketTcpDispose);
215
- return socket;
216
- }
217
- startBind(network, localAddress) {
218
- if (!mayTcp(network)) {
219
- throw 'access-denied';
220
- }
221
- ioCall(SOCKET_TCP_BIND_START, this.#id, {
222
- localAddress,
223
- family: this.#family,
224
- });
225
- this.#network = network;
226
- }
227
- finishBind() {
228
- ioCall(SOCKET_TCP_BIND_FINISH, this.#id, null);
229
- }
230
- startConnect(network, remoteAddress) {
231
- if (this.#network && network !== this.#network) {
232
- throw 'invalid-argument';
233
- }
234
- if (!mayTcp(network)) {
235
- throw 'access-denied';
236
- }
237
- ioCall(SOCKET_TCP_CONNECT_START, this.#id, {
238
- remoteAddress,
239
- family: this.#family,
240
- });
241
- this.#network = network;
242
- }
243
- finishConnect() {
244
- const [inputStreamId, outputStreamId] = ioCall(
245
- SOCKET_TCP_CONNECT_FINISH,
246
- this.#id,
247
- null
248
- );
249
- return [
250
- inputStreamCreate(SOCKET_TCP, inputStreamId),
251
- outputStreamCreate(SOCKET_TCP, outputStreamId),
252
- ];
253
- }
254
- startListen() {
255
- if (!mayTcp(this.#network)) {
256
- throw 'access-denied';
257
- }
258
- ioCall(SOCKET_TCP_LISTEN_START, this.#id, null);
259
- }
260
- finishListen() {
261
- ioCall(SOCKET_TCP_LISTEN_FINISH, this.#id, null);
262
- }
263
- accept() {
264
- if (!mayTcp(this.#network)) {
265
- throw 'access-denied';
266
- }
267
- const [socketId, inputStreamId, outputStreamId] = ioCall(
268
- SOCKET_TCP_ACCEPT,
269
- this.#id,
270
- null
271
- );
272
- const socket = tcpSocketCreate(this.#family, socketId);
273
- Object.assign(socket.#options, this.#options);
274
- return [
275
- socket,
276
- inputStreamCreate(SOCKET_TCP, inputStreamId),
277
- outputStreamCreate(SOCKET_TCP, outputStreamId),
278
- ];
279
- }
280
- localAddress() {
281
- return ioCall(SOCKET_TCP_GET_LOCAL_ADDRESS, this.#id, null);
282
- }
283
- remoteAddress() {
284
- return ioCall(SOCKET_TCP_GET_REMOTE_ADDRESS, this.#id, null);
285
- }
286
- isListening() {
287
- return ioCall(SOCKET_TCP_IS_LISTENING, this.#id, null);
288
- }
289
- addressFamily() {
290
- return this.#family;
291
- }
292
- setListenBacklogSize(value) {
293
- if (value === 0n) {
294
- throw 'invalid-argument';
295
- }
296
- ioCall(SOCKET_TCP_SET_LISTEN_BACKLOG_SIZE, this.#id, value);
297
- }
298
- keepAliveEnabled() {
299
- return this.#options.keepAlive;
300
- }
301
- setKeepAliveEnabled(value) {
302
- this.#options.keepAlive = value;
167
+ #id;
168
+ #network;
169
+ #family;
170
+ #finalizer;
171
+ #options = {
172
+ // defaults per https://nodejs.org/docs/latest/api/net.html#socketsetkeepaliveenable-initialdelay
173
+ keepAlive: false,
174
+ // Node.js doesn't give us the ability to detect the OS default,
175
+ // therefore we hardcode the default value instead of using the OS default,
176
+ // since we would never be able to report it as a return value otherwise.
177
+ // We could make this configurable as a global JCO implementation configuration
178
+ // instead.
179
+ keepAliveIdleTime: 7200_000_000_000n,
180
+
181
+ // The following options are NOT configurable in Node.js!
182
+ // Any configurations set will respond correctly, but underneath retain
183
+ // system / Node.js defaults.
184
+ keepAliveInterval: 1_000_000_000n,
185
+ keepAliveCount: 10,
186
+ hopLimit: 1,
187
+
188
+ // For sendBufferSize and receiveBufferSize we can at least
189
+ // use the system defaults, but still we can't support setting them.
190
+ sendBufferSize: undefined,
191
+ receiveBufferSize: undefined,
192
+ };
193
+ /**
194
+ * @param {IpAddressFamily} addressFamily
195
+ * @param {number} id
196
+ * @returns {TcpSocket}
197
+ */
198
+ static _create(addressFamily, id) {
199
+ const socket = new TcpSocket();
200
+ socket.#id = id;
201
+ socket.#family = addressFamily;
202
+ socket.#finalizer = registerDispose(socket, null, id, socketTcpDispose);
203
+ return socket;
204
+ }
205
+ startBind(network, localAddress) {
206
+ if (!mayTcp(network)) {
207
+ throw "access-denied";
208
+ }
209
+ ioCall(SOCKET_TCP_BIND_START, this.#id, {
210
+ localAddress,
211
+ family: this.#family,
212
+ });
213
+ this.#network = network;
214
+ }
215
+ finishBind() {
216
+ ioCall(SOCKET_TCP_BIND_FINISH, this.#id, null);
217
+ }
218
+ startConnect(network, remoteAddress) {
219
+ if (this.#network && network !== this.#network) {
220
+ throw "invalid-argument";
221
+ }
222
+ if (!mayTcp(network)) {
223
+ throw "access-denied";
224
+ }
225
+ ioCall(SOCKET_TCP_CONNECT_START, this.#id, {
226
+ remoteAddress,
227
+ family: this.#family,
228
+ });
229
+ this.#network = network;
230
+ }
231
+ finishConnect() {
232
+ const [inputStreamId, outputStreamId] = ioCall(SOCKET_TCP_CONNECT_FINISH, this.#id, null);
233
+ return [
234
+ inputStreamCreate(SOCKET_TCP, inputStreamId),
235
+ outputStreamCreate(SOCKET_TCP, outputStreamId),
236
+ ];
237
+ }
238
+ startListen() {
239
+ if (!mayTcp(this.#network)) {
240
+ throw "access-denied";
241
+ }
242
+ ioCall(SOCKET_TCP_LISTEN_START, this.#id, null);
243
+ }
244
+ finishListen() {
245
+ ioCall(SOCKET_TCP_LISTEN_FINISH, this.#id, null);
246
+ }
247
+ accept() {
248
+ if (!mayTcp(this.#network)) {
249
+ throw "access-denied";
250
+ }
251
+ const [socketId, inputStreamId, outputStreamId] = ioCall(SOCKET_TCP_ACCEPT, this.#id, null);
252
+ const socket = tcpSocketCreate(this.#family, socketId);
253
+ Object.assign(socket.#options, this.#options);
254
+ return [
255
+ socket,
256
+ inputStreamCreate(SOCKET_TCP, inputStreamId),
257
+ outputStreamCreate(SOCKET_TCP, outputStreamId),
258
+ ];
259
+ }
260
+ localAddress() {
261
+ return ioCall(SOCKET_TCP_GET_LOCAL_ADDRESS, this.#id, null);
262
+ }
263
+ remoteAddress() {
264
+ return ioCall(SOCKET_TCP_GET_REMOTE_ADDRESS, this.#id, null);
265
+ }
266
+ isListening() {
267
+ return ioCall(SOCKET_TCP_IS_LISTENING, this.#id, null);
268
+ }
269
+ addressFamily() {
270
+ return this.#family;
271
+ }
272
+ setListenBacklogSize(value) {
273
+ if (value === 0n) {
274
+ throw "invalid-argument";
275
+ }
276
+ ioCall(SOCKET_TCP_SET_LISTEN_BACKLOG_SIZE, this.#id, value);
277
+ }
278
+ keepAliveEnabled() {
279
+ return this.#options.keepAlive;
280
+ }
281
+ setKeepAliveEnabled(value) {
282
+ this.#options.keepAlive = value;
283
+ ioCall(SOCKET_TCP_SET_KEEP_ALIVE, this.#id, {
284
+ keepAlive: value,
285
+ keepAliveIdleTime: this.#options.keepAliveIdleTime,
286
+ });
287
+ }
288
+ keepAliveIdleTime() {
289
+ return this.#options.keepAliveIdleTime;
290
+ }
291
+ setKeepAliveIdleTime(value) {
292
+ if (value < 1n) {
293
+ throw "invalid-argument";
294
+ }
295
+ if (value < 1_000_000_000n) {
296
+ value = 1_000_000_000n;
297
+ }
298
+ if (value !== this.#options.keepAliveIdleTime) {
299
+ this.#options.keepAliveIdleTime = value;
300
+ if (this.#options.keepAlive) {
303
301
  ioCall(SOCKET_TCP_SET_KEEP_ALIVE, this.#id, {
304
- keepAlive: value,
305
- keepAliveIdleTime: this.#options.keepAliveIdleTime,
302
+ keepAlive: true,
303
+ keepAliveIdleTime: this.#options.keepAliveIdleTime,
306
304
  });
307
- }
308
- keepAliveIdleTime() {
309
- return this.#options.keepAliveIdleTime;
310
- }
311
- setKeepAliveIdleTime(value) {
312
- if (value < 1n) {
313
- throw 'invalid-argument';
314
- }
315
- if (value < 1_000_000_000n) {
316
- value = 1_000_000_000n;
317
- }
318
- if (value !== this.#options.keepAliveIdleTime) {
319
- this.#options.keepAliveIdleTime = value;
320
- if (this.#options.keepAlive) {
321
- ioCall(SOCKET_TCP_SET_KEEP_ALIVE, this.#id, {
322
- keepAlive: true,
323
- keepAliveIdleTime: this.#options.keepAliveIdleTime,
324
- });
325
- }
326
- }
327
- }
328
- keepAliveInterval() {
329
- return this.#options.keepAliveInterval;
330
- }
331
- setKeepAliveInterval(value) {
332
- if (value < 1n) {
333
- throw 'invalid-argument';
334
- }
335
- this.#options.keepAliveInterval = value;
336
- }
337
- keepAliveCount() {
338
- return this.#options.keepAliveCount;
339
- }
340
- setKeepAliveCount(value) {
341
- if (value < 1) {
342
- throw 'invalid-argument';
343
- }
344
- this.#options.keepAliveCount = value;
345
- }
346
- hopLimit() {
347
- return this.#options.hopLimit;
348
- }
349
- setHopLimit(value) {
350
- if (value < 1) {
351
- throw 'invalid-argument';
352
- }
353
- this.#options.hopLimit = value;
354
- }
355
- receiveBufferSize() {
356
- if (!this.#options.receiveBufferSize) {
357
- this.#options.receiveBufferSize = ioCall(
358
- SOCKET_GET_DEFAULT_RECEIVE_BUFFER_SIZE,
359
- null,
360
- null
361
- );
362
- }
363
- return this.#options.receiveBufferSize;
364
- }
365
- setReceiveBufferSize(value) {
366
- if (value === 0n) {
367
- throw 'invalid-argument';
368
- }
369
- this.#options.receiveBufferSize = value;
370
- }
371
- sendBufferSize() {
372
- if (!this.#options.sendBufferSize) {
373
- this.#options.sendBufferSize = ioCall(
374
- SOCKET_GET_DEFAULT_SEND_BUFFER_SIZE,
375
- null,
376
- null
377
- );
378
- }
379
- return this.#options.sendBufferSize;
380
- }
381
- setSendBufferSize(value) {
382
- if (value === 0n) {
383
- throw 'invalid-argument';
384
- }
385
- this.#options.sendBufferSize = value;
386
- }
387
- subscribe() {
388
- return pollableCreate(
389
- ioCall(SOCKET_TCP_SUBSCRIBE, this.#id, null),
390
- this
391
- );
392
- }
393
- shutdown(shutdownType) {
394
- ioCall(SOCKET_TCP_SHUTDOWN, this.#id, shutdownType);
395
- }
396
- [symbolDispose]() {
397
- if (this.#finalizer) {
398
- earlyDispose(this.#finalizer);
399
- this.#finalizer = null;
400
- }
401
- }
305
+ }
306
+ }
307
+ }
308
+ keepAliveInterval() {
309
+ return this.#options.keepAliveInterval;
310
+ }
311
+ setKeepAliveInterval(value) {
312
+ if (value < 1n) {
313
+ throw "invalid-argument";
314
+ }
315
+ this.#options.keepAliveInterval = value;
316
+ }
317
+ keepAliveCount() {
318
+ return this.#options.keepAliveCount;
319
+ }
320
+ setKeepAliveCount(value) {
321
+ if (value < 1) {
322
+ throw "invalid-argument";
323
+ }
324
+ this.#options.keepAliveCount = value;
325
+ }
326
+ hopLimit() {
327
+ return this.#options.hopLimit;
328
+ }
329
+ setHopLimit(value) {
330
+ if (value < 1) {
331
+ throw "invalid-argument";
332
+ }
333
+ this.#options.hopLimit = value;
334
+ }
335
+ receiveBufferSize() {
336
+ if (!this.#options.receiveBufferSize) {
337
+ this.#options.receiveBufferSize = ioCall(SOCKET_GET_DEFAULT_RECEIVE_BUFFER_SIZE, null, null);
338
+ }
339
+ return this.#options.receiveBufferSize;
340
+ }
341
+ setReceiveBufferSize(value) {
342
+ if (value === 0n) {
343
+ throw "invalid-argument";
344
+ }
345
+ this.#options.receiveBufferSize = value;
346
+ }
347
+ sendBufferSize() {
348
+ if (!this.#options.sendBufferSize) {
349
+ this.#options.sendBufferSize = ioCall(SOCKET_GET_DEFAULT_SEND_BUFFER_SIZE, null, null);
350
+ }
351
+ return this.#options.sendBufferSize;
352
+ }
353
+ setSendBufferSize(value) {
354
+ if (value === 0n) {
355
+ throw "invalid-argument";
356
+ }
357
+ this.#options.sendBufferSize = value;
358
+ }
359
+ subscribe() {
360
+ return pollableCreate(ioCall(SOCKET_TCP_SUBSCRIBE, this.#id, null), this);
361
+ }
362
+ shutdown(shutdownType) {
363
+ ioCall(SOCKET_TCP_SHUTDOWN, this.#id, shutdownType);
364
+ }
365
+ [symbolDispose]() {
366
+ if (this.#finalizer) {
367
+ earlyDispose(this.#finalizer);
368
+ this.#finalizer = null;
369
+ }
370
+ }
402
371
  }
403
372
 
404
373
  function socketTcpDispose(id) {
405
- ioCall(SOCKET_TCP_DISPOSE, id, null);
374
+ ioCall(SOCKET_TCP_DISPOSE, id, null);
406
375
  }
407
376
 
408
377
  const tcpSocketCreate = TcpSocket._create;
409
378
  delete TcpSocket._create;
410
379
 
411
380
  export const tcpCreateSocket = {
412
- createTcpSocket(addressFamily) {
413
- if (addressFamily !== 'ipv4' && addressFamily !== 'ipv6') {
414
- throw 'not-supported';
415
- }
416
- return tcpSocketCreate(
417
- addressFamily,
418
- ioCall(SOCKET_TCP_CREATE_HANDLE, null, null)
419
- );
420
- },
381
+ createTcpSocket(addressFamily) {
382
+ if (addressFamily !== "ipv4" && addressFamily !== "ipv6") {
383
+ throw "not-supported";
384
+ }
385
+ return tcpSocketCreate(addressFamily, ioCall(SOCKET_TCP_CREATE_HANDLE, null, null));
386
+ },
421
387
  };
422
388
 
423
389
  export const tcp = {
424
- TcpSocket,
390
+ TcpSocket,
425
391
  };
426
392
 
427
393
  class UdpSocket {
428
- #id;
429
- #network;
430
- #family;
431
- #finalizer;
432
- static _create(addressFamily) {
433
- if (addressFamily !== 'ipv4' && addressFamily !== 'ipv6') {
434
- throw 'not-supported';
435
- }
436
- const socket = new UdpSocket();
437
- socket.#id = ioCall(SOCKET_UDP_CREATE_HANDLE, null, {
438
- family: addressFamily,
439
- // we always set the unicastHopLimit, because there is no
440
- // getter but only a setter for this in Node.js, so it is the
441
- // only way to guarantee the consistent value
442
- unicastHopLimit: 64,
443
- });
444
- socket.#family = addressFamily;
445
- socket.#finalizer = registerDispose(
446
- socket,
447
- null,
448
- socket.#id,
449
- socketUdpDispose
450
- );
451
- return socket;
452
- }
453
- startBind(network, localAddress) {
454
- if (!mayUdp(network)) {
455
- throw 'access-denied';
456
- }
457
- ioCall(SOCKET_UDP_BIND_START, this.#id, {
458
- localAddress,
459
- family: this.#family,
460
- });
461
- this.#network = network;
462
- }
463
- finishBind() {
464
- ioCall(SOCKET_UDP_BIND_FINISH, this.#id, null);
465
- }
466
- stream(remoteAddress) {
467
- if (!mayUdp(this.#network)) {
468
- throw 'access-denied';
469
- }
470
- const [incomingDatagramStreamId, outgoingDatagramStreamId] = ioCall(
471
- SOCKET_UDP_STREAM,
472
- this.#id,
473
- remoteAddress
474
- );
475
- return [
476
- incomingDatagramStreamCreate(incomingDatagramStreamId),
477
- outgoingDatagramStreamCreate(outgoingDatagramStreamId),
478
- ];
479
- }
480
- localAddress() {
481
- return ioCall(SOCKET_UDP_GET_LOCAL_ADDRESS, this.#id);
482
- }
483
- remoteAddress() {
484
- return ioCall(SOCKET_UDP_GET_REMOTE_ADDRESS, this.#id);
485
- }
486
- addressFamily() {
487
- return this.#family;
488
- }
489
- unicastHopLimit() {
490
- return ioCall(SOCKET_UDP_GET_UNICAST_HOP_LIMIT, this.#id);
491
- }
492
- setUnicastHopLimit(value) {
493
- if (value < 1) {
494
- throw 'invalid-argument';
495
- }
496
- ioCall(SOCKET_UDP_SET_UNICAST_HOP_LIMIT, this.#id, value);
497
- }
498
- receiveBufferSize() {
499
- return ioCall(SOCKET_UDP_GET_RECEIVE_BUFFER_SIZE, this.#id);
500
- }
501
- setReceiveBufferSize(value) {
502
- if (value === 0n) {
503
- throw 'invalid-argument';
504
- }
505
- ioCall(SOCKET_UDP_SET_RECEIVE_BUFFER_SIZE, this.#id, value);
506
- }
507
- sendBufferSize() {
508
- return ioCall(SOCKET_UDP_GET_SEND_BUFFER_SIZE, this.#id);
509
- }
510
- setSendBufferSize(value) {
511
- if (value === 0n) {
512
- throw 'invalid-argument';
513
- }
514
- ioCall(SOCKET_UDP_SET_SEND_BUFFER_SIZE, this.#id, value);
515
- }
516
- subscribe() {
517
- return pollableCreate(
518
- ioCall(SOCKET_UDP_SUBSCRIBE, this.#id, null),
519
- this
520
- );
521
- }
522
- [symbolDispose]() {
523
- if (this.#finalizer) {
524
- earlyDispose(this.#finalizer);
525
- this.#finalizer = null;
526
- }
527
- }
394
+ #id;
395
+ #network;
396
+ #family;
397
+ #finalizer;
398
+ static _create(addressFamily) {
399
+ if (addressFamily !== "ipv4" && addressFamily !== "ipv6") {
400
+ throw "not-supported";
401
+ }
402
+ const socket = new UdpSocket();
403
+ socket.#id = ioCall(SOCKET_UDP_CREATE_HANDLE, null, {
404
+ family: addressFamily,
405
+ // we always set the unicastHopLimit, because there is no
406
+ // getter but only a setter for this in Node.js, so it is the
407
+ // only way to guarantee the consistent value
408
+ unicastHopLimit: 64,
409
+ });
410
+ socket.#family = addressFamily;
411
+ socket.#finalizer = registerDispose(socket, null, socket.#id, socketUdpDispose);
412
+ return socket;
413
+ }
414
+ startBind(network, localAddress) {
415
+ if (!mayUdp(network)) {
416
+ throw "access-denied";
417
+ }
418
+ ioCall(SOCKET_UDP_BIND_START, this.#id, {
419
+ localAddress,
420
+ family: this.#family,
421
+ });
422
+ this.#network = network;
423
+ }
424
+ finishBind() {
425
+ ioCall(SOCKET_UDP_BIND_FINISH, this.#id, null);
426
+ }
427
+ stream(remoteAddress) {
428
+ if (!mayUdp(this.#network)) {
429
+ throw "access-denied";
430
+ }
431
+ const [incomingDatagramStreamId, outgoingDatagramStreamId] = ioCall(
432
+ SOCKET_UDP_STREAM,
433
+ this.#id,
434
+ remoteAddress,
435
+ );
436
+ return [
437
+ incomingDatagramStreamCreate(incomingDatagramStreamId),
438
+ outgoingDatagramStreamCreate(outgoingDatagramStreamId),
439
+ ];
440
+ }
441
+ localAddress() {
442
+ return ioCall(SOCKET_UDP_GET_LOCAL_ADDRESS, this.#id);
443
+ }
444
+ remoteAddress() {
445
+ return ioCall(SOCKET_UDP_GET_REMOTE_ADDRESS, this.#id);
446
+ }
447
+ addressFamily() {
448
+ return this.#family;
449
+ }
450
+ unicastHopLimit() {
451
+ return ioCall(SOCKET_UDP_GET_UNICAST_HOP_LIMIT, this.#id);
452
+ }
453
+ setUnicastHopLimit(value) {
454
+ if (value < 1) {
455
+ throw "invalid-argument";
456
+ }
457
+ ioCall(SOCKET_UDP_SET_UNICAST_HOP_LIMIT, this.#id, value);
458
+ }
459
+ receiveBufferSize() {
460
+ return ioCall(SOCKET_UDP_GET_RECEIVE_BUFFER_SIZE, this.#id);
461
+ }
462
+ setReceiveBufferSize(value) {
463
+ if (value === 0n) {
464
+ throw "invalid-argument";
465
+ }
466
+ ioCall(SOCKET_UDP_SET_RECEIVE_BUFFER_SIZE, this.#id, value);
467
+ }
468
+ sendBufferSize() {
469
+ return ioCall(SOCKET_UDP_GET_SEND_BUFFER_SIZE, this.#id);
470
+ }
471
+ setSendBufferSize(value) {
472
+ if (value === 0n) {
473
+ throw "invalid-argument";
474
+ }
475
+ ioCall(SOCKET_UDP_SET_SEND_BUFFER_SIZE, this.#id, value);
476
+ }
477
+ subscribe() {
478
+ return pollableCreate(ioCall(SOCKET_UDP_SUBSCRIBE, this.#id, null), this);
479
+ }
480
+ [symbolDispose]() {
481
+ if (this.#finalizer) {
482
+ earlyDispose(this.#finalizer);
483
+ this.#finalizer = null;
484
+ }
485
+ }
528
486
  }
529
487
 
530
488
  function socketUdpDispose(id) {
531
- ioCall(SOCKET_UDP_DISPOSE, id, null);
489
+ ioCall(SOCKET_UDP_DISPOSE, id, null);
532
490
  }
533
491
 
534
492
  const createUdpSocket = UdpSocket._create;
535
493
  delete UdpSocket._create;
536
494
 
537
495
  class IncomingDatagramStream {
538
- #id;
539
- #finalizer;
540
- static _create(id) {
541
- const stream = new IncomingDatagramStream();
542
- stream.#id = id;
543
- stream.#finalizer = registerDispose(
544
- stream,
545
- null,
546
- id,
547
- incomingDatagramStreamDispose
548
- );
549
- return stream;
550
- }
551
- receive(maxResults) {
552
- return ioCall(
553
- SOCKET_INCOMING_DATAGRAM_STREAM_RECEIVE,
554
- this.#id,
555
- maxResults
556
- );
557
- }
558
- subscribe() {
559
- return pollableCreate(
560
- ioCall(SOCKET_DATAGRAM_STREAM_SUBSCRIBE, this.#id, null),
561
- this
562
- );
563
- }
564
- [symbolDispose]() {
565
- if (this.#finalizer) {
566
- earlyDispose(this.#finalizer);
567
- this.#finalizer = null;
568
- }
569
- }
496
+ #id;
497
+ #finalizer;
498
+ static _create(id) {
499
+ const stream = new IncomingDatagramStream();
500
+ stream.#id = id;
501
+ stream.#finalizer = registerDispose(stream, null, id, incomingDatagramStreamDispose);
502
+ return stream;
503
+ }
504
+ receive(maxResults) {
505
+ return ioCall(SOCKET_INCOMING_DATAGRAM_STREAM_RECEIVE, this.#id, maxResults);
506
+ }
507
+ subscribe() {
508
+ return pollableCreate(ioCall(SOCKET_DATAGRAM_STREAM_SUBSCRIBE, this.#id, null), this);
509
+ }
510
+ [symbolDispose]() {
511
+ if (this.#finalizer) {
512
+ earlyDispose(this.#finalizer);
513
+ this.#finalizer = null;
514
+ }
515
+ }
570
516
  }
571
517
 
572
518
  function incomingDatagramStreamDispose(id) {
573
- ioCall(SOCKET_DATAGRAM_STREAM_DISPOSE, id, null);
519
+ ioCall(SOCKET_DATAGRAM_STREAM_DISPOSE, id, null);
574
520
  }
575
521
 
576
522
  const incomingDatagramStreamCreate = IncomingDatagramStream._create;
577
523
  delete IncomingDatagramStream._create;
578
524
 
579
525
  class OutgoingDatagramStream {
580
- #id = 0;
581
- #finalizer;
582
- static _create(id) {
583
- const stream = new OutgoingDatagramStream();
584
- stream.#id = id;
585
- stream.#finalizer = registerDispose(
586
- stream,
587
- null,
588
- id,
589
- outgoingDatagramStreamDispose
590
- );
591
- return stream;
592
- }
593
- checkSend() {
594
- return ioCall(
595
- SOCKET_OUTGOING_DATAGRAM_STREAM_CHECK_SEND,
596
- this.#id,
597
- null
598
- );
599
- }
600
- send(datagrams) {
601
- return ioCall(
602
- SOCKET_OUTGOING_DATAGRAM_STREAM_SEND,
603
- this.#id,
604
- datagrams
605
- );
606
- }
607
- subscribe() {
608
- return pollableCreate(
609
- ioCall(SOCKET_DATAGRAM_STREAM_SUBSCRIBE, this.#id, null),
610
- this
611
- );
612
- }
613
- [symbolDispose]() {
614
- if (this.#finalizer) {
615
- earlyDispose(this.#finalizer);
616
- this.#finalizer = null;
617
- }
618
- }
526
+ #id = 0;
527
+ #finalizer;
528
+ static _create(id) {
529
+ const stream = new OutgoingDatagramStream();
530
+ stream.#id = id;
531
+ stream.#finalizer = registerDispose(stream, null, id, outgoingDatagramStreamDispose);
532
+ return stream;
533
+ }
534
+ checkSend() {
535
+ return ioCall(SOCKET_OUTGOING_DATAGRAM_STREAM_CHECK_SEND, this.#id, null);
536
+ }
537
+ send(datagrams) {
538
+ return ioCall(SOCKET_OUTGOING_DATAGRAM_STREAM_SEND, this.#id, datagrams);
539
+ }
540
+ subscribe() {
541
+ return pollableCreate(ioCall(SOCKET_DATAGRAM_STREAM_SUBSCRIBE, this.#id, null), this);
542
+ }
543
+ [symbolDispose]() {
544
+ if (this.#finalizer) {
545
+ earlyDispose(this.#finalizer);
546
+ this.#finalizer = null;
547
+ }
548
+ }
619
549
  }
620
550
  function outgoingDatagramStreamDispose(id) {
621
- ioCall(SOCKET_DATAGRAM_STREAM_DISPOSE, id, null);
551
+ ioCall(SOCKET_DATAGRAM_STREAM_DISPOSE, id, null);
622
552
  }
623
553
 
624
554
  const outgoingDatagramStreamCreate = OutgoingDatagramStream._create;
625
555
  delete OutgoingDatagramStream._create;
626
556
 
627
557
  export const udpCreateSocket = {
628
- createUdpSocket,
558
+ createUdpSocket,
629
559
  };
630
560
 
631
561
  export const udp = {
632
- UdpSocket,
633
- OutgoingDatagramStream,
634
- IncomingDatagramStream,
562
+ UdpSocket,
563
+ OutgoingDatagramStream,
564
+ IncomingDatagramStream,
635
565
  };