Uses the Control Protocol to request a new identity. Replaces 'new_ip' with 'new_identity' and deprecates 'new_ip'

This commit is contained in:
Zachary Boyd 2018-05-10 21:44:30 -07:00
parent 4bc4c15dd7
commit 5f8fde9039
4 changed files with 76 additions and 19 deletions

View file

@ -93,10 +93,10 @@ A JSON-RPC 2 TCP Server will listen on port 9077 by default. Using the rpc serve
Example (in node):
```
var net = require('net');
const net = require('net');
const client = net.createConnection({ port: 9077 }, () => {
var rpcRequest = {
let client = net.createConnection({ port: 9077 }, () => {
let rpcRequest = {
"method": "createInstances",
"params": [3],
"jsonrpc":"2.0",
@ -106,8 +106,8 @@ Example (in node):
});
client.on('data', (chunk) => {
var rawResponse = chunk.toString('utf8');
var rpcResponse = JSON.parse(rawResponse);
let rawResponse = chunk.toString('utf8');
let rpcResponse = JSON.parse(rawResponse);
console.log(rpcResponse)
if (rpcResponse.id === 1) {
console.log('Three instances have been created!')

View file

@ -61,15 +61,45 @@ class ControlServer {
});
}).bind(this) );
server.expose('newIdentites', (function() {
return new Promise((resolve, reject) => {
this.torPool.new_identites((error) => {
if (error) reject(error);
else resolve();
});
});
}).bind(this));
server.expose('newIdentityAt', (function(index) {
return new Promise((resolve, reject) => {
this.torPool.new_identity_at(index, (error) => {
if (error) reject(error);
else resolve();
});
});
}).bind(this));
/* Begin Deprecated */
server.expose('newIps', (function() {
this.torPool.new_ips();
return Promise.resolve();
}).bind(this) );
return new Promise((resolve, reject) => {
this.torPool.new_ips((error) => {
if (error) reject(error);
else resolve();
});
});
}).bind(this));
server.expose('newIpAt', (function(index) {
this.torPool.new_ip_at(index);
return Promise.resolve();
}).bind(this) );
return new Promise((resolve, reject) => {
this.torPool.new_ip_at(index, (error) => {
if (error) reject(error);
else resolve();
});
});
}).bind(this));
/* End Deprecated */
server.expose('nextInstance', (function () {
this.torPool.next();

View file

@ -124,13 +124,31 @@ class TorPool extends EventEmitter {
});
}
new_ips() {
this.instances.forEach((tor) => tor.new_ip());
new_identites(callback) {
async.each(this.instances, (tor, next) => {
tor.new_identity(next);
}, (error) => {
callback && callback(error);
});
}
new_ip_at(index) {
this.instances[index].new_ip();
new_identity_at(index, callback) {
this.instances[index].new_identity(callback);
}
/* Begin Deprecated */
new_ips(callback) {
this.logger && this.logger.warn(`TorPool.new_ips is deprecated, use TorPool.new_identites`);
return this.new_identites(callback);
}
new_ip_at(index, callback) {
this.logger && this.logger.warn(`TorPool.new_ip_at is deprecated, use TorPool.new_identity_at`);
return this.new_identity_at(inde, callback);
}
/* End Deprecated */
};
TorPool.LoadBalanceMethods = load_balance_methods;

View file

@ -34,9 +34,18 @@ class TorProcess extends EventEmitter {
this.process.kill('SIGINT');
}
new_ip() {
this.logger.info(`[tor-${this.instance_name}]: has requested a new identity`);
this.process.kill('SIGHUP');
/* Begin Deprecated */
new_ip(callback) {
this.logger && this.logger.warn(`TorProcess.new_ip is deprecated, use TorProcess.new_identity`);
return this.new_identity(callback);
}
/* End Deprecated */
new_identity(callback) {
this.logger.info(`[tor-${this.instance_name}]: requested a new identity`);
this.controller.cleanCircuits(callback || (() => {}));
}
get instance_name() {
@ -56,7 +65,7 @@ class TorProcess extends EventEmitter {
}
get controller() {
return this._controller;
return this._controller || null;
}
create(callback) {