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