1
1
import * as url from "url" ;
2
2
import { EOL } from "os" ;
3
+ import { TLSSocket } from "tls" ;
3
4
import * as helpers from "./helpers" ;
4
5
import * as zlib from "zlib" ;
5
6
import * as util from "util" ;
@@ -105,8 +106,6 @@ export class HttpClient implements Server.IHttpClient {
105
106
106
107
const result = new Promise < Server . IResponse > ( ( resolve , reject ) => {
107
108
let timerId : number ;
108
- let stuckRequestTimerId : number ;
109
- let hasResponse = false ;
110
109
const cleanupRequestData : ICleanupRequestData = Object . create ( { timers : [ ] } ) ;
111
110
this . cleanupData . push ( cleanupRequestData ) ;
112
111
@@ -133,17 +132,6 @@ export class HttpClient implements Server.IHttpClient {
133
132
const requestObj = request ( options ) ;
134
133
cleanupRequestData . req = requestObj ;
135
134
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
-
147
135
requestObj
148
136
. on ( "error" , ( err : IHttpRequestError ) => {
149
137
this . $logger . trace ( "An error occurred while sending the request:" , err ) ;
@@ -158,9 +146,22 @@ export class HttpClient implements Server.IHttpClient {
158
146
err . message = errorMessage || err . message ;
159
147
this . setResponseResult ( promiseActions , cleanupRequestData , { err } ) ;
160
148
} )
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
+ } )
161
163
. on ( "response" , ( response : Server . IRequestResponseData ) => {
162
164
cleanupRequestData . res = response ;
163
- hasResponse = true ;
164
165
let lastChunkTimestamp = Date . now ( ) ;
165
166
cleanupRequestData . stuckResponseIntervalId = setInterval ( ( ) => {
166
167
if ( Date . now ( ) - lastChunkTimestamp > HttpClient . STUCK_RESPONSE_CHECK_INTERVAL ) {
0 commit comments