@@ -9,6 +9,7 @@ const net = require('net')
9
9
const http = require ( 'http' )
10
10
const { pipeline } = require ( 'stream' )
11
11
const util = require ( './core/util' )
12
+ const { channels } = require ( './core/diagnostics' )
12
13
const timers = require ( './timers' )
13
14
const Request = require ( './core/request' )
14
15
const DispatcherBase = require ( './dispatcher-base' )
@@ -108,21 +109,6 @@ const FastBuffer = Buffer[Symbol.species]
108
109
109
110
const kClosedResolve = Symbol ( 'kClosedResolve' )
110
111
111
- const channels = { }
112
-
113
- try {
114
- const diagnosticsChannel = require ( 'diagnostics_channel' )
115
- channels . sendHeaders = diagnosticsChannel . channel ( 'undici:client:sendHeaders' )
116
- channels . beforeConnect = diagnosticsChannel . channel ( 'undici:client:beforeConnect' )
117
- channels . connectError = diagnosticsChannel . channel ( 'undici:client:connectError' )
118
- channels . connected = diagnosticsChannel . channel ( 'undici:client:connected' )
119
- } catch {
120
- channels . sendHeaders = { hasSubscribers : false }
121
- channels . beforeConnect = { hasSubscribers : false }
122
- channels . connectError = { hasSubscribers : false }
123
- channels . connected = { hasSubscribers : false }
124
- }
125
-
126
112
/**
127
113
* @type {import('../types/client').default }
128
114
*/
@@ -1191,6 +1177,7 @@ async function connect (client) {
1191
1177
hostname,
1192
1178
protocol,
1193
1179
port,
1180
+ version : client [ kHTTPConnVersion ] ,
1194
1181
servername : client [ kServerName ] ,
1195
1182
localAddress : client [ kLocalAddress ]
1196
1183
} ,
@@ -1284,6 +1271,7 @@ async function connect (client) {
1284
1271
hostname,
1285
1272
protocol,
1286
1273
port,
1274
+ version : client [ kHTTPConnVersion ] ,
1287
1275
servername : client [ kServerName ] ,
1288
1276
localAddress : client [ kLocalAddress ]
1289
1277
} ,
@@ -1306,6 +1294,7 @@ async function connect (client) {
1306
1294
hostname,
1307
1295
protocol,
1308
1296
port,
1297
+ version : client [ kHTTPConnVersion ] ,
1309
1298
servername : client [ kServerName ] ,
1310
1299
localAddress : client [ kLocalAddress ]
1311
1300
} ,
@@ -1658,19 +1647,6 @@ function writeH2 (client, session, request) {
1658
1647
return false
1659
1648
}
1660
1649
1661
- try {
1662
- // TODO(HTTP/2): Should we call onConnect immediately or on stream ready event?
1663
- request . onConnect ( ( err ) => {
1664
- if ( request . aborted || request . completed ) {
1665
- return
1666
- }
1667
-
1668
- errorRequest ( client , request , err || new RequestAbortedError ( ) )
1669
- } )
1670
- } catch ( err ) {
1671
- errorRequest ( client , request , err )
1672
- }
1673
-
1674
1650
if ( request . aborted ) {
1675
1651
return false
1676
1652
}
@@ -1682,9 +1658,34 @@ function writeH2 (client, session, request) {
1682
1658
headers [ HTTP2_HEADER_AUTHORITY ] = host || client [ kHost ]
1683
1659
headers [ HTTP2_HEADER_METHOD ] = method
1684
1660
1661
+ try {
1662
+ // We are already connected, streams are pending.
1663
+ // We can call on connect, and wait for abort
1664
+ request . onConnect ( ( err ) => {
1665
+ if ( request . aborted || request . completed ) {
1666
+ return
1667
+ }
1668
+
1669
+ err = err || new RequestAbortedError ( )
1670
+
1671
+ if ( stream != null ) {
1672
+ util . destroy ( stream , err )
1673
+
1674
+ h2State . openStreams -= 1
1675
+ if ( h2State . openStreams === 0 ) {
1676
+ session . unref ( )
1677
+ }
1678
+ }
1679
+
1680
+ errorRequest ( client , request , err )
1681
+ } )
1682
+ } catch ( err ) {
1683
+ errorRequest ( client , request , err )
1684
+ }
1685
+
1685
1686
if ( method === 'CONNECT' ) {
1686
1687
session . ref ( )
1687
- // we are already connected, streams are pending, first request
1688
+ // We are already connected, streams are pending, first request
1688
1689
// will create a new stream. We trigger a request to create the stream and wait until
1689
1690
// `ready` event is triggered
1690
1691
// We disabled endStream to allow the user to write to the stream
0 commit comments