Skip to content

Commit bfaf60f

Browse files
committed
quic: make multiple fixes, cleanups and simplifications
1 parent 5471883 commit bfaf60f

26 files changed

+3047
-2571
lines changed

doc/api/quic.md

Lines changed: 145 additions & 252 deletions
Large diffs are not rendered by default.

lib/internal/quic/quic.js

Lines changed: 181 additions & 124 deletions
Large diffs are not rendered by default.

lib/internal/quic/state.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ const {
2828
kFinishClose,
2929
kInspect,
3030
kPrivateConstructor,
31+
kWantsHeaders,
32+
kWantsTrailers,
3133
} = require('internal/quic/symbols');
3234

3335
// This file defines the helper objects for accessing state for
@@ -47,7 +49,6 @@ const {
4749
IDX_STATE_SESSION_GRACEFUL_CLOSE,
4850
IDX_STATE_SESSION_SILENT_CLOSE,
4951
IDX_STATE_SESSION_STATELESS_RESET,
50-
IDX_STATE_SESSION_DESTROYED,
5152
IDX_STATE_SESSION_HANDSHAKE_COMPLETED,
5253
IDX_STATE_SESSION_HANDSHAKE_CONFIRMED,
5354
IDX_STATE_SESSION_STREAM_OPEN_ALLOWED,
@@ -70,6 +71,7 @@ const {
7071
IDX_STATE_STREAM_WRITE_ENDED,
7172
IDX_STATE_STREAM_PAUSED,
7273
IDX_STATE_STREAM_RESET,
74+
IDX_STATE_STREAM_HAS_OUTBOUND,
7375
IDX_STATE_STREAM_HAS_READER,
7476
IDX_STATE_STREAM_WANTS_BLOCK,
7577
IDX_STATE_STREAM_WANTS_HEADERS,
@@ -85,7 +87,6 @@ assert(IDX_STATE_SESSION_CLOSING !== undefined);
8587
assert(IDX_STATE_SESSION_GRACEFUL_CLOSE !== undefined);
8688
assert(IDX_STATE_SESSION_SILENT_CLOSE !== undefined);
8789
assert(IDX_STATE_SESSION_STATELESS_RESET !== undefined);
88-
assert(IDX_STATE_SESSION_DESTROYED !== undefined);
8990
assert(IDX_STATE_SESSION_HANDSHAKE_COMPLETED !== undefined);
9091
assert(IDX_STATE_SESSION_HANDSHAKE_CONFIRMED !== undefined);
9192
assert(IDX_STATE_SESSION_STREAM_OPEN_ALLOWED !== undefined);
@@ -106,6 +107,7 @@ assert(IDX_STATE_STREAM_READ_ENDED !== undefined);
106107
assert(IDX_STATE_STREAM_WRITE_ENDED !== undefined);
107108
assert(IDX_STATE_STREAM_PAUSED !== undefined);
108109
assert(IDX_STATE_STREAM_RESET !== undefined);
110+
assert(IDX_STATE_STREAM_HAS_OUTBOUND !== undefined);
109111
assert(IDX_STATE_STREAM_HAS_READER !== undefined);
110112
assert(IDX_STATE_STREAM_WANTS_BLOCK !== undefined);
111113
assert(IDX_STATE_STREAM_WANTS_HEADERS !== undefined);
@@ -309,12 +311,6 @@ class QuicSessionState {
309311
return !!DataViewPrototypeGetUint8(this.#handle, IDX_STATE_SESSION_STATELESS_RESET);
310312
}
311313

312-
/** @type {boolean} */
313-
get isDestroyed() {
314-
if (this.#handle.byteLength === 0) return undefined;
315-
return !!DataViewPrototypeGetUint8(this.#handle, IDX_STATE_SESSION_DESTROYED);
316-
}
317-
318314
/** @type {boolean} */
319315
get isHandshakeCompleted() {
320316
if (this.#handle.byteLength === 0) return undefined;
@@ -483,6 +479,12 @@ class QuicStreamState {
483479
return !!DataViewPrototypeGetUint8(this.#handle, IDX_STATE_STREAM_RESET);
484480
}
485481

482+
/** @type {boolean} */
483+
get hasOutbound() {
484+
if (this.#handle.byteLength === 0) return undefined;
485+
return !!DataViewPrototypeGetUint8(this.#handle, IDX_STATE_STREAM_HAS_OUTBOUND);
486+
}
487+
486488
/** @type {boolean} */
487489
get hasReader() {
488490
if (this.#handle.byteLength === 0) return undefined;
@@ -502,13 +504,13 @@ class QuicStreamState {
502504
}
503505

504506
/** @type {boolean} */
505-
get wantsHeaders() {
507+
get [kWantsHeaders]() {
506508
if (this.#handle.byteLength === 0) return undefined;
507509
return !!DataViewPrototypeGetUint8(this.#handle, IDX_STATE_STREAM_WANTS_HEADERS);
508510
}
509511

510512
/** @type {boolean} */
511-
set wantsHeaders(val) {
513+
set [kWantsHeaders](val) {
512514
if (this.#handle.byteLength === 0) return;
513515
DataViewPrototypeSetUint8(this.#handle, IDX_STATE_STREAM_WANTS_HEADERS, val ? 1 : 0);
514516
}
@@ -526,13 +528,13 @@ class QuicStreamState {
526528
}
527529

528530
/** @type {boolean} */
529-
get wantsTrailers() {
531+
get [kWantsTrailers]() {
530532
if (this.#handle.byteLength === 0) return undefined;
531533
return !!DataViewPrototypeGetUint8(this.#handle, IDX_STATE_STREAM_WANTS_TRAILERS);
532534
}
533535

534536
/** @type {boolean} */
535-
set wantsTrailers(val) {
537+
set [kWantsTrailers](val) {
536538
if (this.#handle.byteLength === 0) return;
537539
DataViewPrototypeSetUint8(this.#handle, IDX_STATE_STREAM_WANTS_TRAILERS, val ? 1 : 0);
538540
}
@@ -553,11 +555,10 @@ class QuicStreamState {
553555
writeEnded: this.writeEnded,
554556
paused: this.paused,
555557
reset: this.reset,
558+
hasOutbound: this.hasOutbound,
556559
hasReader: this.hasReader,
557560
wantsBlock: this.wantsBlock,
558-
wantsHeaders: this.wantsHeaders,
559561
wantsReset: this.wantsReset,
560-
wantsTrailers: this.wantsTrailers,
561562
};
562563
}
563564

@@ -583,11 +584,10 @@ class QuicStreamState {
583584
writeEnded: this.writeEnded,
584585
paused: this.paused,
585586
reset: this.reset,
587+
hasOutbound: this.hasOutbound,
586588
hasReader: this.hasReader,
587589
wantsBlock: this.wantsBlock,
588-
wantsHeaders: this.wantsHeaders,
589590
wantsReset: this.wantsReset,
590-
wantsTrailers: this.wantsTrailers,
591591
}, opts)}`;
592592
}
593593

lib/internal/quic/stats.js

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,14 @@ const {
5151

5252
IDX_STATS_SESSION_CREATED_AT,
5353
IDX_STATS_SESSION_CLOSING_AT,
54-
IDX_STATS_SESSION_DESTROYED_AT,
5554
IDX_STATS_SESSION_HANDSHAKE_COMPLETED_AT,
5655
IDX_STATS_SESSION_HANDSHAKE_CONFIRMED_AT,
57-
IDX_STATS_SESSION_GRACEFUL_CLOSING_AT,
5856
IDX_STATS_SESSION_BYTES_RECEIVED,
5957
IDX_STATS_SESSION_BYTES_SENT,
6058
IDX_STATS_SESSION_BIDI_IN_STREAM_COUNT,
6159
IDX_STATS_SESSION_BIDI_OUT_STREAM_COUNT,
6260
IDX_STATS_SESSION_UNI_IN_STREAM_COUNT,
6361
IDX_STATS_SESSION_UNI_OUT_STREAM_COUNT,
64-
IDX_STATS_SESSION_LOSS_RETRANSMIT_COUNT,
6562
IDX_STATS_SESSION_MAX_BYTES_IN_FLIGHT,
6663
IDX_STATS_SESSION_BYTES_IN_FLIGHT,
6764
IDX_STATS_SESSION_BLOCK_COUNT,
@@ -104,17 +101,14 @@ assert(IDX_STATS_ENDPOINT_STATELESS_RESET_COUNT !== undefined);
104101
assert(IDX_STATS_ENDPOINT_IMMEDIATE_CLOSE_COUNT !== undefined);
105102
assert(IDX_STATS_SESSION_CREATED_AT !== undefined);
106103
assert(IDX_STATS_SESSION_CLOSING_AT !== undefined);
107-
assert(IDX_STATS_SESSION_DESTROYED_AT !== undefined);
108104
assert(IDX_STATS_SESSION_HANDSHAKE_COMPLETED_AT !== undefined);
109105
assert(IDX_STATS_SESSION_HANDSHAKE_CONFIRMED_AT !== undefined);
110-
assert(IDX_STATS_SESSION_GRACEFUL_CLOSING_AT !== undefined);
111106
assert(IDX_STATS_SESSION_BYTES_RECEIVED !== undefined);
112107
assert(IDX_STATS_SESSION_BYTES_SENT !== undefined);
113108
assert(IDX_STATS_SESSION_BIDI_IN_STREAM_COUNT !== undefined);
114109
assert(IDX_STATS_SESSION_BIDI_OUT_STREAM_COUNT !== undefined);
115110
assert(IDX_STATS_SESSION_UNI_IN_STREAM_COUNT !== undefined);
116111
assert(IDX_STATS_SESSION_UNI_OUT_STREAM_COUNT !== undefined);
117-
assert(IDX_STATS_SESSION_LOSS_RETRANSMIT_COUNT !== undefined);
118112
assert(IDX_STATS_SESSION_MAX_BYTES_IN_FLIGHT !== undefined);
119113
assert(IDX_STATS_SESSION_BYTES_IN_FLIGHT !== undefined);
120114
assert(IDX_STATS_SESSION_BLOCK_COUNT !== undefined);
@@ -330,11 +324,6 @@ class QuicSessionStats {
330324
return this.#handle[IDX_STATS_SESSION_CLOSING_AT];
331325
}
332326

333-
/** @type {bigint} */
334-
get destroyedAt() {
335-
return this.#handle[IDX_STATS_SESSION_DESTROYED_AT];
336-
}
337-
338327
/** @type {bigint} */
339328
get handshakeCompletedAt() {
340329
return this.#handle[IDX_STATS_SESSION_HANDSHAKE_COMPLETED_AT];
@@ -345,11 +334,6 @@ class QuicSessionStats {
345334
return this.#handle[IDX_STATS_SESSION_HANDSHAKE_CONFIRMED_AT];
346335
}
347336

348-
/** @type {bigint} */
349-
get gracefulClosingAt() {
350-
return this.#handle[IDX_STATS_SESSION_GRACEFUL_CLOSING_AT];
351-
}
352-
353337
/** @type {bigint} */
354338
get bytesReceived() {
355339
return this.#handle[IDX_STATS_SESSION_BYTES_RECEIVED];
@@ -380,11 +364,6 @@ class QuicSessionStats {
380364
return this.#handle[IDX_STATS_SESSION_UNI_OUT_STREAM_COUNT];
381365
}
382366

383-
/** @type {bigint} */
384-
get lossRetransmitCount() {
385-
return this.#handle[IDX_STATS_SESSION_LOSS_RETRANSMIT_COUNT];
386-
}
387-
388367
/** @type {bigint} */
389368
get maxBytesInFlights() {
390369
return this.#handle[IDX_STATS_SESSION_MAX_BYTES_IN_FLIGHT];
@@ -472,7 +451,6 @@ class QuicSessionStats {
472451
bidiOutStreamCount: `${this.bidiOutStreamCount}`,
473452
uniInStreamCount: `${this.uniInStreamCount}`,
474453
uniOutStreamCount: `${this.uniOutStreamCount}`,
475-
lossRetransmitCount: `${this.lossRetransmitCount}`,
476454
maxBytesInFlights: `${this.maxBytesInFlights}`,
477455
bytesInFlight: `${this.bytesInFlight}`,
478456
blockCount: `${this.blockCount}`,
@@ -512,7 +490,6 @@ class QuicSessionStats {
512490
bidiOutStreamCount: this.bidiOutStreamCount,
513491
uniInStreamCount: this.uniInStreamCount,
514492
uniOutStreamCount: this.uniOutStreamCount,
515-
lossRetransmitCount: this.lossRetransmitCount,
516493
maxBytesInFlights: this.maxBytesInFlights,
517494
bytesInFlight: this.bytesInFlight,
518495
blockCount: this.blockCount,

lib/internal/quic/symbols.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,43 +16,55 @@ const {
1616
// Symbols used to hide various private properties and methods from the
1717
// public API.
1818

19+
const kApplicationProvider = Symbol('kApplicationProvider');
1920
const kBlocked = Symbol('kBlocked');
2021
const kDatagram = Symbol('kDatagram');
2122
const kDatagramStatus = Symbol('kDatagramStatus');
2223
const kFinishClose = Symbol('kFinishClose');
2324
const kHandshake = Symbol('kHandshake');
2425
const kHeaders = Symbol('kHeaders');
25-
const kOwner = Symbol('kOwner');
26-
const kRemoveSession = Symbol('kRemoveSession');
2726
const kNewSession = Symbol('kNewSession');
28-
const kRemoveStream = Symbol('kRemoveStream');
2927
const kNewStream = Symbol('kNewStream');
28+
const kOnHeaders = Symbol('kOnHeaders');
29+
const kOnTrailers = Symbol('kOwnTrailers');
30+
const kOwner = Symbol('kOwner');
3031
const kPathValidation = Symbol('kPathValidation');
32+
const kPrivateConstructor = Symbol('kPrivateConstructor');
33+
const kRemoveSession = Symbol('kRemoveSession');
34+
const kRemoveStream = Symbol('kRemoveStream');
3135
const kReset = Symbol('kReset');
36+
const kSendHeaders = Symbol('kSendHeaders');
3237
const kSessionTicket = Symbol('kSessionTicket');
3338
const kTrailers = Symbol('kTrailers');
3439
const kVersionNegotiation = Symbol('kVersionNegotiation');
35-
const kPrivateConstructor = Symbol('kPrivateConstructor');
40+
const kWantsHeaders = Symbol('kWantsHeaders');
41+
const kWantsTrailers = Symbol('kWantsTrailers');
3642

3743
module.exports = {
44+
kApplicationProvider,
3845
kBlocked,
3946
kDatagram,
4047
kDatagramStatus,
4148
kFinishClose,
4249
kHandshake,
4350
kHeaders,
44-
kOwner,
45-
kRemoveSession,
51+
kInspect,
52+
kKeyObjectHandle,
53+
kKeyObjectInner,
4654
kNewSession,
47-
kRemoveStream,
4855
kNewStream,
56+
kOnHeaders,
57+
kOnTrailers,
58+
kOwner,
4959
kPathValidation,
60+
kPrivateConstructor,
61+
kRemoveSession,
62+
kRemoveStream,
5063
kReset,
64+
kSendHeaders,
5165
kSessionTicket,
5266
kTrailers,
5367
kVersionNegotiation,
54-
kInspect,
55-
kKeyObjectHandle,
56-
kKeyObjectInner,
57-
kPrivateConstructor,
68+
kWantsHeaders,
69+
kWantsTrailers,
5870
};

lib/quic.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
'use strict';
22

3+
const {
4+
emitExperimentalWarning,
5+
} = require('internal/util');
6+
emitExperimentalWarning('quic');
7+
38
const {
49
QuicEndpoint,
510
QuicSession,

0 commit comments

Comments
 (0)