Merge pull request #5 from jogli5er/master

Fix issue for dynamically created Tor instances
This commit is contained in:
Zachary Boyd 2018-05-07 08:23:50 -07:00 committed by GitHub
commit 8ccbd3a1f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 5777 additions and 22 deletions

5752
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,8 @@
}, },
"scripts": { "scripts": {
"start": "bin/tor-router -s -d -j 1", "start": "bin/tor-router -s -d -j 1",
"test": "mocha test/test.js" "test": "mocha test/test.js",
"debug": "node --inspect-brk bin/tor-router"
}, },
"devDependencies": { "devDependencies": {
"mocha": "^3.2.0", "mocha": "^3.2.0",

View file

@ -6,7 +6,7 @@ const rpc = require('jrpc2');
class ControlServer { class ControlServer {
constructor(logger) { constructor(logger) {
var torPool = this.torPool = new TorPool(null, null, logger); this.torPool = this.torPool = new TorPool(null, null, logger);
this.logger = logger; this.logger = logger;
let server = this.server = new rpc.Server(); let server = this.server = new rpc.Server();
@ -15,47 +15,47 @@ class ControlServer {
server.expose('createDNSServer', this.createDNSServer.bind(this)); server.expose('createDNSServer', this.createDNSServer.bind(this));
server.expose('createHTTPServer', this.createHTTPServer.bind(this)); server.expose('createHTTPServer', this.createHTTPServer.bind(this));
server.expose('queryInstances', function () { server.expose('queryInstances', (function () {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!torPool) if (!this.torPool)
return reject({ message: 'No pool created' }); return reject({ message: 'No pool created' });
resolve(torPool.instances.map((i) => ( { dns_port: i.dns_port, socks_port: i.socks_port, process_id: i.process.pid } )) ); resolve(this.torPool.instances.map((i) => ( { dns_port: i.dns_port, socks_port: i.socks_port, process_id: i.process.pid } )) );
}); });
}); }).bind(this));
server.expose('createInstances', function (instances) { server.expose('createInstances', (function (instances) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
torPool.create(instances, (error, instances) => { this.torPool.create(instances, (error, instances) => {
if (error) reject(error); if (error) reject(error);
else resolve(); else resolve();
}); });
}); });
}); }).bind(this) );
server.expose('removeInstances', function (instances) { server.expose('removeInstances', (function (instances) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
torPool.remove(instances, (error) => { this.torPool.remove(instances, (error) => {
if (error) reject(error); if (error) reject(error);
else resolve(); else resolve();
}); });
}); });
}); }).bind(this) );
server.expose('newIps', function () { server.expose('newIps', (function() {
torPool.new_ips(); this.torPool.new_ips();
return Promise.resolve(); return Promise.resolve();
}); }).bind(this) );
server.expose('nextInstance', function () { server.expose('nextInstance', (function () {
torPool.next(); this.torPool.next();
return Promise.resolve(); return Promise.resolve();
}); }).bind(this) );
server.expose('closeInstances', function () { server.expose('closeInstances', (function () {
torPool.exit(); this.torPool.exit();
return Promise.resolve(); return Promise.resolve();
}); }).bind(this) );
} }

View file

@ -37,7 +37,9 @@ class TorPool extends EventEmitter {
this.logger = logger; this.logger = logger;
} }
get instances() { return this._instances.filter((tor) => tor.ready).slice(0); } get instances() {
return this._instances.filter((tor) => tor.ready).slice(0);
}
create_instance(callback) { create_instance(callback) {
let config = _.extend({}, this.tor_config) let config = _.extend({}, this.tor_config)