24
24
const {
25
25
ArrayIsArray,
26
26
Error,
27
+ FunctionPrototypeBind,
28
+ FunctionPrototypeCall,
27
29
ObjectKeys,
28
30
ObjectSetPrototypeOf,
29
31
Symbol,
@@ -169,7 +171,7 @@ class HTTPServerAsyncResource {
169
171
}
170
172
171
173
function ServerResponse ( req ) {
172
- OutgoingMessage . call ( this ) ;
174
+ FunctionPrototypeCall ( OutgoingMessage , this ) ;
173
175
174
176
if ( req . method === 'HEAD' ) this . _hasBody = false ;
175
177
@@ -197,7 +199,7 @@ ServerResponse.prototype._finish = function _finish() {
197
199
if ( this [ kServerResponseStatistics ] !== undefined ) {
198
200
emitStatistics ( this [ kServerResponseStatistics ] ) ;
199
201
}
200
- OutgoingMessage . prototype . _finish . call ( this ) ;
202
+ FunctionPrototypeCall ( OutgoingMessage . prototype . _finish , this ) ;
201
203
} ;
202
204
203
205
@@ -371,7 +373,7 @@ function Server(options, requestListener) {
371
373
validateBoolean ( insecureHTTPParser , 'options.insecureHTTPParser' ) ;
372
374
this . insecureHTTPParser = insecureHTTPParser ;
373
375
374
- net . Server . call ( this , { allowHalfOpen : true } ) ;
376
+ FunctionPrototypeCall ( net . Server , this , { allowHalfOpen : true } ) ;
375
377
376
378
if ( requestListener ) {
377
379
this . on ( 'request' , requestListener ) ;
@@ -477,16 +479,21 @@ function connectionListenerInternal(server, socket) {
477
479
outgoingData : 0 ,
478
480
keepAliveTimeoutSet : false
479
481
} ;
480
- state . onData = socketOnData . bind ( undefined , server , socket , parser , state ) ;
481
- state . onEnd = socketOnEnd . bind ( undefined , server , socket , parser , state ) ;
482
- state . onClose = socketOnClose . bind ( undefined , socket , state ) ;
483
- state . onDrain = socketOnDrain . bind ( undefined , socket , state ) ;
482
+ state . onData = FunctionPrototypeBind ( socketOnData , undefined , server ,
483
+ socket , parser , state ) ;
484
+ state . onEnd = FunctionPrototypeBind ( socketOnEnd , undefined , server ,
485
+ socket , parser , state ) ;
486
+ state . onClose = FunctionPrototypeBind ( socketOnClose , undefined ,
487
+ socket , state ) ;
488
+ state . onDrain = FunctionPrototypeBind ( socketOnDrain , undefined ,
489
+ socket , state ) ;
484
490
socket . on ( 'data' , state . onData ) ;
485
491
socket . on ( 'error' , socketOnError ) ;
486
492
socket . on ( 'end' , state . onEnd ) ;
487
493
socket . on ( 'close' , state . onClose ) ;
488
494
socket . on ( 'drain' , state . onDrain ) ;
489
- parser . onIncoming = parserOnIncoming . bind ( undefined , server , socket , state ) ;
495
+ parser . onIncoming = FunctionPrototypeBind ( parserOnIncoming , undefined , server ,
496
+ socket , state ) ;
490
497
491
498
// We are consuming socket, so it won't get any actual data
492
499
socket . on ( 'resume' , onSocketResume ) ;
@@ -505,16 +512,22 @@ function connectionListenerInternal(server, socket) {
505
512
socket . _handle . _consumed = true ;
506
513
parser . consume ( socket . _handle ) ;
507
514
}
508
- parser [ kOnExecute ] =
509
- onParserExecute . bind ( undefined , server , socket , parser , state ) ;
515
+ parser [ kOnExecute ] = FunctionPrototypeBind (
516
+ onParserExecute ,
517
+ undefined ,
518
+ server ,
519
+ socket ,
520
+ parser ,
521
+ state
522
+ ) ;
510
523
511
524
parser [ kOnTimeout ] =
512
- onParserTimeout . bind ( undefined , server , socket ) ;
525
+ FunctionPrototypeBind ( onParserTimeout , undefined , server , socket ) ;
513
526
514
527
// When receiving new requests on the same socket (pipelining or keep alive)
515
528
// make sure the requestTimeout is active.
516
529
parser [ kOnMessageBegin ] =
517
- setRequestTimeout . bind ( undefined , server , socket ) ;
530
+ FunctionPrototypeBind ( setRequestTimeout , undefined , server , socket ) ;
518
531
519
532
// This protects from DOS attack where an attacker establish the connection
520
533
// without sending any data on applications where server.timeout is left to
@@ -592,7 +605,7 @@ function socketOnEnd(server, socket, parser, state) {
592
605
593
606
if ( ret instanceof Error ) {
594
607
debug ( 'parse error' ) ;
595
- socketOnError . call ( socket , ret ) ;
608
+ FunctionPrototypeCall ( socketOnError , socket , ret ) ;
596
609
return ;
597
610
}
598
611
@@ -618,7 +631,7 @@ function socketOnData(server, socket, parser, state, d) {
618
631
619
632
function onRequestTimeout ( socket ) {
620
633
socket [ kRequestTimeout ] = undefined ;
621
- socketOnError . call ( socket , new ERR_HTTP_REQUEST_TIMEOUT ( ) ) ;
634
+ FunctionPrototypeCall ( socketOnError , socket , new ERR_HTTP_REQUEST_TIMEOUT ( ) ) ;
622
635
}
623
636
624
637
function onParserExecute ( server , socket , parser , state , ret ) {
@@ -685,7 +698,7 @@ function onParserExecuteCommon(server, socket, parser, state, ret, d) {
685
698
prepareError ( ret , parser , d ) ;
686
699
ret . rawPacket = d || parser . getCurrentBuffer ( ) ;
687
700
debug ( 'parse error' , ret ) ;
688
- socketOnError . call ( socket , ret ) ;
701
+ FunctionPrototypeCall ( socketOnError , socket , ret ) ;
689
702
} else if ( parser . incoming && parser . incoming . upgrade ) {
690
703
// Upgrade or CONNECT
691
704
const req = parser . incoming ;
@@ -724,7 +737,7 @@ function onParserExecuteCommon(server, socket, parser, state, ret, d) {
724
737
// When receiving new requests on the same socket (pipelining or keep alive)
725
738
// make sure the requestTimeout is active.
726
739
parser [ kOnMessageBegin ] =
727
- setRequestTimeout . bind ( undefined , server , socket ) ;
740
+ FunctionPrototypeBind ( setRequestTimeout , undefined , server , socket ) ;
728
741
}
729
742
730
743
if ( socket . _paused && socket . parser ) {
@@ -870,7 +883,8 @@ function parserOnIncoming(server, socket, state, req, keepAlive) {
870
883
871
884
const res = new server [ kServerResponse ] ( req ) ;
872
885
res . _keepAliveTimeout = server . keepAliveTimeout ;
873
- res . _onPendingData = updateOutgoingData . bind ( undefined , socket , state ) ;
886
+ res . _onPendingData =
887
+ FunctionPrototypeBind ( updateOutgoingData , undefined , socket , state ) ;
874
888
875
889
res . shouldKeepAlive = keepAlive ;
876
890
DTRACE_HTTP_SERVER_REQUEST ( req , socket ) ;
@@ -894,7 +908,8 @@ function parserOnIncoming(server, socket, state, req, keepAlive) {
894
908
// When we're finished writing the response, check if this is the last
895
909
// response, if so destroy the socket.
896
910
res . on ( 'finish' ,
897
- resOnFinish . bind ( undefined , req , res , socket , state , server ) ) ;
911
+ FunctionPrototypeBind ( resOnFinish , undefined , req , res ,
912
+ socket , state , server ) ) ;
898
913
899
914
if ( req . headers . expect !== undefined &&
900
915
( req . httpVersionMajor === 1 && req . httpVersionMinor === 1 ) ) {
@@ -966,7 +981,10 @@ function unconsume(parser, socket) {
966
981
967
982
function generateSocketListenerWrapper ( originalFnName ) {
968
983
return function socketListenerWrap ( ev , fn ) {
969
- const res = net . Socket . prototype [ originalFnName ] . call ( this , ev , fn ) ;
984
+ const res = FunctionPrototypeCall (
985
+ net . Socket . prototype [ originalFnName ] ,
986
+ this , ev , fn
987
+ ) ;
970
988
if ( ! this . parser ) {
971
989
this . on = net . Socket . prototype . on ;
972
990
this . addListener = net . Socket . prototype . addListener ;
0 commit comments