Allows signals to be sent to Tor instances using the control protocol from the rpc interface
This commit is contained in:
parent
48373e3c71
commit
1273316e7d
|
@ -169,6 +169,7 @@ class ControlServer {
|
|||
return new Promise((resolve, reject) => {
|
||||
this.torPool.set_config_by_name(name, keyword, value, (error) => {
|
||||
if (error) reject(error);
|
||||
else resolve();
|
||||
});
|
||||
});
|
||||
}).bind(this));
|
||||
|
@ -177,6 +178,35 @@ class ControlServer {
|
|||
return new Promise((resolve, reject) => {
|
||||
this.torPool.set_config_at(index, keyword, value, (error) => {
|
||||
if (error) reject(error);
|
||||
else resolve();
|
||||
});
|
||||
});
|
||||
}).bind(this));
|
||||
|
||||
|
||||
server.expose('signalAllInstances', (function (signal) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.torPool.signal_all(signal, (error) => {
|
||||
if (error) reject(error);
|
||||
else resolve();
|
||||
});
|
||||
});
|
||||
}).bind(this));
|
||||
|
||||
server.expose('signalInstanceAt', (function (index, signal, callback) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.torPool.signal_at(index, signal, (error) => {
|
||||
if (error) reject(error);
|
||||
else resolve();
|
||||
});
|
||||
});
|
||||
}).bind(this));
|
||||
|
||||
server.expose('signalInstanceByName', (function (name, signal, callback) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.torPool.signal_by_name(name, signal, (error) => {
|
||||
if (error) reject(error);
|
||||
else resolve();
|
||||
});
|
||||
});
|
||||
}).bind(this));
|
||||
|
|
|
@ -160,7 +160,7 @@ class TorPool extends EventEmitter {
|
|||
|
||||
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);
|
||||
return this.new_identity_at(index, callback);
|
||||
}
|
||||
|
||||
/* End Deprecated */
|
||||
|
@ -188,6 +188,24 @@ class TorPool extends EventEmitter {
|
|||
if (!instance) return callback && callback(new Error(`Instance at ${index} not found`));
|
||||
instance.set_config(keyword, value, callback);
|
||||
}
|
||||
|
||||
signal_all(signal, callback) {
|
||||
async.each(this.instances, (instance, next) => {
|
||||
instance.signal(signal, callback);
|
||||
}, callback);
|
||||
}
|
||||
|
||||
signal_by_name(name, signal, callback) {
|
||||
let instance = this.instance_by_name(name);
|
||||
if (!instance) return callback && callback(new Error(`Instance "${name}" not found`));
|
||||
instance.signal(signal, callback);
|
||||
}
|
||||
|
||||
signal_at(index, signal, callback) {
|
||||
let instance = this.instances[index];
|
||||
if (!instance) return callback && callback(new Error(`Instance at ${index} not found`));
|
||||
instance.signal(signal, callback);
|
||||
}
|
||||
};
|
||||
|
||||
TorPool.LoadBalanceMethods = load_balance_methods;
|
||||
|
|
|
@ -34,19 +34,6 @@ class TorProcess extends EventEmitter {
|
|||
this.process.kill('SIGINT');
|
||||
}
|
||||
|
||||
/* 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() {
|
||||
return (this.definition && this.definition.Name) || this.process.pid;
|
||||
|
@ -69,12 +56,18 @@ class TorProcess extends EventEmitter {
|
|||
}
|
||||
|
||||
/* Passthrough to granax */
|
||||
|
||||
new_identity(callback) {
|
||||
this.logger.info(`[tor-${this.instance_name}]: requested a new identity`);
|
||||
this.controller.cleanCircuits(callback || (() => {}));
|
||||
}
|
||||
|
||||
get_config(keyword, callback) {
|
||||
if (!this.controller) {
|
||||
return callback(new Error(`Controller is not connected`));
|
||||
}
|
||||
|
||||
this.controller.getConfig(keyword, callback);
|
||||
return this.controller.getConfig(keyword, callback);
|
||||
}
|
||||
|
||||
set_config(keyword, value, callback) {
|
||||
|
@ -82,9 +75,26 @@ class TorProcess extends EventEmitter {
|
|||
return callback(new Error(`Controller is not connected`));
|
||||
}
|
||||
|
||||
this.controller.setConfig(keyword, value, callback);
|
||||
return this.controller.setConfig(keyword, value, callback);
|
||||
}
|
||||
|
||||
signal(signal, callback) {
|
||||
if (!this.controller) {
|
||||
return callback(new Error(`Controller is not connected`));
|
||||
}
|
||||
|
||||
return this.controller.signal(signal, callback);
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
|
||||
create(callback) {
|
||||
async.auto({
|
||||
dnsPort: (callback) => getPort().then(port => callback(null, port)),
|
||||
|
|
Loading…
Reference in a new issue