11import * as url from "url" ;
22import { EOL } from "os" ;
3+ import { TLSSocket } from "tls" ;
34import * as helpers from "./helpers" ;
45import * as zlib from "zlib" ;
56import * as util from "util" ;
@@ -105,8 +106,6 @@ export class HttpClient implements Server.IHttpClient {
105106
106107 const result = new Promise < Server . IResponse > ( ( resolve , reject ) => {
107108 let timerId : number ;
108- let stuckRequestTimerId : number ;
109- let hasResponse = false ;
110109 const cleanupRequestData : ICleanupRequestData = Object . create ( { timers : [ ] } ) ;
111110 this . cleanupData . push ( cleanupRequestData ) ;
112111
@@ -133,17 +132,6 @@ export class HttpClient implements Server.IHttpClient {
133132 const requestObj = request ( options ) ;
134133 cleanupRequestData . req = requestObj ;
135134
136- if ( options . method !== "PUT" && options . method !== "POST" ) {
137- stuckRequestTimerId = setTimeout ( ( ) => {
138- clearTimeout ( stuckRequestTimerId ) ;
139- stuckRequestTimerId = null ;
140- if ( ! hasResponse ) {
141- this . setResponseResult ( promiseActions , cleanupRequestData , { err : new Error ( HttpClient . STUCK_REQUEST_ERROR_MESSAGE ) } ) ;
142- }
143- } , options . timeout || HttpClient . STUCK_REQUEST_TIMEOUT ) ;
144- cleanupRequestData . timers . push ( stuckRequestTimerId ) ;
145- }
146-
147135 requestObj
148136 . on ( "error" , ( err : IHttpRequestError ) => {
149137 this . $logger . trace ( "An error occurred while sending the request:" , err ) ;
@@ -158,9 +146,22 @@ export class HttpClient implements Server.IHttpClient {
158146 err . message = errorMessage || err . message ;
159147 this . setResponseResult ( promiseActions , cleanupRequestData , { err } ) ;
160148 } )
149+ . on ( "socket" , ( s : TLSSocket ) => {
150+ let stuckRequestTimerId : number ;
151+
152+ stuckRequestTimerId = setTimeout ( ( ) => {
153+ this . setResponseResult ( promiseActions , cleanupRequestData , { err : new Error ( HttpClient . STUCK_REQUEST_ERROR_MESSAGE ) } ) ;
154+ } , options . timeout || HttpClient . STUCK_REQUEST_TIMEOUT ) ;
155+
156+ cleanupRequestData . timers . push ( stuckRequestTimerId ) ;
157+
158+ s . once ( "secureConnect" , ( ) => {
159+ clearTimeout ( stuckRequestTimerId ) ;
160+ stuckRequestTimerId = null ;
161+ } ) ;
162+ } )
161163 . on ( "response" , ( response : Server . IRequestResponseData ) => {
162164 cleanupRequestData . res = response ;
163- hasResponse = true ;
164165 let lastChunkTimestamp = Date . now ( ) ;
165166 cleanupRequestData . stuckResponseIntervalId = setInterval ( ( ) => {
166167 if ( Date . now ( ) - lastChunkTimestamp > HttpClient . STUCK_RESPONSE_CHECK_INTERVAL ) {
0 commit comments