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": {
"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": {
"mocha": "^3.2.0",

View file

@ -6,7 +6,7 @@ const rpc = require('jrpc2');
class ControlServer {
constructor(logger) {
var torPool = this.torPool = new TorPool(null, null, logger);
this.torPool = this.torPool = new TorPool(null, null, logger);
this.logger = logger;
let server = this.server = new rpc.Server();
@ -15,47 +15,47 @@ class ControlServer {
server.expose('createDNSServer', this.createDNSServer.bind(this));
server.expose('createHTTPServer', this.createHTTPServer.bind(this));
server.expose('queryInstances', function () {
server.expose('queryInstances', (function () {
return new Promise((resolve, reject) => {
if (!torPool)
if (!this.torPool)
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) => {
torPool.create(instances, (error, instances) => {
this.torPool.create(instances, (error, instances) => {
if (error) reject(error);
else resolve();
});
});
});
}).bind(this) );
server.expose('removeInstances', function (instances) {
server.expose('removeInstances', (function (instances) {
return new Promise((resolve, reject) => {
torPool.remove(instances, (error) => {
this.torPool.remove(instances, (error) => {
if (error) reject(error);
else resolve();
});
});
});
}).bind(this) );
server.expose('newIps', function () {
torPool.new_ips();
server.expose('newIps', (function() {
this.torPool.new_ips();
return Promise.resolve();
});
}).bind(this) );
server.expose('nextInstance', function () {
torPool.next();
server.expose('nextInstance', (function () {
this.torPool.next();
return Promise.resolve();
});
}).bind(this) );
server.expose('closeInstances', function () {
torPool.exit();
server.expose('closeInstances', (function () {
this.torPool.exit();
return Promise.resolve();
});
}).bind(this) );
}

View file

@ -37,7 +37,9 @@ class TorPool extends EventEmitter {
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) {
let config = _.extend({}, this.tor_config)