1
1
var httpProxy = exports ,
2
2
extend = require ( 'util' ) . _extend ,
3
3
parse_url = require ( 'url' ) . parse ,
4
+ EE3 = require ( 'eventemitter3' ) . EventEmitter ,
4
5
web = require ( './passes/web-incoming' ) ,
5
6
ws = require ( './passes/ws-incoming' ) ;
6
7
7
8
httpProxy . createWebProxy = createRightProxy ( 'web' ) ;
8
9
httpProxy . createWsProxy = createRightProxy ( 'ws' ) ;
10
+ httpProxy . Server = ProxyServer ;
9
11
10
12
/**
11
13
* Returns a function that creates the loader for
@@ -36,7 +38,6 @@ function createRightProxy(type) {
36
38
var self = this ,
37
39
args = [ ] . slice . call ( arguments ) ,
38
40
cntr = args . length - 1 ,
39
- ev = 'http-proxy:' + type + ':incoming:' ,
40
41
head ;
41
42
42
43
if (
@@ -55,16 +56,13 @@ function createRightProxy(type) {
55
56
head = args [ cntr ] ;
56
57
}
57
58
58
- options . ee . emit ( ev + 'begin' , req , res ) ;
59
-
60
59
[ 'target' , 'forward' ] . forEach ( function ( e ) {
61
60
if ( typeof options [ e ] === 'string' )
62
61
options [ e ] = parse_url ( options [ e ] ) ;
63
62
} ) ;
64
63
65
- passes . some ( function ( pass ) {
66
- var evnt = ev + pass . name . toLowerCase ( ) + ':' , val ;
67
64
65
+ for ( var i = 0 ; i < passes . length ; i ++ ) {
68
66
/**
69
67
* Call of passes functions
70
68
* pass(req, res, options, head)
@@ -73,16 +71,38 @@ function createRightProxy(type) {
73
71
* refer to the connection socket
74
72
* pass(req, socket, options, head)
75
73
*/
76
-
77
- options . ee . emit ( evnt + 'begin' , req , res ) ;
78
- val = pass ( req , res , options , head ) ;
79
- options . ee . emit ( evnt + 'end' ) ;
80
-
81
- return val ;
82
- } ) ;
83
-
84
- options . ee . emit ( ev + 'end' ) ;
74
+ if ( passes [ i ] ( req , res , this , head ) ) { // passes can return a truthy value to halt the loop
75
+ break ;
76
+ }
77
+ }
85
78
} ;
86
79
} ;
87
80
}
88
81
82
+
83
+ function ProxyServer ( options , web , ws ) {
84
+ this . web = web ;
85
+ this . ws = ws ;
86
+ this . options = options ;
87
+ }
88
+
89
+ ProxyServer . prototype . listen = function ( port ) {
90
+ var self = this ,
91
+ closure = function ( req , res ) { self . web ( req , res ) ; } ,
92
+ server = options . ssl ?
93
+ https . createServer ( this . options . ssl , closure ) :
94
+ http . createServer ( closure ) ;
95
+
96
+ if ( options . ws ) {
97
+ server . on ( 'upgrade' , function ( req , socket , head ) { self . ws ( req , socket , head ) ; } ) ;
98
+ }
99
+
100
+ server . listen ( port ) ;
101
+
102
+ return server ;
103
+ } ;
104
+
105
+ ProxyServer . prototype . before = function ( ) { } ;
106
+ ProxyServer . prototype . after = function ( ) { } ;
107
+
108
+ require ( 'util' ) . inherits ( ProxyServer , EE ) ;
0 commit comments