@@ -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