@@ -13,6 +13,7 @@ const continueExpression = common.continueExpression;
13
13
const chunkExpression = common . chunkExpression ;
14
14
const httpSocketSetup = common . httpSocketSetup ;
15
15
const OutgoingMessage = require ( '_http_outgoing' ) . OutgoingMessage ;
16
+ const ondrain = require ( 'internal/http' ) . ondrain ;
16
17
17
18
const STATUS_CODES = exports . STATUS_CODES = {
18
19
100 : 'Continue' ,
@@ -274,7 +275,7 @@ function connectionListener(socket) {
274
275
// otherwise, destroy on timeout by default
275
276
if ( this . timeout )
276
277
socket . setTimeout ( this . timeout ) ;
277
- socket . on ( 'timeout' , socketOnTimeout . bind ( undefined , this , socket ) ) ;
278
+ socket . on ( 'timeout' , socketOnTimeout ) ;
278
279
279
280
var parser = parsers . alloc ( ) ;
280
281
parser . reinitialize ( HTTPParser . REQUEST ) ;
@@ -292,9 +293,9 @@ function connectionListener(socket) {
292
293
293
294
var state = {
294
295
onData : null ,
295
- onError : null ,
296
296
onEnd : null ,
297
297
onClose : null ,
298
+ onDrain : null ,
298
299
outgoing : [ ] ,
299
300
incoming : [ ] ,
300
301
// `outgoingData` is an approximate amount of bytes queued through all
@@ -304,21 +305,20 @@ function connectionListener(socket) {
304
305
outgoingData : 0
305
306
} ;
306
307
state . onData = socketOnData . bind ( undefined , this , socket , parser , state ) ;
307
- state . onError = socketOnError . bind ( undefined , this , socket , state ) ;
308
308
state . onEnd = socketOnEnd . bind ( undefined , this , socket , parser , state ) ;
309
309
state . onClose = socketOnClose . bind ( undefined , socket , state ) ;
310
+ state . onDrain = socketOnDrain . bind ( undefined , socket , state ) ;
310
311
socket . on ( 'data' , state . onData ) ;
311
- socket . on ( 'error' , state . onError ) ;
312
+ socket . on ( 'error' , socketOnError ) ;
312
313
socket . on ( 'end' , state . onEnd ) ;
313
314
socket . on ( 'close' , state . onClose ) ;
315
+ socket . on ( 'drain' , state . onDrain ) ;
314
316
parser . onIncoming = parserOnIncoming . bind ( undefined , this , socket , state ) ;
315
317
316
318
// We are consuming socket, so it won't get any actual data
317
319
socket . on ( 'resume' , onSocketResume ) ;
318
320
socket . on ( 'pause' , onSocketPause ) ;
319
321
320
- socket . on ( 'drain' , socketOnDrain . bind ( undefined , socket , state ) ) ;
321
-
322
322
// Override on to unconsume on `data`, `readable` listeners
323
323
socket . on = socketOnWrap ;
324
324
@@ -356,15 +356,15 @@ function socketOnDrain(socket, state) {
356
356
}
357
357
}
358
358
359
- function socketOnTimeout ( server , socket ) {
360
- var req = socket . parser && socket . parser . incoming ;
361
- var reqTimeout = req && ! req . complete && req . emit ( 'timeout' , socket ) ;
362
- var res = socket . _httpMessage ;
363
- var resTimeout = res && res . emit ( 'timeout' , socket ) ;
364
- var serverTimeout = server . emit ( 'timeout' , socket ) ;
359
+ function socketOnTimeout ( ) {
360
+ var req = this . parser && this . parser . incoming ;
361
+ var reqTimeout = req && ! req . complete && req . emit ( 'timeout' , this ) ;
362
+ var res = this . _httpMessage ;
363
+ var resTimeout = res && res . emit ( 'timeout' , this ) ;
364
+ var serverTimeout = this . server . emit ( 'timeout' , this ) ;
365
365
366
366
if ( ! reqTimeout && ! resTimeout && ! serverTimeout )
367
- socket . destroy ( ) ;
367
+ this . destroy ( ) ;
368
368
}
369
369
370
370
function socketOnClose ( socket , state ) {
@@ -391,7 +391,7 @@ function socketOnEnd(server, socket, parser, state) {
391
391
392
392
if ( ret instanceof Error ) {
393
393
debug ( 'parse error' ) ;
394
- state . onError ( ret ) ;
394
+ socketOnError . call ( socket , ret ) ;
395
395
return ;
396
396
}
397
397
@@ -421,19 +421,19 @@ function onParserExecute(server, socket, parser, state, ret, d) {
421
421
onParserExecuteCommon ( server , socket , parser , state , ret , undefined ) ;
422
422
}
423
423
424
- function socketOnError ( server , socket , state , e ) {
424
+ function socketOnError ( e ) {
425
425
// Ignore further errors
426
- socket . removeListener ( 'error' , state . onError ) ;
427
- socket . on ( 'error' , ( ) => { } ) ;
426
+ this . removeListener ( 'error' , socketOnError ) ;
427
+ this . on ( 'error' , ( ) => { } ) ;
428
428
429
- if ( ! server . emit ( 'clientError' , e , socket ) )
430
- socket . destroy ( e ) ;
429
+ if ( ! this . server . emit ( 'clientError' , e , this ) )
430
+ this . destroy ( e ) ;
431
431
}
432
432
433
433
function onParserExecuteCommon ( server , socket , parser , state , ret , d ) {
434
434
if ( ret instanceof Error ) {
435
435
debug ( 'parse error' ) ;
436
- state . onError ( ret ) ;
436
+ socketOnError . call ( socket , ret ) ;
437
437
} else if ( parser . incoming && parser . incoming . upgrade ) {
438
438
// Upgrade or CONNECT
439
439
var bytesParsed = ret ;
@@ -446,6 +446,8 @@ function onParserExecuteCommon(server, socket, parser, state, ret, d) {
446
446
socket . removeListener ( 'data' , state . onData ) ;
447
447
socket . removeListener ( 'end' , state . onEnd ) ;
448
448
socket . removeListener ( 'close' , state . onClose ) ;
449
+ socket . removeListener ( 'drain' , state . onDrain ) ;
450
+ socket . removeListener ( 'drain' , ondrain ) ;
449
451
unconsume ( parser , socket ) ;
450
452
parser . finish ( ) ;
451
453
freeParser ( parser , req , null ) ;
0 commit comments