Skip to content

Commit 31d6d9d

Browse files
committed
quic: reduce duplication of code
PR-URL: #34137 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: David Carlier <devnexen@gmail.com>
1 parent b5fe31e commit 31d6d9d

File tree

1 file changed

+53
-78
lines changed

1 file changed

+53
-78
lines changed

lib/internal/quic/core.js

+53-78
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ const {
147147
IDX_QUIC_SESSION_STATS_STREAMS_OUT_COUNT,
148148
IDX_QUIC_SESSION_STATS_KEYUPDATE_COUNT,
149149
IDX_QUIC_SESSION_STATS_LOSS_RETRANSMIT_COUNT,
150+
IDX_QUIC_SESSION_STATS_HANDSHAKE_COMPLETED_AT,
150151
IDX_QUIC_SESSION_STATS_ACK_DELAY_RETRANSMIT_COUNT,
151152
IDX_QUIC_SESSION_STATS_MAX_BYTES_IN_FLIGHT,
152153
IDX_QUIC_SESSION_STATS_BLOCK_COUNT,
@@ -625,6 +626,13 @@ function onRemoveListener(event) {
625626
toggleListeners(this[kHandle], event, false);
626627
}
627628

629+
function getStats(obj, idx) {
630+
const stats = obj[kHandle]?.stats || obj[kInternalState].stats;
631+
// If stats is undefined at this point, it's just a bug
632+
assert(stats);
633+
return stats[idx];
634+
}
635+
628636
// QuicEndpoint wraps a UDP socket and is owned
629637
// by a QuicSocket. It does not exist independently
630638
// of the QuicSocket.
@@ -1524,77 +1532,65 @@ class QuicSocket extends EventEmitter {
15241532
this[kHandle].setServerBusy(on);
15251533
}
15261534

1535+
get serverBusy() {
1536+
return this[kInternalState].serverBusy;
1537+
}
1538+
15271539
get duration() {
15281540
// TODO(@jasnell): If the object is destroyed, it should
15291541
// use a fixed duration rather than calculating from now
1530-
const now = process.hrtime.bigint();
1531-
const stats = this[kInternalState].stats || this[kHandle].stats;
1532-
return now - stats[IDX_QUIC_SOCKET_STATS_CREATED_AT];
1542+
return process.hrtime.bigint() -
1543+
getStats(this, IDX_QUIC_SOCKET_STATS_CREATED_AT);
15331544
}
15341545

15351546
get boundDuration() {
15361547
// TODO(@jasnell): If the object is destroyed, it should
15371548
// use a fixed duration rather than calculating from now
1538-
const now = process.hrtime.bigint();
1539-
const stats = this[kInternalState].stats || this[kHandle].stats;
1540-
return now - stats[IDX_QUIC_SOCKET_STATS_BOUND_AT];
1549+
return process.hrtime.bigint() -
1550+
getStats(this, IDX_QUIC_SOCKET_STATS_BOUND_AT);
15411551
}
15421552

15431553
get listenDuration() {
15441554
// TODO(@jasnell): If the object is destroyed, it should
15451555
// use a fixed duration rather than calculating from now
1546-
const now = process.hrtime.bigint();
1547-
const stats = this[kInternalState].stats || this[kHandle].stats;
1548-
return now - stats[IDX_QUIC_SOCKET_STATS_LISTEN_AT];
1556+
return process.hrtime.bigint() -
1557+
getStats(this, IDX_QUIC_SOCKET_STATS_LISTEN_AT);
15491558
}
15501559

15511560
get bytesReceived() {
1552-
const stats = this[kInternalState].stats || this[kHandle].stats;
1553-
return stats[IDX_QUIC_SOCKET_STATS_BYTES_RECEIVED];
1561+
return getStats(this, IDX_QUIC_SOCKET_STATS_BYTES_RECEIVED);
15541562
}
15551563

15561564
get bytesSent() {
1557-
const stats = this[kInternalState].stats || this[kHandle].stats;
1558-
return stats[IDX_QUIC_SOCKET_STATS_BYTES_SENT];
1565+
return getStats(this, IDX_QUIC_SOCKET_STATS_BYTES_SENT);
15591566
}
15601567

15611568
get packetsReceived() {
1562-
const stats = this[kInternalState].stats || this[kHandle].stats;
1563-
return stats[IDX_QUIC_SOCKET_STATS_PACKETS_RECEIVED];
1569+
return getStats(this, IDX_QUIC_SOCKET_STATS_PACKETS_RECEIVED);
15641570
}
15651571

15661572
get packetsSent() {
1567-
const stats = this[kInternalState].stats || this[kHandle].stats;
1568-
return stats[IDX_QUIC_SOCKET_STATS_PACKETS_SENT];
1573+
return getStats(this, IDX_QUIC_SOCKET_STATS_PACKETS_SENT);
15691574
}
15701575

15711576
get packetsIgnored() {
1572-
const stats = this[kInternalState].stats || this[kHandle].stats;
1573-
return stats[IDX_QUIC_SOCKET_STATS_PACKETS_IGNORED];
1574-
}
1575-
1576-
get serverBusy() {
1577-
return this[kInternalState].serverBusy;
1577+
return getStats(this, IDX_QUIC_SOCKET_STATS_PACKETS_IGNORED);
15781578
}
15791579

15801580
get serverSessions() {
1581-
const stats = this[kInternalState].stats || this[kHandle].stats;
1582-
return stats[IDX_QUIC_SOCKET_STATS_SERVER_SESSIONS];
1581+
return getStats(this, IDX_QUIC_SOCKET_STATS_SERVER_SESSIONS);
15831582
}
15841583

15851584
get clientSessions() {
1586-
const stats = this[kInternalState].stats || this[kHandle].stats;
1587-
return stats[IDX_QUIC_SOCKET_STATS_CLIENT_SESSIONS];
1585+
return getStats(this, IDX_QUIC_SOCKET_STATS_CLIENT_SESSIONS);
15881586
}
15891587

15901588
get statelessResetCount() {
1591-
const stats = this[kInternalState].stats || this[kHandle].stats;
1592-
return stats[IDX_QUIC_SOCKET_STATS_STATELESS_RESET_COUNT];
1589+
return getStats(this, IDX_QUIC_SOCKET_STATS_STATELESS_RESET_COUNT);
15931590
}
15941591

15951592
get serverBusyCount() {
1596-
const stats = this[kInternalState].stats || this[kHandle].stats;
1597-
return stats[IDX_QUIC_SOCKET_STATS_SERVER_BUSY_COUNT];
1593+
return getStats(this, IDX_QUIC_SOCKET_STATS_SERVER_BUSY_COUNT);
15981594
}
15991595

16001596
// Diagnostic packet loss is a testing mechanism that allows simulating
@@ -2183,82 +2179,68 @@ class QuicSession extends EventEmitter {
21832179
}
21842180

21852181
get duration() {
2186-
const now = process.hrtime.bigint();
2187-
const stats = this[kInternalState].stats || this[kHandle].stats;
2188-
return now - stats[IDX_QUIC_SESSION_STATS_CREATED_AT];
2182+
return process.hrtime.bigint() -
2183+
getStats(this, IDX_QUIC_SESSION_STATS_CREATED_AT);
21892184
}
21902185

21912186
get handshakeDuration() {
2192-
const stats = this[kInternalState].stats || this[kHandle].stats;
21932187
const end =
21942188
this.handshakeComplete ?
2195-
stats[4] : process.hrtime.bigint();
2196-
return end - stats[IDX_QUIC_SESSION_STATS_HANDSHAKE_START_AT];
2189+
getStats(this, IDX_QUIC_SESSION_STATS_HANDSHAKE_COMPLETED_AT) :
2190+
process.hrtime.bigint();
2191+
return end - getStats(this, IDX_QUIC_SESSION_STATS_HANDSHAKE_START_AT);
21972192
}
21982193

21992194
get bytesReceived() {
2200-
const stats = this[kInternalState].stats || this[kHandle].stats;
2201-
return stats[IDX_QUIC_SESSION_STATS_BYTES_RECEIVED];
2195+
return getStats(this, IDX_QUIC_SESSION_STATS_BYTES_RECEIVED);
22022196
}
22032197

22042198
get bytesSent() {
2205-
const stats = this[kInternalState].stats || this[kHandle].stats;
2206-
return stats[IDX_QUIC_SESSION_STATS_BYTES_SENT];
2199+
return getStats(this, IDX_QUIC_SESSION_STATS_BYTES_SENT);
22072200
}
22082201

22092202
get bidiStreamCount() {
2210-
const stats = this[kInternalState].stats || this[kHandle].stats;
2211-
return stats[IDX_QUIC_SESSION_STATS_BIDI_STREAM_COUNT];
2203+
return getStats(this, IDX_QUIC_SESSION_STATS_BIDI_STREAM_COUNT);
22122204
}
22132205

22142206
get uniStreamCount() {
2215-
const stats = this[kInternalState].stats || this[kHandle].stats;
2216-
return stats[IDX_QUIC_SESSION_STATS_UNI_STREAM_COUNT];
2207+
return getStats(this, IDX_QUIC_SESSION_STATS_UNI_STREAM_COUNT);
22172208
}
22182209

22192210
get maxInFlightBytes() {
2220-
const stats = this[kInternalState].stats || this[kHandle].stats;
2221-
return stats[IDX_QUIC_SESSION_STATS_MAX_BYTES_IN_FLIGHT];
2211+
return getStats(this, IDX_QUIC_SESSION_STATS_MAX_BYTES_IN_FLIGHT);
22222212
}
22232213

22242214
get lossRetransmitCount() {
2225-
const stats = this[kInternalState].stats || this[kHandle].stats;
2226-
return stats[IDX_QUIC_SESSION_STATS_LOSS_RETRANSMIT_COUNT];
2215+
return getStats(this, IDX_QUIC_SESSION_STATS_LOSS_RETRANSMIT_COUNT);
22272216
}
22282217

22292218
get ackDelayRetransmitCount() {
2230-
const stats = this[kInternalState].stats || this[kHandle].stats;
2231-
return stats[IDX_QUIC_SESSION_STATS_ACK_DELAY_RETRANSMIT_COUNT];
2219+
return getStats(this, IDX_QUIC_SESSION_STATS_ACK_DELAY_RETRANSMIT_COUNT);
22322220
}
22332221

22342222
get peerInitiatedStreamCount() {
2235-
const stats = this[kInternalState].stats || this[kHandle].stats;
2236-
return stats[IDX_QUIC_SESSION_STATS_STREAMS_IN_COUNT];
2223+
return getStats(this, IDX_QUIC_SESSION_STATS_STREAMS_IN_COUNT);
22372224
}
22382225

22392226
get selfInitiatedStreamCount() {
2240-
const stats = this[kInternalState].stats || this[kHandle].stats;
2241-
return stats[IDX_QUIC_SESSION_STATS_STREAMS_OUT_COUNT];
2227+
return getStats(this, IDX_QUIC_SESSION_STATS_STREAMS_OUT_COUNT);
22422228
}
22432229

22442230
get keyUpdateCount() {
2245-
const stats = this[kInternalState].stats || this[kHandle].stats;
2246-
return stats[IDX_QUIC_SESSION_STATS_KEYUPDATE_COUNT];
2231+
return getStats(this, IDX_QUIC_SESSION_STATS_KEYUPDATE_COUNT);
22472232
}
22482233

22492234
get minRTT() {
2250-
const stats = this[kInternalState].stats || this[kHandle].stats;
2251-
return stats[IDX_QUIC_SESSION_STATS_MIN_RTT];
2235+
return getStats(this, IDX_QUIC_SESSION_STATS_MIN_RTT);
22522236
}
22532237

22542238
get latestRTT() {
2255-
const stats = this[kInternalState].stats || this[kHandle].stats;
2256-
return stats[IDX_QUIC_SESSION_STATS_LATEST_RTT];
2239+
return getStats(this, IDX_QUIC_SESSION_STATS_LATEST_RTT);
22572240
}
22582241

22592242
get smoothedRTT() {
2260-
const stats = this[kInternalState].stats || this[kHandle].stats;
2261-
return stats[IDX_QUIC_SESSION_STATS_SMOOTHED_RTT];
2243+
return getStats(this, IDX_QUIC_SESSION_STATS_SMOOTHED_RTT);
22622244
}
22632245

22642246
updateKey() {
@@ -3176,39 +3158,32 @@ class QuicStream extends Duplex {
31763158
}
31773159

31783160
get duration() {
3179-
const now = process.hrtime.bigint();
3180-
const stats = this[kInternalState].stats || this[kHandle].stats;
3181-
return now - stats[IDX_QUIC_STREAM_STATS_CREATED_AT];
3161+
return process.hrtime.bigint() -
3162+
getStats(this, IDX_QUIC_STREAM_STATS_CREATED_AT);
31823163
}
31833164

31843165
get bytesReceived() {
3185-
const stats = this[kInternalState].stats || this[kHandle].stats;
3186-
return stats[IDX_QUIC_STREAM_STATS_BYTES_RECEIVED];
3166+
return getStats(this, IDX_QUIC_STREAM_STATS_BYTES_RECEIVED);
31873167
}
31883168

31893169
get bytesSent() {
3190-
const stats = this[kInternalState].stats || this[kHandle].stats;
3191-
return stats[IDX_QUIC_STREAM_STATS_BYTES_SENT];
3170+
return getStats(this, IDX_QUIC_STREAM_STATS_BYTES_SENT);
31923171
}
31933172

31943173
get maxExtendedOffset() {
3195-
const stats = this[kInternalState].stats || this[kHandle].stats;
3196-
return stats[IDX_QUIC_STREAM_STATS_MAX_OFFSET];
3174+
return getStats(this, IDX_QUIC_STREAM_STATS_MAX_OFFSET);
31973175
}
31983176

31993177
get finalSize() {
3200-
const stats = this[kInternalState].stats || this[kHandle].stats;
3201-
return stats[IDX_QUIC_STREAM_STATS_FINAL_SIZE];
3178+
return getStats(this, IDX_QUIC_STREAM_STATS_FINAL_SIZE);
32023179
}
32033180

32043181
get maxAcknowledgedOffset() {
3205-
const stats = this[kInternalState].stats || this[kHandle].stats;
3206-
return stats[IDX_QUIC_STREAM_STATS_MAX_OFFSET_ACK];
3182+
return getStats(this, IDX_QUIC_STREAM_STATS_MAX_OFFSET_ACK);
32073183
}
32083184

32093185
get maxReceivedOffset() {
3210-
const stats = this[kInternalState].stats || this[kHandle].stats;
3211-
return stats[IDX_QUIC_STREAM_STATS_MAX_OFFSET_RECV];
3186+
return getStats(this, IDX_QUIC_STREAM_STATS_MAX_OFFSET_RECV);
32123187
}
32133188
}
32143189

0 commit comments

Comments
 (0)