1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env node
- var net = require('net');
- var opts = require('commander');
- var Throttle = require('../src/throttle.js').Throttle;
- function parseAddr(addr) {
- var result = /^(([^:]*):)?(\d+)$/.exec(addr);
- if (!result)
- return null;
- return {
- host: result[2],
- port: result[3]
- };
- }
- function parseInteger(s) {
- if (!/^\d+$/.test(s))
- return undefined;
- return parseInt(s, 10);
- }
- function runProxy(localAddr, remoteAddr, downRate, upRate) {
- var server = net.createServer(function(local) {
- var remote = net.createConnection(remoteAddr);
- var localThrottle = new Throttle({rate: upRate});
- var remoteThrottle = new Throttle({rate: downRate});
- local.pipe(localThrottle).pipe(remote);
- local.on('error', function() {
- remote.destroy();
- local.destroy();
- });
- remote.pipe(remoteThrottle).pipe(local);
- remote.on('error', function() {
- local.destroy();
- remote.destroy();
- });
- });
- server.listen(localAddr.port, localAddr.host);
- }
- function main() {
- var localAddr, remoteAddr, downRate, upRate;
- opts
- .option('-l, --localaddr <addr>', 'local address, default 0.0.0.0:8080')
- .option('-r, --remoteaddr <addr>', 'remote address, default localhost:80')
- .option('-d, --downstream <bps>', 'downstream bandwidth', parseInteger)
- .option('-u, --upstream <bps>', 'upstream bandwidth, default equal to downstream', parseInteger)
- .parse(process.argv);
- if (opts.localaddr !== undefined) {
- localAddr = parseAddr(opts.localaddr);
- if (!localAddr)
- opts.help();
- } else
- localAddr = {host: undefined, port: 8080};
- if (opts.remoteaddr !== undefined) {
- remoteAddr = parseAddr(opts.remoteaddr);
- if (!remoteAddr)
- opts.help();
- } else
- remoteAddr = {host: undefined, port: 80};
- if (opts.downstream === undefined)
- opts.help();
- downRate = opts.downstream;
- if (opts.upstream !== undefined)
- upRate = opts.upstream;
- else
- upRate = downRate;
- runProxy(localAddr, remoteAddr, downRate, upRate);
- }
- main();
|