@webvpn/dgram 0.0.1 → 0.2.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 (91) hide show
  1. package/build/index.cjs +2235 -2327
  2. package/build/index.cjs.map +1 -1
  3. package/build/index.d.ts +5 -184
  4. package/build/index.js +10094 -2664
  5. package/build/index.js.map +1 -1
  6. package/package.json +4 -6
  7. package/src/index.ts +5 -698
  8. package/vite-plugin-node-stdlib-browser.cjs +61 -61
  9. package/vite.config.ts +29 -29
  10. package/build/index.mjs +0 -3252
  11. package/build/index.mjs.map +0 -1
  12. package/build/test.d.ts +0 -1
  13. package/build/utils.d.ts +0 -13
  14. package/index.html +0 -11
  15. package/src/chrome-dgram.js +0 -503
  16. package/src/flatbuffers/client-packet-type.ts +0 -40
  17. package/src/flatbuffers/client-packet.ts +0 -162
  18. package/src/flatbuffers/client-tcpserver-close.ts +0 -93
  19. package/src/flatbuffers/client-tcpserver-get-connections.ts +0 -93
  20. package/src/flatbuffers/client-tcpserver-listen.ts +0 -211
  21. package/src/flatbuffers/client-tcpserver.ts +0 -159
  22. package/src/flatbuffers/client-tcpsocket-connect.ts +0 -253
  23. package/src/flatbuffers/client-tcpsocket-destroy-soon.ts +0 -75
  24. package/src/flatbuffers/client-tcpsocket-destroy.ts +0 -93
  25. package/src/flatbuffers/client-tcpsocket-end.ts +0 -93
  26. package/src/flatbuffers/client-tcpsocket-pause.ts +0 -75
  27. package/src/flatbuffers/client-tcpsocket-reset-and-destroy.ts +0 -75
  28. package/src/flatbuffers/client-tcpsocket-resume.ts +0 -75
  29. package/src/flatbuffers/client-tcpsocket-set-encoding.ts +0 -93
  30. package/src/flatbuffers/client-tcpsocket-set-keep-alive.ts +0 -103
  31. package/src/flatbuffers/client-tcpsocket-set-no-delay.ts +0 -89
  32. package/src/flatbuffers/client-tcpsocket-set-timeout.ts +0 -107
  33. package/src/flatbuffers/client-tcpsocket-write.ts +0 -147
  34. package/src/flatbuffers/client-tcpsocket.ts +0 -89
  35. package/src/flatbuffers/client-udpsocket-add-membership.ts +0 -110
  36. package/src/flatbuffers/client-udpsocket-add-source-specific-membership.ts +0 -127
  37. package/src/flatbuffers/client-udpsocket-bind.ts +0 -138
  38. package/src/flatbuffers/client-udpsocket-close.ts +0 -93
  39. package/src/flatbuffers/client-udpsocket-disconnect.ts +0 -75
  40. package/src/flatbuffers/client-udpsocket-drop-membership.ts +0 -110
  41. package/src/flatbuffers/client-udpsocket-drop-source-specific-membership.ts +0 -127
  42. package/src/flatbuffers/client-udpsocket-send.ts +0 -189
  43. package/src/flatbuffers/client-udpsocket-set-broadcast.ts +0 -89
  44. package/src/flatbuffers/client-udpsocket-set-multicast-interface.ts +0 -93
  45. package/src/flatbuffers/client-udpsocket-set-multicast-loopback.ts +0 -89
  46. package/src/flatbuffers/client-udpsocket-set-multicast-ttl.ts +0 -89
  47. package/src/flatbuffers/client-udpsocket-set-recv-buffer-size.ts +0 -89
  48. package/src/flatbuffers/client-udpsocket-set-send-buffer-size.ts +0 -89
  49. package/src/flatbuffers/client-udpsocket-set-ttl.ts +0 -89
  50. package/src/flatbuffers/client-udpsocket.ts +0 -149
  51. package/src/flatbuffers/packet-handshake-type.ts +0 -9
  52. package/src/flatbuffers/packet.ts +0 -210
  53. package/src/flatbuffers/schema.ts +0 -75
  54. package/src/flatbuffers/server-packet-type.ts +0 -38
  55. package/src/flatbuffers/server-packet.ts +0 -158
  56. package/src/flatbuffers/server-tcpserver-callback-close.ts +0 -93
  57. package/src/flatbuffers/server-tcpserver-callback-get-connections.ts +0 -124
  58. package/src/flatbuffers/server-tcpserver-callback-listen.ts +0 -141
  59. package/src/flatbuffers/server-tcpserver-event-close.ts +0 -75
  60. package/src/flatbuffers/server-tcpserver-event-drop.ts +0 -75
  61. package/src/flatbuffers/server-tcpserver-event-error.ts +0 -75
  62. package/src/flatbuffers/server-tcpserver-event-listening.ts +0 -124
  63. package/src/flatbuffers/server-tcpsocket-callback-connect.ts +0 -189
  64. package/src/flatbuffers/server-tcpsocket-callback-end.ts +0 -93
  65. package/src/flatbuffers/server-tcpsocket-callback-set-timeout.ts +0 -93
  66. package/src/flatbuffers/server-tcpsocket-callback-write.ts +0 -93
  67. package/src/flatbuffers/server-tcpsocket-event-close.ts +0 -89
  68. package/src/flatbuffers/server-tcpsocket-event-connect.ts +0 -172
  69. package/src/flatbuffers/server-tcpsocket-event-connection-attempt-failed.ts +0 -138
  70. package/src/flatbuffers/server-tcpsocket-event-connection-attempt-timeout.ts +0 -121
  71. package/src/flatbuffers/server-tcpsocket-event-connection-attempt.ts +0 -121
  72. package/src/flatbuffers/server-tcpsocket-event-data.ts +0 -113
  73. package/src/flatbuffers/server-tcpsocket-event-drain.ts +0 -75
  74. package/src/flatbuffers/server-tcpsocket-event-end.ts +0 -75
  75. package/src/flatbuffers/server-tcpsocket-event-error.ts +0 -93
  76. package/src/flatbuffers/server-tcpsocket-event-lookup.ts +0 -141
  77. package/src/flatbuffers/server-tcpsocket-event-ready.ts +0 -75
  78. package/src/flatbuffers/server-tcpsocket-event-timeout.ts +0 -75
  79. package/src/flatbuffers/server-udpsocket-callback-bind.ts +0 -141
  80. package/src/flatbuffers/server-udpsocket-callback-close.ts +0 -93
  81. package/src/flatbuffers/server-udpsocket-callback-connect.ts +0 -141
  82. package/src/flatbuffers/server-udpsocket-callback-send.ts +0 -93
  83. package/src/flatbuffers/server-udpsocket-event-close.ts +0 -75
  84. package/src/flatbuffers/server-udpsocket-event-connect.ts +0 -75
  85. package/src/flatbuffers/server-udpsocket-event-error.ts +0 -93
  86. package/src/flatbuffers/server-udpsocket-event-listening.ts +0 -124
  87. package/src/flatbuffers/server-udpsocket-event-message.ts +0 -175
  88. package/src/net.js +0 -2442
  89. package/src/test.ts +0 -34
  90. package/src/types.ts +0 -16
  91. package/src/utils.ts +0 -45
package/src/index.ts CHANGED
@@ -1,701 +1,8 @@
1
- import type { BindOptions, Socket as DgramSocket, RemoteInfo, SocketOptions, SocketType } from 'dgram'
2
- import type { AddressInfo } from 'net'
1
+ import type * as DgramTypes from 'dgram'
3
2
 
4
- import { DuplexOptions, Stream } from 'stream'
5
- import { EventEmitter, } from 'events'
3
+ import { dgram } from '@fkn/lib'
6
4
 
7
- import { Packr } from 'msgpackr'
8
- import { makeWebVPNWebtransport, packPacket, unpackMultiplePackets, unpackPacket } from './utils'
5
+ export const Socket = dgram.Socket as typeof DgramTypes.Socket
6
+ export const createSocket = dgram.createSocket as typeof DgramTypes.createSocket
9
7
 
10
- type TypedWebTransportStream = WebTransportBidirectionalStream & {
11
- readable: ReadableStream<Uint8Array>
12
- writable: WritableStream<Uint8Array>
13
- }
14
-
15
- export type WebVPNHandshakePacket =
16
- {
17
- type: 'udp-socket'
18
- socketType: 'udp4' | 'udp6'
19
- reuseAddr?: boolean
20
- ipv6Only?: boolean
21
- recvBufferSize?: number
22
- sendBufferSize?: number
23
- // lookup?:
24
- // | ((
25
- // hostname: string,
26
- // options: dns.LookupOneOptions,
27
- // callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void,
28
- // ) => void)
29
- }
30
-
31
- export type SocketClientPacket =
32
- {
33
- type: 'addMembership'
34
- multicastAddress: string
35
- multicastInterface?: string
36
- } |
37
- {
38
- type: 'addSourceSpecificMembership'
39
- sourceAddress: string
40
- groupAddress: string
41
- multicastInterface?: string
42
- } |
43
- {
44
- type: 'bind'
45
- uuid?: string
46
- port?: number
47
- address?: string
48
- exclusive?: boolean
49
- // fd?: number
50
- } |
51
- {
52
- type: 'close'
53
- uuid?: string
54
- } |
55
- {
56
- type: 'connect'
57
- uuid?: string
58
- port: number
59
- address?: string
60
- } |
61
- {
62
- type: 'disconnect'
63
- } |
64
- {
65
- type: 'dropMembership'
66
- multicastAddress: string
67
- multicastInterface?: string
68
- } |
69
- {
70
- type: 'dropSourceSpecificMembership'
71
- sourceAddress: string
72
- groupAddress: string
73
- multicastInterface?: string
74
- } |
75
- {
76
- type: 'send'
77
- // uuid?: string
78
- msg: string | readonly any[] | Uint8Array
79
- offset?: number
80
- length?: number
81
- port?: number
82
- address?: string
83
- } |
84
- {
85
- type: 'setBroadcast'
86
- flag: boolean
87
- } |
88
- {
89
- type: 'setMulticastInterface'
90
- multicastInterface: string
91
- } |
92
- {
93
- type: 'setMulticastLoopback'
94
- flag: boolean
95
- } |
96
- {
97
- type: 'setMulticastTTL'
98
- ttl: number
99
- } |
100
- {
101
- type: 'setRecvBufferSize'
102
- size: number
103
- } |
104
- {
105
- type: 'setSendBufferSize'
106
- size: number
107
- } |
108
- {
109
- type: 'setTTL'
110
- ttl: number
111
- }
112
-
113
- export type SocketServerPacket =
114
- {
115
- type: 'event-close'
116
- } |
117
- {
118
- type: 'event-connect'
119
- } |
120
- {
121
- type: 'event-error'
122
- exception: string
123
- } |
124
- {
125
- type: 'event-listening'
126
- address: {
127
- address: string
128
- port: number
129
- family: 'IPv4' | 'IPv6'
130
- }
131
- } |
132
- // handled by datagram stream
133
- {
134
- type: 'event-message'
135
- message: Uint8Array
136
- rinfo: {
137
- address: string
138
- family: 'IPv4' | 'IPv6'
139
- port: number
140
- size: number
141
- }
142
- } |
143
- {
144
- type: 'callback-bind'
145
- uuid: string
146
- address: {
147
- address: string
148
- port: number
149
- family: 'IPv4' | 'IPv6'
150
- }
151
- } |
152
- {
153
- type: 'callback-close'
154
- uuid: string
155
- } |
156
- {
157
- type: 'callback-connect'
158
- uuid: string
159
- remoteAddress: {
160
- address: string
161
- port: number
162
- family: 'IPv4' | 'IPv6'
163
- }
164
- } |
165
- {
166
- type: 'callback-send'
167
- uuid: string
168
- }
169
-
170
- const normalizeBindArgs = (
171
- args:
172
- [port: number, address: string, callback: () => void] |
173
- [port: number, callback: () => void] |
174
- [callback: () => void] |
175
- [options: BindOptions, callback: () => void]
176
- ) => {
177
- if (args.length === 1) {
178
- return {
179
- port: undefined,
180
- address: undefined,
181
- callback: args[0]
182
- }
183
- } else if (args.length === 2) {
184
- if (typeof args[0] === 'number') {
185
- return {
186
- port: args[0],
187
- address: undefined,
188
- callback: args[1]
189
- }
190
- }
191
- if (args[0].fd !== undefined) {
192
- throw new Error('FKN WebVPN does not support file descriptors')
193
- }
194
- return {
195
- ...args[0],
196
- callback: args[1]
197
- }
198
- }
199
- return {
200
- port: args[0],
201
- address: args[1],
202
- callback: args[2]
203
- }
204
- }
205
-
206
- const normalizeConnectArgs = (
207
- args:
208
- [port: number, address?: string, callback?: () => void] |
209
- [port: number, callback: () => void]
210
- ) => {
211
- if (args.length === 2) {
212
- return {
213
- port: args[0],
214
- address: undefined,
215
- callback: args[1] as () => void
216
- }
217
- } else {
218
- return {
219
- port: args[0],
220
- address: args[1],
221
- callback: args[2]
222
- }
223
- }
224
- }
225
-
226
- const normalizeSendArgs = (
227
- args:
228
- [msg: string | readonly any[] | Uint8Array, port: number, address: string, callback: (error: Error | null, bytes: number) => void] |
229
- [msg: string | readonly any[] | Uint8Array, port: number, callback: (error: Error | null, bytes: number) => void] |
230
- [msg: string | readonly any[] | Uint8Array, callback: (error: Error | null, bytes: number) => void] |
231
- [msg: string | Uint8Array, offset: number, length: number, port: number, address: string, callback: (error: Error | null, bytes: number) => void] |
232
- [msg: string | Uint8Array, offset: number, length: number, port: number, callback: (error: Error | null, bytes: number) => void] |
233
- [msg: string | Uint8Array, offset: number, length: number, callback: (error: Error | null, bytes: number) => void]
234
- ) => {
235
- if (args.length === 6) {
236
- return {
237
- msg: args[0],
238
- offset: args[1],
239
- length: args[2],
240
- port: args[3],
241
- address: args[4],
242
- callback: args[5]
243
- }
244
- } else if (args.length === 5) {
245
- return {
246
- msg: args[0],
247
- offset: args[1],
248
- length: args[2],
249
- port: args[3],
250
- address: undefined,
251
- callback: args[4]
252
- }
253
- } else if (args.length === 4) {
254
- if (typeof args[3] === 'string') {
255
- return {
256
- msg: args[0],
257
- offset: undefined,
258
- length: undefined,
259
- port: args[1],
260
- address: args[2] as string,
261
- callback: args[3]
262
- }
263
- } else {
264
- return {
265
- msg: args[0],
266
- offset: args[1],
267
- length: undefined,
268
- port: args[2] as number,
269
- address: undefined,
270
- callback: args[3]
271
- }
272
- }
273
- } else if (args.length === 3) {
274
- return {
275
- msg: args[0],
276
- offset: undefined,
277
- length: undefined,
278
- port: args[1],
279
- address: undefined,
280
- callback: args[2]
281
- }
282
- } else if (args.length === 2) {
283
- return {
284
- msg: args[0],
285
- offset: undefined,
286
- length: undefined,
287
- port: undefined,
288
- address: undefined,
289
- callback: args[1]
290
- }
291
- } else {
292
- return {
293
- msg: args[0],
294
- offset: undefined,
295
- length: undefined,
296
- port: undefined,
297
- address: undefined,
298
- callback: undefined
299
- }
300
- }
301
- }
302
-
303
- interface EventEmitterOptions {
304
- /**
305
- * Enables automatic capturing of promise rejection.
306
- */
307
- captureRejections?: boolean | undefined;
308
- }
309
-
310
- export class Socket extends EventEmitter implements DgramSocket {
311
- _webVPN: Promise<{
312
- webtransport: WebTransport
313
- reader: ReadableStreamDefaultReader<Uint8Array>
314
- writer: WritableStreamDefaultWriter<Uint8Array>
315
- datagramReader: ReadableStreamDefaultReader<Uint8Array>
316
- datagramWriter: WritableStreamDefaultWriter<Uint8Array>
317
- }>
318
- _type: 'udp4' | 'udp6'
319
- _address: {
320
- address: string,
321
- port: number
322
- family: string
323
- } | undefined
324
- _remoteAddress: {
325
- address: string,
326
- port: number
327
- family: string
328
- } | undefined
329
-
330
- constructor(options: SocketOptions & EventEmitterOptions) {
331
- // console.log('new socket')
332
- super(options)
333
- this._type = options.type
334
- this._address = undefined
335
- this._webVPN =
336
- makeWebVPNWebtransport()
337
- .then(async (webtransport) => {
338
- const connectionDatagramReader = webtransport.datagrams.readable.getReader()
339
- const connectionDatagramWriter = webtransport.datagrams.writable.getWriter()
340
- await connectionDatagramWriter.ready
341
- const webTransportBidirectionalStream = await webtransport.createBidirectionalStream()
342
- const { readable, writable } = webTransportBidirectionalStream
343
- const reader = readable.getReader()
344
- const writer = writable.getWriter()
345
- await writer.ready
346
- await writer.write(packPacket({ type: 'udp-socket', socketType: options.type }))
347
-
348
- const read = async () => {
349
- const { done, value } = await reader.read()
350
- if (done) return
351
- try {
352
- const packets = unpackMultiplePackets(value) as SocketServerPacket[]
353
- for (const packet of packets) {
354
- // console.log('socket recv packet', packet)
355
- if (packet.type === 'event-close') {
356
- this.emit('close')
357
- } else if (packet.type === 'event-connect') {
358
- this.emit('connect')
359
- } else if (packet.type === 'event-error') {
360
- this.emit('error', new Error(packet.exception))
361
- } else if (packet.type === 'event-listening') {
362
- this._address = packet.address
363
- this.emit('listening')
364
- // handled by dgram stream
365
- // } else if (packet.type === 'event-message') {
366
- } else if (packet.type === 'callback-bind') {
367
- this._address = packet.address
368
- this.emit('callback-bind', { uuid: packet.uuid })
369
- } else if (packet.type === 'callback-close') {
370
- this.emit('callback-close', { uuid: packet.uuid })
371
- } else if (packet.type === 'callback-connect') {
372
- this._remoteAddress = packet.remoteAddress
373
- this.emit('callback-connect', { uuid: packet.uuid })
374
- } else if (packet.type === 'callback-send') {
375
- this.emit('callback-send', { uuid: packet.uuid })
376
- } else {
377
- console.error('unknown packet type', packet)
378
- }
379
- }
380
- } catch (err) {
381
- console.error(err)
382
- } finally {
383
- await read()
384
- }
385
- }
386
- read()
387
-
388
- return {
389
- webtransport: webtransport,
390
- reader: reader,
391
- writer: writer,
392
- datagramReader: connectionDatagramReader,
393
- datagramWriter: connectionDatagramWriter
394
- }
395
- })
396
- }
397
- addMembership(multicastAddress: string, multicastInterface?: string | undefined): void {
398
- this._webVPN.then(webVPN => {
399
- webVPN.writer.write(
400
- packPacket({
401
- type: 'addMembership',
402
- multicastAddress,
403
- multicastInterface
404
- })
405
- )
406
- })
407
- }
408
- address(): AddressInfo {
409
- if (!this._address) throw new Error('EBADF')
410
- return this._address
411
- }
412
-
413
- bind(port?: number | undefined, address?: string | undefined, callback?: (() => void) | undefined): this
414
- bind(port?: number | undefined, callback?: (() => void) | undefined): this
415
- bind(callback?: (() => void) | undefined): this
416
- bind(options: BindOptions, callback?: (() => void) | undefined): this
417
- bind(
418
- args:
419
- [port: number, address: string, callback: () => void] |
420
- [port: number, callback: () => void] |
421
- [callback: () => void] |
422
- [options: BindOptions, callback: () => void]
423
- ): this {
424
- // console.log('bind')
425
- const normalizedOptions = normalizeBindArgs(args)
426
- this._webVPN.then(webVPN => {
427
- const uuid = normalizedOptions.callback ? self.crypto.randomUUID() : undefined
428
- if (uuid && normalizedOptions.callback) {
429
- this.on('callback-bind', function callbackBind({ uuid: _uuid }) {
430
- if (_uuid !== uuid) return
431
- this.off('callback-bind', callbackBind)
432
- normalizedOptions.callback!()
433
- })
434
- }
435
- webVPN.writer.write(
436
- packPacket({
437
- type: 'bind',
438
- uuid,
439
- port: normalizedOptions.port,
440
- address: normalizedOptions.address,
441
- exclusive: normalizedOptions.exclusive
442
- })
443
- )
444
- })
445
- return this
446
- }
447
- close(callback?: (() => void) | undefined): this {
448
- this._webVPN.then(webVPN => {
449
- const uuid = callback ? self.crypto.randomUUID() : undefined
450
- if (uuid && callback) {
451
- this.on('callback-close', function callbackClose({ uuid: _uuid }) {
452
- if (_uuid !== uuid) return
453
- this.off('callback-close', callbackClose)
454
- callback()
455
- })
456
- }
457
- webVPN.writer.write(
458
- packPacket({
459
- type: 'close',
460
- uuid
461
- })
462
- )
463
- })
464
- return this
465
- }
466
-
467
- connect(port: number, address?: string, callback?: () => void): void;
468
- connect(port: number, callback: () => void): void;
469
- connect(
470
- ...args:
471
- [port: number, address?: string, callback?: () => void] |
472
- [port: number, callback: () => void]
473
- ): void {
474
- const normalizedOptions = normalizeConnectArgs(args)
475
- const address = normalizedOptions.address
476
- const port = normalizedOptions.port
477
-
478
- if (!address) throw new Error('port is required')
479
- if (!port) throw new Error('address is required')
480
-
481
- this._webVPN.then(webVPN => {
482
- const uuid = normalizedOptions.callback ? self.crypto.randomUUID() : undefined
483
- if (uuid && normalizedOptions.callback) {
484
- this.on('callback-connect', function callbackConnect({ uuid: _uuid }) {
485
- if (_uuid !== uuid) return
486
- this.off('callback-connect', callbackConnect)
487
- normalizedOptions.callback!()
488
- })
489
- }
490
- webVPN.writer.write(
491
- packPacket({
492
- type: 'connect',
493
- uuid,
494
- address,
495
- port
496
- })
497
- )
498
- })
499
- }
500
- disconnect(): void {
501
- if (!this._address) throw new Error('ERR_SOCKET_DGRAM_NOT_CONNECTED')
502
- this._address = undefined
503
- this._webVPN.then(webVPN => {
504
- webVPN.writer.write(packPacket({ type: 'disconnect' }))
505
- })
506
- }
507
- dropMembership(multicastAddress: string, multicastInterface?: string | undefined): void {
508
- this._webVPN.then(webVPN => {
509
- webVPN.writer.write(
510
- packPacket({
511
- type: 'dropMembership',
512
- multicastAddress,
513
- multicastInterface
514
- })
515
- )
516
- })
517
- }
518
- getRecvBufferSize(): number {
519
- return 0
520
- }
521
- getSendBufferSize(): number {
522
- return 0
523
- }
524
- getSendQueueSize(): number {
525
- return 0
526
- }
527
- getSendQueueCount(): number {
528
- return 0
529
- }
530
- ref(): this {
531
- return this
532
- }
533
- remoteAddress(): AddressInfo {
534
- if (!this._remoteAddress) throw new Error('ERR_SOCKET_DGRAM_NOT_CONNECTED')
535
- return {
536
- address: this._remoteAddress.address,
537
- family: this._remoteAddress.family,
538
- port: this._remoteAddress.port
539
- }
540
- }
541
-
542
- send(msg: string | readonly any[] | Uint8Array, port?: number | undefined, address?: string | undefined, callback?: ((error: Error | null, bytes: number) => void) | undefined): void
543
- send(msg: string | readonly any[] | Uint8Array, port?: number | undefined, callback?: ((error: Error | null, bytes: number) => void) | undefined): void
544
- send(msg: string | readonly any[] | Uint8Array, callback?: ((error: Error | null, bytes: number) => void) | undefined): void
545
- send(msg: string | Uint8Array, offset: number, length: number, port?: number | undefined, address?: string | undefined, callback?: ((error: Error | null, bytes: number) => void) | undefined): void
546
- send(msg: string | Uint8Array, offset: number, length: number, port?: number | undefined, callback?: ((error: Error | null, bytes: number) => void) | undefined): void
547
- send(msg: string | Uint8Array, offset: number, length: number, callback?: ((error: Error | null, bytes: number) => void) | undefined): void
548
- send(msg: unknown, offset?: unknown, length?: unknown, port?: unknown, address?: unknown, callback?: unknown): void
549
- send(
550
- ...args:
551
- [msg: string | readonly any[] | Uint8Array, port: number, address: string, callback: (error: Error | null, bytes: number) => void] |
552
- [msg: string | readonly any[] | Uint8Array, port: number, callback: (error: Error | null, bytes: number) => void] |
553
- [msg: string | readonly any[] | Uint8Array, callback: (error: Error | null, bytes: number) => void] |
554
- [msg: string | Uint8Array, offset: number, length: number, port: number, address: string, callback: (error: Error | null, bytes: number) => void] |
555
- [msg: string | Uint8Array, offset: number, length: number, port: number, callback: (error: Error | null, bytes: number) => void] |
556
- [msg: string | Uint8Array, offset: number, length: number, callback: (error: Error | null, bytes: number) => void]
557
- ): void {
558
- const { address, callback, length, msg, offset, port } = normalizeSendArgs(args)
559
- this._webVPN.then(webVPN => {
560
- // const uuid = callback ? self.crypto.randomUUID() : undefined
561
- // if (uuid && callback) {
562
- // this.on('callback-send', function callbackSend({ uuid: _uuid }) {
563
- // if (_uuid !== uuid) return
564
- // this.off('callback-send', callbackSend)
565
- // callback(null, 0)
566
- // })
567
- // }
568
- // console.log('send', {
569
- // type: 'send',
570
- // msg,
571
- // offset,
572
- // length,
573
- // port,
574
- // address
575
- // }, args)
576
- webVPN.datagramWriter.write(
577
- packPacket({
578
- type: 'send',
579
- msg,
580
- offset,
581
- length,
582
- port,
583
- address
584
- })
585
- )
586
- if (typeof callback === 'function') {
587
- callback(null, 0)
588
- }
589
- })
590
- }
591
- setBroadcast(flag: boolean): void {
592
- this._webVPN.then(webVPN => {
593
- webVPN.writer.write(
594
- packPacket({
595
- type: 'setBroadcast',
596
- flag
597
- })
598
- )
599
- })
600
- }
601
- setMulticastInterface(multicastInterface: string): void {
602
- this._webVPN.then(webVPN => {
603
- webVPN.writer.write(
604
- packPacket({
605
- type: 'setMulticastInterface',
606
- multicastInterface
607
- })
608
- )
609
- })
610
- }
611
- setMulticastLoopback(flag: boolean): boolean {
612
- this._webVPN.then(webVPN => {
613
- webVPN.writer.write(
614
- packPacket({
615
- type: 'setMulticastLoopback',
616
- flag
617
- })
618
- )
619
- })
620
- return true
621
- }
622
- setMulticastTTL(ttl: number): number {
623
- this._webVPN.then(webVPN => {
624
- webVPN.writer.write(
625
- packPacket({
626
- type: 'setMulticastTTL',
627
- ttl
628
- })
629
- )
630
- })
631
- return ttl
632
- }
633
- setRecvBufferSize(size: number): void {
634
- this._webVPN.then(webVPN => {
635
- webVPN.writer.write(
636
- packPacket({
637
- type: 'setRecvBufferSize',
638
- size
639
- })
640
- )
641
- })
642
- }
643
- setSendBufferSize(size: number): void {
644
- this._webVPN.then(webVPN => {
645
- webVPN.writer.write(
646
- packPacket({
647
- type: 'setSendBufferSize',
648
- size
649
- })
650
- )
651
- })
652
- }
653
- setTTL(ttl: number): number {
654
- this._webVPN.then(webVPN => {
655
- webVPN.writer.write(
656
- packPacket({
657
- type: 'setTTL',
658
- ttl
659
- })
660
- )
661
- })
662
- return ttl
663
- }
664
- unref(): this {
665
- return this
666
- }
667
- addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string | undefined): void {
668
- this._webVPN.then(webVPN => {
669
- webVPN.writer.write(
670
- packPacket({
671
- type: 'addSourceSpecificMembership',
672
- sourceAddress,
673
- groupAddress,
674
- multicastInterface
675
- })
676
- )
677
- })
678
- }
679
- dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string | undefined): void {
680
- this._webVPN.then(webVPN => {
681
- webVPN.writer.write(
682
- packPacket({
683
- type: 'dropSourceSpecificMembership',
684
- sourceAddress,
685
- groupAddress,
686
- multicastInterface
687
- })
688
- )
689
- })
690
- }
691
- }
692
-
693
- export const createSocket = (options: SocketType | SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void) => {
694
- const socket = new Socket(
695
- typeof options === 'string'
696
- ? { type: options }
697
- : options
698
- )
699
- if (callback) socket.on('message', callback)
700
- return socket
701
- }
8
+ export default dgram