@fails-components/webtransport 0.1.5 → 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 (70) hide show
  1. package/CMakeLists.txt +42 -111
  2. package/build.js +4 -4
  3. package/dist/lib/dom.d.ts +6 -0
  4. package/dist/lib/dom.d.ts.map +1 -1
  5. package/dist/lib/event-loop.d.ts +8 -3
  6. package/dist/lib/event-loop.d.ts.map +1 -1
  7. package/dist/lib/server.d.ts +3 -2
  8. package/dist/lib/server.d.ts.map +1 -1
  9. package/dist/lib/session.d.ts +78 -18
  10. package/dist/lib/session.d.ts.map +1 -1
  11. package/dist/lib/stream.d.ts +13 -5
  12. package/dist/lib/stream.d.ts.map +1 -1
  13. package/dist/lib/transport.d.ts.map +1 -1
  14. package/dist/lib/types.d.ts +11 -2
  15. package/dist/lib/types.d.ts.map +1 -1
  16. package/dist/lib/webtransport.d.ts +22 -0
  17. package/dist/lib/webtransport.d.ts.map +1 -1
  18. package/dist/test/bidirectional-streams.spec.d.ts.map +1 -1
  19. package/dist/test/datagrams.spec.d.ts.map +1 -1
  20. package/dist/test/fixtures/p-timeout.d.ts +8 -0
  21. package/dist/test/fixtures/p-timeout.d.ts.map +1 -0
  22. package/dist/test/fixtures/read-stream.d.ts.map +1 -1
  23. package/dist/test/unidirectional-streams.spec.d.ts.map +1 -1
  24. package/lib/dom.ts +7 -2
  25. package/lib/event-loop.js +13 -7
  26. package/lib/server.js +1 -1
  27. package/lib/session.js +71 -21
  28. package/lib/stream.js +137 -12
  29. package/lib/transport.js +3 -1
  30. package/lib/types.ts +13 -2
  31. package/lib/webtransport.js +31 -0
  32. package/package.json +5 -4
  33. package/platform/base/strings/utf_ostream_operators.h +5 -0
  34. package/platform/quiche/quic/core/io/socket_win.inc +3 -0
  35. package/platform/quiche_platform_impl/quiche_command_line_flags_impl.h +7 -0
  36. package/platform/quiche_platform_impl/quiche_export_impl.h +3 -9
  37. package/platform/quiche_platform_impl/quiche_server_stats_impl.h +1 -22
  38. package/platform/quiche_platform_impl/quiche_stream_buffer_allocator_impl.h +1 -4
  39. package/platform/quiche_platform_impl/quiche_time_utils_impl.h +1 -13
  40. package/platform/quiche_platform_impl/quiche_udp_socket_platform_impl.h +9 -0
  41. package/readme.md +3 -1
  42. package/src/http3client.cc +13 -29
  43. package/src/http3client.h +2 -6
  44. package/src/http3clientsession.cc +51 -40
  45. package/src/http3clientsession.h +44 -31
  46. package/src/http3clientstream.cc +17 -0
  47. package/src/http3clientstream.h +10 -0
  48. package/src/http3eventloop.cc +81 -61
  49. package/src/http3eventloop.h +10 -7
  50. package/src/http3server.cc +1 -1
  51. package/src/http3serversession.cc +1 -136
  52. package/src/http3serversession.h +7 -77
  53. package/src/http3serverstream.cc +0 -49
  54. package/src/http3serverstream.h +0 -5
  55. package/src/http3wtsessionvisitor.cc +1 -1
  56. package/src/http3wtsessionvisitor.h +24 -37
  57. package/src/http3wtstreamvisitor.cc +35 -8
  58. package/src/http3wtstreamvisitor.h +81 -3
  59. package/test/bidirectional-streams.spec.js +16 -7
  60. package/test/datagrams.spec.js +31 -20
  61. package/test/fixtures/p-timeout.js +33 -0
  62. package/test/fixtures/read-stream.js +4 -1
  63. package/test/unidirectional-streams.spec.js +24 -15
  64. package/platform/net/quiche/common/platform/impl/quiche_flags_impl.h +0 -12
  65. package/platform/poll.h +0 -2
  66. package/platform/quiche/quic/core/io/quic_poll_event_loop.h +0 -8
  67. package/platform/quiche_platform_impl/quic_testvalue_impl.h +0 -19
  68. package/platform/quiche_platform_impl/quic_udp_socket_winsock.cc +0 -732
  69. package/platform/quiche_platform_impl/quiche_time_utils_impl.cc +0 -43
  70. package/platform/quiche_platform_impl/socket_winsock.cc +0 -535
@@ -43,13 +43,23 @@ export class Http3WTStream {
43
43
  /** @type {Promise<void> | null} */
44
44
  pendingoperation: Promise<void> | null;
45
45
  pendingres: (() => void) | null;
46
- readable: ReadableStream<any> | undefined;
47
- readableController: import("stream/web").ReadableStreamController<any>;
46
+ /** @type {Promise<void> | null} */
47
+ pendingoperationRead: Promise<void> | null;
48
+ pendingresRead: ((value: void | PromiseLike<void>) => void) | null;
49
+ /** @type {Number} */
50
+ incomingbufferfilled: number;
51
+ /** @type {Number} */
52
+ incomingbufferreadpos: number;
53
+ /** @type {WebTransportReceiveStream} */
54
+ readable: WebTransportReceiveStream;
55
+ readableController: import("stream/web").ReadableByteStreamController;
48
56
  cancelres: (() => void) | null;
49
57
  readableclosed: boolean;
50
- writable: WritableStream<any> | undefined;
58
+ /** @type {WebTransportSendStream} */
59
+ writable: WebTransportSendStream;
51
60
  writableController: import("stream/web").WritableStreamDefaultController;
52
61
  abortres: (() => void) | null;
62
+ drainBuffer(): void;
53
63
  /**
54
64
  * @param {import('./types').StreamRecvSignalEvent} args
55
65
  * @returns {void}
@@ -111,6 +121,4 @@ export type Http3WTSession = import('./session').Http3WTSession;
111
121
  * WebTransport stream events
112
122
  */
113
123
  export type WritableStreamDefaultController = import('stream/web').WritableStreamDefaultController;
114
- import { ReadableStream } from "stream/web";
115
- import { WritableStream } from "stream/web";
116
124
  //# sourceMappingURL=stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../lib/stream.js"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG;AAEH;IAmRE;;OAEG;IACH,sBAFW,qBAAqB,GAAG,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,wBAAwB,QAmClH;IAtTD;;;;;;;OAOG;IACH;QANqC,MAAM,EAAhC,mBAAmB;QACE,SAAS,EAA9B,cAAc;QACD,SAAS,EAAtB,MAAM;QACQ,aAAa,EAA3B,OAAO;QACO,QAAQ,EAAtB,OAAO;OAmHjB;IAhHC,8CAAyB;IAEzB,8CAA+B;IAC/B,kBAA+B;IAC/B,uBAAuC;IACvC,kBAA6B;IAC7B,gBAAmB;IAEnB,mCAAmC;IACnC,kBADW,QAAQ,IAAI,CAAC,GAAG,IAAI,CACH;IAC5B,mBAkGkB,IAAI,SAlGA;IAGpB,0CA+BC;IA5BK,uEAAoC;IAclC,kBA4EQ,IAAI,SA5EY;IAQ1B,wBAA0B;IAShC,0CAwDC;IArDK,yEAAoC;IA8ClC,iBAcQ,IAAI,SAdW;IAkBnC;;;OAGG;IACH,yBAHW,OAAO,SAAS,EAAE,qBAAqB,GACrC,IAAI,CAgDhB;IAhBO,oCAA0B;IAkBlC;;;OAGG;IACH,mBAHW,eAAe,GACb,IAAI,CAuBhB;IAED;;OAEG;IACH,oBAFW,gBAAgB,QAY1B;IAED;;OAEG;IACH,oBAFW,gBAAgB,QAe1B;IAED;;OAEG;IACH,4BAFW,wBAAwB,QAoClC;IAzBK,qCAA2B;CAgElC;;;;6CAtUY,OAAO,SAAS,EAAE,8BAA8B;;;;oCAChD,OAAO,SAAS,EAAE,qBAAqB;;;;8BACvC,OAAO,SAAS,EAAE,eAAe;;;;+BACjC,OAAO,SAAS,EAAE,gBAAgB;;;;+BAClC,OAAO,SAAS,EAAE,gBAAgB;;;;uCAClC,OAAO,SAAS,EAAE,wBAAwB;;;;kCAE1C,OAAO,SAAS,EAAE,mBAAmB;;;;6BAErC,OAAO,WAAW,EAAE,cAAc;;;;8CAElC,OAAO,YAAY,EAAE,+BAA+B"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../lib/stream.js"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG;AAEH;IA6YE;;OAEG;IACH,sBAFW,qBAAqB,GAAG,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,wBAAwB,QAsClH;IAnbD;;;;;;;OAOG;IACH;QANqC,MAAM,EAAhC,mBAAmB;QACE,SAAS,EAA9B,cAAc;QACD,SAAS,EAAtB,MAAM;QACQ,aAAa,EAA3B,OAAO;QACO,QAAQ,EAAtB,OAAO;OA+JjB;IA5JC,8CAAyB;IAEzB,8CAA+B;IAC/B,kBAA+B;IAC/B,uBAAuC;IACvC,kBAA6B;IAC7B,gBAAmB;IAEnB,mCAAmC;IACnC,kBADW,QAAQ,IAAI,CAAC,GAAG,IAAI,CACH;IAC5B,mBA8IkB,IAAI,SA9IA;IAEtB,mCAAmC;IACnC,sBADW,QAAQ,IAAI,CAAC,GAAG,IAAI,CACC;IAChC,mEAA0B;IAGxB,qBAAqB;IACrB,6BAA6B;IAC7B,qBAAqB;IACrB,8BAA8B;IAI9B,wCAAwC;IACxC,oCA+CC;IA1CK,sEAAoC;IA0BlC,kBA8FQ,IAAI,SA9FY;IAQ1B,wBAA0B;IAmBhC,qCAAqC;IACrC,iCAuDC;IApDK,yEAAoC;IA6ClC,iBAsBQ,IAAI,SAtBW;IA0BnC,oBAsDC;IAED;;;OAGG;IACH,yBAHW,OAAO,SAAS,EAAE,qBAAqB,GACrC,IAAI,CAwDhB;IAxBO,oCAA0B;IA0BlC;;;OAGG;IACH,mBAHW,eAAe,GACb,IAAI,CAqChB;IAED;;OAEG;IACH,oBAFW,gBAAgB,QAY1B;IAED;;OAEG;IACH,oBAFW,gBAAgB,QAe1B;IAED;;OAEG;IACH,4BAFW,wBAAwB,QAoClC;IAzBK,qCAA2B;CAmElC;;;;6CAncY,OAAO,SAAS,EAAE,8BAA8B;;;;oCAChD,OAAO,SAAS,EAAE,qBAAqB;;;;8BACvC,OAAO,SAAS,EAAE,eAAe;;;;+BACjC,OAAO,SAAS,EAAE,gBAAgB;;;;+BAClC,OAAO,SAAS,EAAE,gBAAgB;;;;uCAClC,OAAO,SAAS,EAAE,wBAAwB;;;;kCAE1C,OAAO,SAAS,EAAE,mBAAmB;;;;6BAErC,OAAO,WAAW,EAAE,cAAc;;;;8CAElC,OAAO,YAAY,EAAE,+BAA+B"}
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../lib/transport.js"],"names":[],"mappings":"AAGA;IAkBE;;;;;;OAMG;IACH;;;uCALgD,GAAG,KAAK,IAAI;;;iBAC9C,MAAM;aAgBnB;IApCD;;;OAGG;IACH,gCAFW,QAAQ,GAAG,QAAQ,EAa7B;IAPG,kBAAyE;IAM3E,aAAkB;CAuBrB"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../lib/transport.js"],"names":[],"mappings":"AAGA;IAoBE;;;;;;OAMG;IACH;;;uCALgD,GAAG,KAAK,IAAI;;;iBAC9C,MAAM;aAgBnB;IAtCD;;;OAGG;IACH,gCAFW,QAAQ,GAAG,QAAQ,EAe7B;IAPG,kBAAyE;IAM3E,aAAkB;CAuBrB"}
@@ -7,6 +7,7 @@ export interface NativeHttp3WTSession {
7
7
  writeDatagram: (chunk: Uint8Array) => void;
8
8
  orderUnidiStream: () => void;
9
9
  orderBidiStream: () => void;
10
+ notifySessionDraining(): () => void;
10
11
  close: (arg: {
11
12
  code: number;
12
13
  reason: string;
@@ -16,7 +17,9 @@ export interface NativeHttp3WTSession {
16
17
  * Native Http3WTStream counterpart
17
18
  */
18
19
  export interface NativeHttp3WTStream {
20
+ updateReadPos(bytesread: Number, pos: Number): unknown;
19
21
  jsobj: WebTransportStreamEventHandler;
22
+ readbuffer: Uint8Array | undefined;
20
23
  startReading: () => void;
21
24
  stopReading: () => void;
22
25
  stopSending: (code: number) => void;
@@ -35,8 +38,9 @@ export interface StreamRecvSignalEvent {
35
38
  export interface StreamReadEvent {
36
39
  object: NativeHttp3WTStream;
37
40
  purpose: 'StreamRead';
38
- data?: Uint8Array;
41
+ buffergrow?: number;
39
42
  fin?: boolean;
43
+ success?: boolean;
40
44
  }
41
45
  export interface StreamWriteEvent {
42
46
  object: NativeHttp3WTStream;
@@ -77,6 +81,10 @@ export interface DatagramSendEvent {
77
81
  object: NativeHttp3WTSession;
78
82
  purpose: 'DatagramSend';
79
83
  }
84
+ export interface GoawayReceivedEvent {
85
+ object: NativeHttp3WTSession;
86
+ purpose: 'GoawayReceived';
87
+ }
80
88
  export interface NewStreamEvent {
81
89
  object: NativeHttp3WTSession;
82
90
  purpose: 'Http3WTStreamVisitor';
@@ -90,6 +98,7 @@ export interface WebTransportSessionEventHandler {
90
98
  onClose: (evt: SessionCloseEvent) => void;
91
99
  onDatagramReceived: (evt: DatagramReceivedEvent) => void;
92
100
  onDatagramSend: (evt: DatagramSendEvent) => void;
101
+ onGoAwayReceived: (evt: GoawayReceivedEvent) => void;
93
102
  onStream: (evt: NewStreamEvent) => void;
94
103
  closeHook?: (() => void) | null;
95
104
  }
@@ -150,7 +159,7 @@ export interface Deferred<T = unknown> {
150
159
  resolve: (value?: T) => void;
151
160
  reject: (reason?: any) => void;
152
161
  }
153
- export declare type WebTransportSessionState = 'connected' | 'closed' | 'failed';
162
+ export declare type WebTransportSessionState = 'connected' | 'draining' | 'closed' | 'failed';
154
163
  export interface WebTransportSession extends WebTransport {
155
164
  state: WebTransportSessionState;
156
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
@@ -16,11 +16,33 @@ export class WebTransport implements WebTransportInterface {
16
16
  constructor(url: string, args?: import("./dom").WebTransportOptions | undefined);
17
17
  ready: Promise<void>;
18
18
  closed: Promise<import("./dom").WebTransportCloseInfo>;
19
+ draining: Promise<undefined>;
19
20
  datagrams: import("./dom").WebTransportDatagramDuplexStream;
20
21
  /** @type {ReadableStream<WebTransportBidirectionalStream>} */
21
22
  incomingBidirectionalStreams: ReadableStream<WebTransportBidirectionalStream>;
22
23
  /** @type {ReadableStream<WebTransportReceiveStream>} */
23
24
  incomingUnidirectionalStreams: ReadableStream<WebTransportReceiveStream>;
25
+ get reliability(): import("./dom").WebTransportReliabilityMode;
26
+ get congestionControl(): import("./dom").WebTransportCongestionControl;
27
+ getStats(): Promise<{
28
+ timestamp: number;
29
+ bytesSent: bigint;
30
+ packetsSent: bigint;
31
+ packetsLost: bigint;
32
+ numOutgoingStreamsCreated: number;
33
+ numIncomingStreamsCreated: number;
34
+ bytesReceived: bigint;
35
+ packetsReceived: bigint;
36
+ smoothedRtt: number;
37
+ rttVariation: number;
38
+ minRtt: number;
39
+ datagrams: {
40
+ timestamp: number;
41
+ expiredOutgoing: bigint;
42
+ droppedIncoming: bigint;
43
+ lostOutgoing: bigint;
44
+ };
45
+ }>;
24
46
  /**
25
47
  * @param {WebTransportCloseInfo} [closeinfo]
26
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"webtransport.d.ts","sourceRoot":"","sources":["../../lib/webtransport.js"],"names":[],"mappings":"AAMA;;;;GAIG;AAEH;;;;GAIG;AACH;IACE;;;OAGG;IACH,iBAHW,MAAM,0DAyDhB;IAlCC,qBAA6B;IAC7B,uDAA+B;IAE/B,4DAAqC;IAErC,8DAA8D;IAC9D,8BADW,eAAe,+BAA+B,CAAC,CACiB;IAE3E,wDAAwD;IACxD,+BADW,eAAe,yBAAyB,CAAC,CAEV;IA0B5C;;OAEG;IACH,2EASC;IAED,sFASC;IAED,8EASC;CACF;oCA1GY,OAAO,OAAO,EAAE,qBAAqB;8CACrC,OAAO,OAAO,EAAE,+BAA+B;wCAC/C,OAAO,OAAO,EAAE,yBAAyB;oCAIzC,OAAO,OAAO,EAAE,YAAY"}
1
+ {"version":3,"file":"webtransport.d.ts","sourceRoot":"","sources":["../../lib/webtransport.js"],"names":[],"mappings":"AAMA;;;;GAIG;AAEH;;;;GAIG;AACH;IACE;;;OAGG;IACH,iBAHW,MAAM,0DA0DhB;IAnCC,qBAA6B;IAC7B,uDAA+B;IAC/B,6BAAmC;IAEnC,4DAAqC;IAErC,8DAA8D;IAC9D,8BADW,eAAe,+BAA+B,CAAC,CACiB;IAE3E,wDAAwD;IACxD,+BADW,eAAe,yBAAyB,CAAC,CAEV;IA0B5C,+DAQC;IAED,uEAQC;IAED;;;;;;;;;;;;;;;;;;OAQC;IAED;;OAEG;IACH,2EASC;IAED,sFASC;IAED,8EASC;CACF;oCAzIY,OAAO,OAAO,EAAE,qBAAqB;8CACrC,OAAO,OAAO,EAAE,+BAA+B;wCAC/C,OAAO,OAAO,EAAE,yBAAyB;oCAIzC,OAAO,OAAO,EAAE,YAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"bidirectional-streams.spec.d.ts","sourceRoot":"","sources":["../../test/bidirectional-streams.spec.js"],"names":[],"mappings":";;;0BAYa,OAAO,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"bidirectional-streams.spec.d.ts","sourceRoot":"","sources":["../../test/bidirectional-streams.spec.js"],"names":[],"mappings":";;;0BAaa,OAAO,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"datagrams.spec.d.ts","sourceRoot":"","sources":["../../test/datagrams.spec.js"],"names":[],"mappings":";;;0BAYa,OAAO,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"datagrams.spec.d.ts","sourceRoot":"","sources":["../../test/datagrams.spec.js"],"names":[],"mappings":";;;0BAaa,OAAO,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @template T
3
+ * @param {Promise<T>} promise
4
+ * @param {number} timeout
5
+ * @returns {Promise<T>}
6
+ */
7
+ export function pTimeout<T>(promise: Promise<T>, timeout: number): Promise<T>;
8
+ //# sourceMappingURL=p-timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p-timeout.d.ts","sourceRoot":"","sources":["../../../test/fixtures/p-timeout.js"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,0DAHW,MAAM,cAkBhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"read-stream.d.ts","sourceRoot":"","sources":["../../../test/fixtures/read-stream.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wGA2BC"}
1
+ {"version":3,"file":"read-stream.d.ts","sourceRoot":"","sources":["../../../test/fixtures/read-stream.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wGA8BC"}
@@ -1 +1 @@
1
- {"version":3,"file":"unidirectional-streams.spec.d.ts","sourceRoot":"","sources":["../../test/unidirectional-streams.spec.js"],"names":[],"mappings":";;;0BAYa,OAAO,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"unidirectional-streams.spec.d.ts","sourceRoot":"","sources":["../../test/unidirectional-streams.spec.js"],"names":[],"mappings":";;;0BAaa,OAAO,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC"}
package/lib/dom.ts CHANGED
@@ -73,13 +73,16 @@ export interface WebTransportOptions {
73
73
  allowPooling?: boolean
74
74
  requireUnreliable?: boolean
75
75
  serverCertificateHashes?: WebTransportHash[]
76
+ congestionControl?: WebTransportCongestionControl
76
77
  }
77
78
 
78
79
  export interface WebTransport {
79
- // getStats: () => Promise<WebTransportStats>
80
+ getStats: () => Promise<WebTransportStats>
80
81
  readonly ready: Promise<void>
81
- // readonly reliability: WebTransportReliabilityMode
82
+ readonly reliability: WebTransportReliabilityMode
83
+ readonly congestionControl: WebTransportCongestionControl
82
84
  readonly closed: Promise<WebTransportCloseInfo>
85
+ readonly draining: Promise<undefined>
83
86
  close: (closeInfo?: WebTransportCloseInfo) => void
84
87
  readonly datagrams: WebTransportDatagramDuplexStream
85
88
 
@@ -93,3 +96,5 @@ export interface WebTransport {
93
96
  }
94
97
 
95
98
  export type WebTransportReliabilityMode = 'pending' | 'reliable-only' | 'supports-unreliable'
99
+ export type WebTransportCongestionControl = 'default' | 'throughput' | 'low-latency';
100
+
package/lib/event-loop.js CHANGED
@@ -15,7 +15,8 @@ export class Http3EventLoop {
15
15
  transportCallback: Http3WebTransport.transportCallback,
16
16
  streamCallback: Http3WTStream.callback,
17
17
  sessionCallback: Http3WTSession.callback,
18
- eventloopCallback: Http3EventLoop.callback
18
+ eventloopCallback: Http3EventLoop.callback,
19
+ quicheLogVerbose: args?.quicheLogVerbose
19
20
  })
20
21
  this.eventloopInt.jsobj = this
21
22
 
@@ -23,9 +24,12 @@ export class Http3EventLoop {
23
24
  this.loopGuardian = this.loopGuardian.bind(this)
24
25
  }
25
26
 
26
- startEventLoop() {
27
+ /**
28
+ * @param {*} [args]
29
+ */
30
+ startEventLoop(args) {
27
31
  console.log('start GlobalEventLoop')
28
- this.eventloopInt.startEventLoop()
32
+ this.eventloopInt.startEventLoop(args)
29
33
  this.loopGuardianTimer = setInterval(this.loopGuardian, 5000)
30
34
  }
31
35
 
@@ -54,12 +58,13 @@ export class Http3EventLoop {
54
58
  }
55
59
 
56
60
  /**
61
+ * @param {any} [args]
57
62
  * @returns {Http3EventLoop}
58
63
  */
59
- static createGlobalEventLoop() {
64
+ static createGlobalEventLoop(args) {
60
65
  if (!Http3EventLoop.globalLoop) {
61
66
  Http3EventLoop.globalLoop = new Http3EventLoop()
62
- Http3EventLoop.globalLoop.startEventLoop()
67
+ Http3EventLoop.globalLoop.startEventLoop(args)
63
68
  console.log('createGlobalEventLoop')
64
69
  }
65
70
  return Http3EventLoop.globalLoop
@@ -67,12 +72,13 @@ export class Http3EventLoop {
67
72
 
68
73
  /**
69
74
  * @param {any} object
75
+ * @param {any} args
70
76
  * @returns {Http3EventLoop}
71
77
  */
72
- static getGlobalEventLoop(object) {
78
+ static getGlobalEventLoop(object, args) {
73
79
  if (!object) throw new Error('getGlobalEventLoop without reference object')
74
80
  const loop =
75
- Http3EventLoop.globalLoop ?? Http3EventLoop.createGlobalEventLoop()
81
+ Http3EventLoop.globalLoop ?? Http3EventLoop.createGlobalEventLoop(args)
76
82
  loop.refObjects.add(new WeakRef(object))
77
83
  return loop
78
84
  }
package/lib/server.js CHANGED
@@ -29,7 +29,7 @@ export class Http3Server extends Http3WebTransport {
29
29
  /** @type {Record<string, ReadableStream>} */
30
30
  this.sessionStreams = {}
31
31
 
32
- /** @type {Record<string, ReadableStreamController<any>>} */
32
+ /** @type {Record<string, ReadableStreamDefaultController<Http3WTSession>>} */
33
33
  this.sessionController = {}
34
34
 
35
35
  this.port = null
package/lib/session.js CHANGED
@@ -8,12 +8,17 @@ import { Http3WTStream } from './stream.js'
8
8
  * @typedef {import('./types').SessionCloseEvent} SessionCloseEvent
9
9
  * @typedef {import('./types').DatagramReceivedEvent} DatagramReceivedEvent
10
10
  * @typedef {import('./types').DatagramSendEvent} DatagramSendEvent
11
+ * @typedef {import('./types').GoawayReceivedEvent} GoawayReceivedEvent
11
12
  * @typedef {import('./types').NewStreamEvent} NewStreamEvent
12
13
  *
13
14
  * @typedef {import('./dom').WebTransportCloseInfo} WebTransportCloseInfo
14
15
  * @typedef {import('./dom').WebTransportBidirectionalStream} WebTransportBidirectionalStream
15
16
  * @typedef {import('./dom').WebTransportSendStream} WebTransportSendStream
17
+ * @typedef {import('./dom').WebTransportReceiveStream} WebTransportReceiveStream
16
18
  * @typedef {import('./dom').WebTransportDatagramDuplexStream} WebTransportDatagramDuplexStream
19
+ * @typedef {import('./dom').WebTransportReliabilityMode} WebTransportReliabilityMode
20
+ * @typedef {import('./dom').WebTransportCongestionControl} WebTransportCongestionControl
21
+ * @typedef {import('./dom').WebTransportStats} WebTransportStats
17
22
  *
18
23
  * @typedef {import('./types').NativeHttp3WTSession} NativeHttp3WTSession
19
24
  *
@@ -58,19 +63,32 @@ export class Http3WTSession {
58
63
  this.readyResolve = resolve
59
64
  this.readyReject = reject
60
65
  })
66
+ /** @type {WebTransportReliabilityMode} */
67
+ this.reliability = 'pending'
68
+ /** @type {WebTransportCongestionControl} */
69
+ this.congestionControl = 'default'
61
70
  /** @type {Promise<WebTransportCloseInfo>} */
62
71
  this.closed = new Promise((resolve, reject) => {
63
72
  this.closedResolve = resolve
64
73
  this.closedReject = reject
65
74
  })
66
75
 
76
+ /** @type {Promise<undefined>} */
77
+ this.draining = new Promise((resolve, reject) => {
78
+ this.drainingResolve = resolve
79
+ this.drainingReject = reject
80
+ })
81
+
82
+ /** @type {ReadableStream<WebTransportBidirectionalStream>} */
67
83
  this.incomingBidirectionalStreams = new ReadableStream({
84
+ /** @param {ReadableStreamDefaultController<WebTransportBidirectionalStream>} controller */
68
85
  start: (controller) => {
69
86
  this.incomBiDiController = controller
70
87
  }
71
88
  })
72
-
89
+ /** @type {ReadableStream<WebTransportReceiveStream>} */
73
90
  this.incomingUnidirectionalStreams = new ReadableStream({
91
+ /** @param {ReadableStreamDefaultController<WebTransportReceiveStream>} controller */
74
92
  start: (controller) => {
75
93
  this.incomUniDiController = controller
76
94
  }
@@ -86,7 +104,9 @@ export class Http3WTSession {
86
104
  /** @type {WebTransportDatagramDuplexStream} */
87
105
  this.datagrams = {
88
106
  readable: new ReadableStream({
89
- start: (controller) => {
107
+ start: (
108
+ /** @type {ReadableStreamDefaultController<Uint8Array>} */ controller
109
+ ) => {
90
110
  this.incomDatagramController = controller
91
111
  }
92
112
  }),
@@ -126,7 +146,9 @@ export class Http3WTSession {
126
146
  /** @type {Array<(err?: Error) => void>} */
127
147
  this.rejectUniDi = []
128
148
 
149
+ /** @type {Set<WebTransportSendStream>} */
129
150
  this.sendStreams = new Set()
151
+ /** @type {Set<WebTransportReceiveStream>} */
130
152
  this.receiveStreams = new Set()
131
153
  /** @type {Set<Http3WTStream>} */
132
154
  this.streamObjs = new Set()
@@ -147,6 +169,28 @@ export class Http3WTSession {
147
169
  }
148
170
  }
149
171
 
172
+ getStats() {
173
+ return Promise.resolve({
174
+ timestamp: Date.now(),
175
+ bytesSent: BigInt(0),
176
+ packetsSent: BigInt(0),
177
+ packetsLost: BigInt(0),
178
+ numOutgoingStreamsCreated: 0,
179
+ numIncomingStreamsCreated: 0,
180
+ bytesReceived: BigInt(0),
181
+ packetsReceived: BigInt(0),
182
+ smoothedRtt: 0,
183
+ rttVariation: 0,
184
+ minRtt: 0,
185
+ datagrams: {
186
+ timestamp: Date.now(),
187
+ expiredOutgoing: BigInt(0),
188
+ droppedIncoming: BigInt(0),
189
+ lostOutgoing: BigInt(0)
190
+ }
191
+ })
192
+ }
193
+
150
194
  async waitForDatagramsSend() {
151
195
  while (this.writeDatagramProm.length > 0) {
152
196
  try {
@@ -157,6 +201,13 @@ export class Http3WTSession {
157
201
  }
158
202
  }
159
203
 
204
+ notifySessionDraining() {
205
+ if (this.objint == null) {
206
+ throw new Error('this.objint not set')
207
+ }
208
+ this.objint.notifySessionDraining()
209
+ }
210
+
160
211
  /**
161
212
  * @param {Http3WTStream} stream
162
213
  */
@@ -172,7 +223,7 @@ export class Http3WTSession {
172
223
  }
173
224
 
174
225
  /**
175
- * @param {WritableStream} stream
226
+ * @param {WebTransportSendStream} stream
176
227
  * @param {WritableStreamDefaultController} controller
177
228
  */
178
229
  addSendStream(stream, controller) {
@@ -181,7 +232,7 @@ export class Http3WTSession {
181
232
  }
182
233
 
183
234
  /**
184
- * @param {WritableStream} stream
235
+ * @param {WebTransportSendStream} stream
185
236
  * @param {WritableStreamDefaultController} controller
186
237
  */
187
238
  removeSendStream(stream, controller) {
@@ -190,7 +241,7 @@ export class Http3WTSession {
190
241
  }
191
242
 
192
243
  /**
193
- * @param {ReadableStream} stream
244
+ * @param {WebTransportReceiveStream } stream
194
245
  * @param {ReadableStreamDefaultController} controller
195
246
  */
196
247
  addReceiveStream(stream, controller) {
@@ -199,7 +250,7 @@ export class Http3WTSession {
199
250
  }
200
251
 
201
252
  /**
202
- * @param {ReadableStream} stream
253
+ * @param {WebTransportReceiveStream } stream
203
254
  * @param {ReadableStreamDefaultController} controller
204
255
  */
205
256
  removeReceiveStream(stream, controller) {
@@ -257,6 +308,7 @@ export class Http3WTSession {
257
308
  }
258
309
 
259
310
  onReady(/* error */) {
311
+ this.reliability = 'supports-unreliable'
260
312
  if (this.readyResolve) this.readyResolve()
261
313
  delete this.readyResolve
262
314
  }
@@ -347,20 +399,7 @@ export class Http3WTSession {
347
399
  const curres = this.resolveUniDi.shift()
348
400
 
349
401
  if (curres != null && strobj.writable != null) {
350
- /** @type {WebTransportSendStream} */
351
- // @ts-expect-error `getStats` property is missing from WritableStream
352
- // we add it on the next line
353
- const sendStream = strobj.writable
354
- sendStream.getStats = () => {
355
- return Promise.resolve({
356
- timestamp: 0,
357
- bytesWritten: 0n,
358
- bytesSent: 0n,
359
- bytesAcknowledged: 0n
360
- })
361
- }
362
-
363
- curres(sendStream)
402
+ curres(strobj.writable)
364
403
  }
365
404
  }
366
405
  }
@@ -389,7 +428,15 @@ export class Http3WTSession {
389
428
  }
390
429
 
391
430
  /**
392
- * @param {SessionReadyEvent | SessionCloseEvent | DatagramReceivedEvent | DatagramSendEvent | NewStreamEvent} args
431
+ * @param {GoawayReceivedEvent} args
432
+ */
433
+ onGoAwayReceived(args) {
434
+ if (this.drainingResolve) this.drainingResolve(undefined)
435
+ this.state = 'draining'
436
+ }
437
+
438
+ /**
439
+ * @param {SessionReadyEvent | SessionCloseEvent | DatagramReceivedEvent | DatagramSendEvent | GoawayReceivedEvent | NewStreamEvent} args
393
440
  */
394
441
  static callback(args) {
395
442
  // console.log('Session callback called', args)
@@ -411,6 +458,9 @@ export class Http3WTSession {
411
458
  case 'DatagramSend':
412
459
  if (visitor) visitor.onDatagramSend(args)
413
460
  break
461
+ case 'GoawayReceived':
462
+ visitor.onGoAwayReceived(args)
463
+ break
414
464
  case 'Http3WTStreamVisitor':
415
465
  if (
416
466
  visitor &&