@@ -9,6 +9,7 @@ const net = require('net')
99const http = require ( 'http' )
1010const { pipeline } = require ( 'stream' )
1111const util = require ( './core/util' )
12+ const { channels } = require ( './core/diagnostics' )
1213const timers = require ( './timers' )
1314const Request = require ( './core/request' )
1415const DispatcherBase = require ( './dispatcher-base' )
@@ -108,21 +109,6 @@ const FastBuffer = Buffer[Symbol.species]
108109
109110const kClosedResolve = Symbol ( 'kClosedResolve' )
110111
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-
126112/**
127113 * @type {import('../types/client').default }
128114 */
@@ -1191,6 +1177,7 @@ async function connect (client) {
11911177 hostname,
11921178 protocol,
11931179 port,
1180+ version : client [ kHTTPConnVersion ] ,
11941181 servername : client [ kServerName ] ,
11951182 localAddress : client [ kLocalAddress ]
11961183 } ,
@@ -1284,6 +1271,7 @@ async function connect (client) {
12841271 hostname,
12851272 protocol,
12861273 port,
1274+ version : client [ kHTTPConnVersion ] ,
12871275 servername : client [ kServerName ] ,
12881276 localAddress : client [ kLocalAddress ]
12891277 } ,
@@ -1306,6 +1294,7 @@ async function connect (client) {
13061294 hostname,
13071295 protocol,
13081296 port,
1297+ version : client [ kHTTPConnVersion ] ,
13091298 servername : client [ kServerName ] ,
13101299 localAddress : client [ kLocalAddress ]
13111300 } ,
@@ -1658,19 +1647,6 @@ function writeH2 (client, session, request) {
16581647 return false
16591648 }
16601649
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-
16741650 if ( request . aborted ) {
16751651 return false
16761652 }
@@ -1682,9 +1658,34 @@ function writeH2 (client, session, request) {
16821658 headers [ HTTP2_HEADER_AUTHORITY ] = host || client [ kHost ]
16831659 headers [ HTTP2_HEADER_METHOD ] = method
16841660
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+
16851686 if ( method === 'CONNECT' ) {
16861687 session . ref ( )
1687- // we are already connected, streams are pending, first request
1688+ // We are already connected, streams are pending, first request
16881689 // will create a new stream. We trigger a request to create the stream and wait until
16891690 // `ready` event is triggered
16901691 // We disabled endStream to allow the user to write to the stream
0 commit comments