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) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.torPool.set_config_by_name(name, keyword, value, (error) => {
|
this.torPool.set_config_by_name(name, keyword, value, (error) => {
|
||||||
if (error) reject(error);
|
if (error) reject(error);
|
||||||
|
else resolve();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}).bind(this));
|
}).bind(this));
|
||||||
|
@ -177,6 +178,35 @@ class ControlServer {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.torPool.set_config_at(index, keyword, value, (error) => {
|
this.torPool.set_config_at(index, keyword, value, (error) => {
|
||||||
if (error) reject(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));
|
}).bind(this));
|
||||||
|
|
|
@ -160,7 +160,7 @@ class TorPool extends EventEmitter {
|
||||||
|
|
||||||
new_ip_at(index, callback) {
|
new_ip_at(index, callback) {
|
||||||
this.logger && this.logger.warn(`TorPool.new_ip_at is deprecated, use TorPool.new_identity_at`);
|
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 */
|
/* End Deprecated */
|
||||||
|
@ -188,6 +188,24 @@ class TorPool extends EventEmitter {
|
||||||
if (!instance) return callback && callback(new Error(`Instance at ${index} not found`));
|
if (!instance) return callback && callback(new Error(`Instance at ${index} not found`));
|
||||||
instance.set_config(keyword, value, callback);
|
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;
|
TorPool.LoadBalanceMethods = load_balance_methods;
|
||||||
|
|
|
@ -34,19 +34,6 @@ class TorProcess extends EventEmitter {
|
||||||
this.process.kill('SIGINT');
|
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() {
|
get instance_name() {
|
||||||
return (this.definition && this.definition.Name) || this.process.pid;
|
return (this.definition && this.definition.Name) || this.process.pid;
|
||||||
|
@ -69,12 +56,18 @@ class TorProcess extends EventEmitter {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Passthrough to granax */
|
/* 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) {
|
get_config(keyword, callback) {
|
||||||
if (!this.controller) {
|
if (!this.controller) {
|
||||||
return callback(new Error(`Controller is not connected`));
|
return callback(new Error(`Controller is not connected`));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.controller.getConfig(keyword, callback);
|
return this.controller.getConfig(keyword, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_config(keyword, value, callback) {
|
set_config(keyword, value, callback) {
|
||||||
|
@ -82,9 +75,26 @@ class TorProcess extends EventEmitter {
|
||||||
return callback(new Error(`Controller is not connected`));
|
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) {
|
create(callback) {
|
||||||
async.auto({
|
async.auto({
|
||||||
dnsPort: (callback) => getPort().then(port => callback(null, port)),
|
dnsPort: (callback) => getPort().then(port => callback(null, port)),
|
||||||
|
|
Loading…
Reference in a new issue