From 1cc2a57394af479a6b936f5c6fcf523553a910c7 Mon Sep 17 00:00:00 2001 From: Zachary Boyd Date: Sat, 25 Mar 2017 21:14:46 -0400 Subject: [PATCH] starts filling the buffer before a tor instance is live --- package.json | 2 +- src/DNSServer.js | 19 +++++++++---------- src/SOCKSServer.js | 40 ++++++++++++++++++++-------------------- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index 1f97ff3..ced066b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tor-router", - "version": "3.0.1", + "version": "3.0.2", "main": "src/index.js", "repository": "git@github.com:znetstar/tor-router.git", "author": "Zachary Boyd ", diff --git a/src/DNSServer.js b/src/DNSServer.js index 1620ebe..8f85c94 100644 --- a/src/DNSServer.js +++ b/src/DNSServer.js @@ -8,8 +8,8 @@ class DNSServer extends UDPServer { this.tor_pool = tor_pool; this.on('request', (req, res) => { - for (let question of req.question) { - let connect = (tor_instance) => { + let connect = (tor_instance) => { + for (let question of req.question) { let dns_port = (tor_instance.dns_port); let outbound_req = dns.Request({ question, @@ -37,14 +37,13 @@ class DNSServer extends UDPServer { outbound_req.send(); }; - - if (this.tor_pool.instances.length) { - connect(this.tor_pool.next()); - } - else { - this.log.debug(`[dns]: a connection has been attempted, but no tor instances are live... waiting for an instance to come online`); - this.tor_pool.once('instance_created', connect); - } + }; + if (this.tor_pool.instances.length) { + connect(this.tor_pool.next()); + } + else { + this.log.debug(`[dns]: a connection has been attempted, but no tor instances are live... waiting for an instance to come online`); + this.tor_pool.once('instance_created', connect); } }); } diff --git a/src/SOCKSServer.js b/src/SOCKSServer.js index 2d33bdb..50e734f 100644 --- a/src/SOCKSServer.js +++ b/src/SOCKSServer.js @@ -12,32 +12,32 @@ class SOCKSServer extends SOCKS5Server{ var outbound_socket; let buffer = []; + let onInboundData = (data) => buffer.push(data) + + let onClose = (error) => { + inbound_socket && inbound_socket.end(); + outbound_socket && outbound_socket.end(); + + inbound_socket = outbound_socket = buffer = void(0); + + if (error) + this.logger.error(`[socks]: an error occured: ${error.message}`) + + d.exit(); + }; + + if (!inbound_socket) return; + + inbound_socket.on('close', onClose); + inbound_socket.on('data', onInboundData); + inbound_socket.on('error', onClose); + let connect = (tor_instance) => { let socks_port = tor_instance.socks_port; logger && logger.info(`[socks]: ${info.srcAddr}:${info.srcPort} → 127.0.0.1:${socks_port} → ${info.dstAddr}:${info.dstPort}`) - let onClose = (error) => { - inbound_socket && inbound_socket.end(); - outbound_socket && outbound_socket.end(); - - inbound_socket = outbound_socket = buffer = void(0); - - if (error) - this.logger.error(`[socks]: an error occured: ${error.message}`) - - d.exit(); - }; - d.on('error', onClose); - let onInboundData = (data) => buffer.push(data) - - if (!inbound_socket) return; - - inbound_socket.on('close', onClose); - inbound_socket.on('data', onInboundData); - inbound_socket.on('error', onClose); - d.run(() => { socks.connect({ host: info.dstAddr,