@@ -147,6 +147,7 @@ const {
147
147
IDX_QUIC_SESSION_STATS_STREAMS_OUT_COUNT ,
148
148
IDX_QUIC_SESSION_STATS_KEYUPDATE_COUNT ,
149
149
IDX_QUIC_SESSION_STATS_LOSS_RETRANSMIT_COUNT ,
150
+ IDX_QUIC_SESSION_STATS_HANDSHAKE_COMPLETED_AT ,
150
151
IDX_QUIC_SESSION_STATS_ACK_DELAY_RETRANSMIT_COUNT ,
151
152
IDX_QUIC_SESSION_STATS_MAX_BYTES_IN_FLIGHT ,
152
153
IDX_QUIC_SESSION_STATS_BLOCK_COUNT ,
@@ -625,6 +626,13 @@ function onRemoveListener(event) {
625
626
toggleListeners ( this [ kHandle ] , event , false ) ;
626
627
}
627
628
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
+
628
636
// QuicEndpoint wraps a UDP socket and is owned
629
637
// by a QuicSocket. It does not exist independently
630
638
// of the QuicSocket.
@@ -1524,77 +1532,65 @@ class QuicSocket extends EventEmitter {
1524
1532
this [ kHandle ] . setServerBusy ( on ) ;
1525
1533
}
1526
1534
1535
+ get serverBusy ( ) {
1536
+ return this [ kInternalState ] . serverBusy ;
1537
+ }
1538
+
1527
1539
get duration ( ) {
1528
1540
// TODO(@jasnell): If the object is destroyed, it should
1529
1541
// 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 ) ;
1533
1544
}
1534
1545
1535
1546
get boundDuration ( ) {
1536
1547
// TODO(@jasnell): If the object is destroyed, it should
1537
1548
// 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 ) ;
1541
1551
}
1542
1552
1543
1553
get listenDuration ( ) {
1544
1554
// TODO(@jasnell): If the object is destroyed, it should
1545
1555
// 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 ) ;
1549
1558
}
1550
1559
1551
1560
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 ) ;
1554
1562
}
1555
1563
1556
1564
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 ) ;
1559
1566
}
1560
1567
1561
1568
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 ) ;
1564
1570
}
1565
1571
1566
1572
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 ) ;
1569
1574
}
1570
1575
1571
1576
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 ) ;
1578
1578
}
1579
1579
1580
1580
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 ) ;
1583
1582
}
1584
1583
1585
1584
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 ) ;
1588
1586
}
1589
1587
1590
1588
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 ) ;
1593
1590
}
1594
1591
1595
1592
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 ) ;
1598
1594
}
1599
1595
1600
1596
// Diagnostic packet loss is a testing mechanism that allows simulating
@@ -2183,82 +2179,68 @@ class QuicSession extends EventEmitter {
2183
2179
}
2184
2180
2185
2181
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 ) ;
2189
2184
}
2190
2185
2191
2186
get handshakeDuration ( ) {
2192
- const stats = this [ kInternalState ] . stats || this [ kHandle ] . stats ;
2193
2187
const end =
2194
2188
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 ) ;
2197
2192
}
2198
2193
2199
2194
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 ) ;
2202
2196
}
2203
2197
2204
2198
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 ) ;
2207
2200
}
2208
2201
2209
2202
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 ) ;
2212
2204
}
2213
2205
2214
2206
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 ) ;
2217
2208
}
2218
2209
2219
2210
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 ) ;
2222
2212
}
2223
2213
2224
2214
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 ) ;
2227
2216
}
2228
2217
2229
2218
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 ) ;
2232
2220
}
2233
2221
2234
2222
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 ) ;
2237
2224
}
2238
2225
2239
2226
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 ) ;
2242
2228
}
2243
2229
2244
2230
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 ) ;
2247
2232
}
2248
2233
2249
2234
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 ) ;
2252
2236
}
2253
2237
2254
2238
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 ) ;
2257
2240
}
2258
2241
2259
2242
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 ) ;
2262
2244
}
2263
2245
2264
2246
updateKey ( ) {
@@ -3176,39 +3158,32 @@ class QuicStream extends Duplex {
3176
3158
}
3177
3159
3178
3160
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 ) ;
3182
3163
}
3183
3164
3184
3165
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 ) ;
3187
3167
}
3188
3168
3189
3169
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 ) ;
3192
3171
}
3193
3172
3194
3173
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 ) ;
3197
3175
}
3198
3176
3199
3177
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 ) ;
3202
3179
}
3203
3180
3204
3181
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 ) ;
3207
3183
}
3208
3184
3209
3185
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 ) ;
3212
3187
}
3213
3188
}
3214
3189
0 commit comments