@@ -34,7 +34,7 @@ const continueExpression = common.continueExpression;
34
34
const chunkExpression = common . chunkExpression ;
35
35
const httpSocketSetup = common . httpSocketSetup ;
36
36
const OutgoingMessage = require ( '_http_outgoing' ) . OutgoingMessage ;
37
- const outHeadersKey = require ( 'internal/http' ) . outHeadersKey ;
37
+ const { outHeadersKey, ondrain } = require ( 'internal/http' ) ;
38
38
39
39
const STATUS_CODES = {
40
40
100 : 'Continue' ,
@@ -296,7 +296,7 @@ function connectionListener(socket) {
296
296
// otherwise, destroy on timeout by default
297
297
if ( this . timeout )
298
298
socket . setTimeout ( this . timeout ) ;
299
- socket . on ( 'timeout' , socketOnTimeout . bind ( undefined , this , socket ) ) ;
299
+ socket . on ( 'timeout' , socketOnTimeout ) ;
300
300
301
301
var parser = parsers . alloc ( ) ;
302
302
parser . reinitialize ( HTTPParser . REQUEST ) ;
@@ -314,9 +314,9 @@ function connectionListener(socket) {
314
314
315
315
var state = {
316
316
onData : null ,
317
- onError : null ,
318
317
onEnd : null ,
319
318
onClose : null ,
319
+ onDrain : null ,
320
320
outgoing : [ ] ,
321
321
incoming : [ ] ,
322
322
// `outgoingData` is an approximate amount of bytes queued through all
@@ -326,21 +326,20 @@ function connectionListener(socket) {
326
326
outgoingData : 0
327
327
} ;
328
328
state . onData = socketOnData . bind ( undefined , this , socket , parser , state ) ;
329
- state . onError = socketOnError . bind ( undefined , this , socket , state ) ;
330
329
state . onEnd = socketOnEnd . bind ( undefined , this , socket , parser , state ) ;
331
330
state . onClose = socketOnClose . bind ( undefined , socket , state ) ;
331
+ state . onDrain = socketOnDrain . bind ( undefined , socket , state ) ;
332
332
socket . on ( 'data' , state . onData ) ;
333
- socket . on ( 'error' , state . onError ) ;
333
+ socket . on ( 'error' , socketOnError ) ;
334
334
socket . on ( 'end' , state . onEnd ) ;
335
335
socket . on ( 'close' , state . onClose ) ;
336
+ socket . on ( 'drain' , state . onDrain ) ;
336
337
parser . onIncoming = parserOnIncoming . bind ( undefined , this , socket , state ) ;
337
338
338
339
// We are consuming socket, so it won't get any actual data
339
340
socket . on ( 'resume' , onSocketResume ) ;
340
341
socket . on ( 'pause' , onSocketPause ) ;
341
342
342
- socket . on ( 'drain' , socketOnDrain . bind ( undefined , socket , state ) ) ;
343
-
344
343
// Override on to unconsume on `data`, `readable` listeners
345
344
socket . on = socketOnWrap ;
346
345
@@ -378,15 +377,15 @@ function socketOnDrain(socket, state) {
378
377
}
379
378
}
380
379
381
- function socketOnTimeout ( server , socket ) {
382
- var req = socket . parser && socket . parser . incoming ;
383
- var reqTimeout = req && ! req . complete && req . emit ( 'timeout' , socket ) ;
384
- var res = socket . _httpMessage ;
385
- var resTimeout = res && res . emit ( 'timeout' , socket ) ;
386
- var serverTimeout = server . emit ( 'timeout' , socket ) ;
380
+ function socketOnTimeout ( ) {
381
+ var req = this . parser && this . parser . incoming ;
382
+ var reqTimeout = req && ! req . complete && req . emit ( 'timeout' , this ) ;
383
+ var res = this . _httpMessage ;
384
+ var resTimeout = res && res . emit ( 'timeout' , this ) ;
385
+ var serverTimeout = this . server . emit ( 'timeout' , this ) ;
387
386
388
387
if ( ! reqTimeout && ! resTimeout && ! serverTimeout )
389
- socket . destroy ( ) ;
388
+ this . destroy ( ) ;
390
389
}
391
390
392
391
function socketOnClose ( socket , state ) {
@@ -413,7 +412,7 @@ function socketOnEnd(server, socket, parser, state) {
413
412
414
413
if ( ret instanceof Error ) {
415
414
debug ( 'parse error' ) ;
416
- state . onError ( ret ) ;
415
+ socketOnError . call ( socket , ret ) ;
417
416
return ;
418
417
}
419
418
@@ -443,19 +442,19 @@ function onParserExecute(server, socket, parser, state, ret, d) {
443
442
onParserExecuteCommon ( server , socket , parser , state , ret , undefined ) ;
444
443
}
445
444
446
- function socketOnError ( server , socket , state , e ) {
445
+ function socketOnError ( e ) {
447
446
// Ignore further errors
448
- socket . removeListener ( 'error' , state . onError ) ;
449
- socket . on ( 'error' , ( ) => { } ) ;
447
+ this . removeListener ( 'error' , socketOnError ) ;
448
+ this . on ( 'error' , ( ) => { } ) ;
450
449
451
- if ( ! server . emit ( 'clientError' , e , socket ) )
452
- socket . destroy ( e ) ;
450
+ if ( ! this . server . emit ( 'clientError' , e , this ) )
451
+ this . destroy ( e ) ;
453
452
}
454
453
455
454
function onParserExecuteCommon ( server , socket , parser , state , ret , d ) {
456
455
if ( ret instanceof Error ) {
457
456
debug ( 'parse error' ) ;
458
- state . onError ( ret ) ;
457
+ socketOnError . call ( socket , ret ) ;
459
458
} else if ( parser . incoming && parser . incoming . upgrade ) {
460
459
// Upgrade or CONNECT
461
460
var bytesParsed = ret ;
@@ -468,6 +467,8 @@ function onParserExecuteCommon(server, socket, parser, state, ret, d) {
468
467
socket . removeListener ( 'data' , state . onData ) ;
469
468
socket . removeListener ( 'end' , state . onEnd ) ;
470
469
socket . removeListener ( 'close' , state . onClose ) ;
470
+ socket . removeListener ( 'drain' , state . onDrain ) ;
471
+ socket . removeListener ( 'drain' , ondrain ) ;
471
472
unconsume ( parser , socket ) ;
472
473
parser . finish ( ) ;
473
474
freeParser ( parser , req , null ) ;
0 commit comments