public
Created

baka-proxy

  • Download Gist
local.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
var net = require('net');
 
net.createServer(function (client) {
var remote = net.connect({
host: 'koba789.com',
port: 8281
});
remote.pipe(client);
 
var source = client,
dest = remote;
 
function ondata(chunk) {
if (dest.writable) {
for (var i = 0; i < chunk.length; ++ i) {
chunk[i] = ~chunk[i];
}
if (false === dest.write(chunk) && source.pause) {
source.pause();
}
}
}
 
source.on('data', ondata);
 
function ondrain() {
if (source.readable && source.resume) {
source.resume();
}
}
 
dest.on('drain', ondrain);
 
source.on('end', onend);
source.on('close', onclose);
 
var didOnEnd = false;
function onend() {
if (didOnEnd) return;
didOnEnd = true;
 
dest.end();
}
 
function onclose() {
if (didOnEnd) return;
didOnEnd = true;
 
dest.destroy();
}
 
function onerror(er) {
cleanup();
if (this.listeners('error').length === 0) {
throw er;
}
}
 
source.on('error', onerror);
dest.on('error', onerror);
 
function cleanup() {
source.removeListener('data', ondata);
dest.removeListener('drain', ondrain);
 
source.removeListener('end', onend);
source.removeListener('close', onclose);
 
source.removeListener('error', onerror);
dest.removeListener('error', onerror);
 
source.removeListener('end', cleanup);
source.removeListener('close', cleanup);
 
dest.removeListener('end', cleanup);
dest.removeListener('close', cleanup);
}
 
source.on('end', cleanup);
source.on('close', cleanup);
 
dest.on('end', cleanup);
dest.on('close', cleanup);
 
dest.emit('pipe', source);
}).listen(8281);

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.