1 | var prog = require('child_process')
|
2 | var util = require('util')
|
3 |
|
4 | var cons = require('./console').Console
|
5 |
|
6 | function startProxies(reqs,proc,command,emitter,portargs){
|
7 |
|
8 | if(command.proxy){
|
9 |
|
10 | var localhost = 'localhost';
|
11 | var i=0;
|
12 |
|
13 | var ports = command.proxy.split(',');
|
14 | for(key in reqs){(function(key){
|
15 |
|
16 | var j = i++;
|
17 |
|
18 | var port = ports[j];
|
19 |
|
20 | if(port<1024 && process.getuid()!=0)
|
21 | return cons.Error('Cannot Bind to Privileged Port %s Without Permission - Try \'sudo\'',port);
|
22 |
|
23 | if(!port) return cons.Warn('No Downstream Port Defined for \'%s\' Proxy',key);
|
24 | if(!(key in proc)) return cons.Warn('Proxy Not Started for Undefined Key \'%s\'',key);
|
25 |
|
26 | var upstream_size = reqs[key];
|
27 | var upstream_port = parseInt(portargs) + j*100;
|
28 |
|
29 | var proxy = prog.fork(__dirname + '/../proxy.js',[],{
|
30 | env: {
|
31 | HOST: localhost,
|
32 | PORT: port,
|
33 | UPSTREAM_HOST: localhost,
|
34 | UPSTREAM_PORT: upstream_port,
|
35 | UPSTREAM_SIZE: upstream_size,
|
36 | SUDO_USER: process.env.SUDO_USER
|
37 | }
|
38 | });
|
39 |
|
40 | var port_targets;
|
41 | if(upstream_size==1){
|
42 | port_targets = util.format('%d', upstream_port);
|
43 | }else{
|
44 | port_targets = util.format('(%d-%d)',upstream_port, upstream_port+upstream_size-1)
|
45 | }
|
46 |
|
47 | cons.Alert('Starting Proxy Server [%s] %s -> %s', key, port, port_targets);
|
48 |
|
49 | emitter.once('killall',function(signal){
|
50 | cons.Done('Killing Proxy Server on Port %s',port);
|
51 | proxy.kill(signal);
|
52 | })
|
53 |
|
54 | proxy.on('exit',function(code, signal){
|
55 | emitter.emit('killall', signal);
|
56 | })
|
57 |
|
58 | })(key)}
|
59 |
|
60 | }
|
61 |
|
62 | }
|
63 |
|
64 | module.exports.startProxies = startProxies;
|