waits for a tor instance to come online before making a connection
This commit is contained in:
parent
fd1c08ff16
commit
7d0aba7d60
|
@ -9,8 +9,8 @@ class DNSServer extends UDPServer {
|
|||
|
||||
this.on('request', (req, res) => {
|
||||
for (let question of req.question) {
|
||||
let dns_port = (tor_pool.next().dns_port);
|
||||
|
||||
let connect = (tor_instance) => {
|
||||
let dns_port = (tor_instance.dns_port);
|
||||
let outbound_req = dns.Request({
|
||||
question,
|
||||
server: { address: '127.0.0.1', port: dns_port, type: 'udp' },
|
||||
|
@ -36,6 +36,15 @@ class DNSServer extends UDPServer {
|
|||
});
|
||||
|
||||
outbound_req.send();
|
||||
};
|
||||
|
||||
if (this.tor_pool.instances.length) {
|
||||
connect(this.tor_pool.next());
|
||||
}
|
||||
else {
|
||||
this.log.debug(`[dns]: a connection has been attempted, but no tor instances are live... waiting for an instance to come online`);
|
||||
this.tor_pool.once('instance_created', connect);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -12,7 +12,8 @@ class SOCKSServer extends SOCKS5Server{
|
|||
var outbound_socket;
|
||||
let buffer = [];
|
||||
|
||||
let socks_port = (tor_pool.next().socks_port);
|
||||
let connect = (tor_instance) => {
|
||||
let socks_port = tor_instance.socks_port;
|
||||
logger && logger.info(`[socks]: ${info.srcAddr}:${info.srcPort} → 127.0.0.1:${socks_port} → ${info.dstAddr}:${info.dstPort}`)
|
||||
|
||||
let onClose = (error) => {
|
||||
|
@ -67,6 +68,13 @@ class SOCKSServer extends SOCKS5Server{
|
|||
})
|
||||
});
|
||||
};
|
||||
if (tor_pool.instances.length) {
|
||||
connect(tor_pool.next());
|
||||
} else {
|
||||
logger.debug(`[socks]: a connection has been attempted, but no tor instances are live... waiting for an instance to come online`);
|
||||
tor_pool.once('instance_created', connect);
|
||||
}
|
||||
};
|
||||
|
||||
super(handleConnection);
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ class TorPool extends EventEmitter {
|
|||
this.logger = logger;
|
||||
}
|
||||
|
||||
get instances() { return this._instances.slice(0); }
|
||||
get instances() { return this._instances.filter((tor) => tor.ready).slice(0); }
|
||||
|
||||
create_instance(callback) {
|
||||
let config = _.extend({}, this.tor_config)
|
||||
|
@ -48,6 +48,7 @@ class TorPool extends EventEmitter {
|
|||
|
||||
instance.once('error', callback)
|
||||
instance.once('ready', () => {
|
||||
this.emit('instance_created', instance);
|
||||
callback && callback(null, instance);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -31,6 +31,7 @@ class TorProcess extends EventEmitter {
|
|||
}
|
||||
|
||||
new_ip() {
|
||||
this.log.info(`[tor-${this.process.pid}]: has requested a new identity`);
|
||||
this.process.kill('SIGHUP');
|
||||
}
|
||||
|
||||
|
@ -82,6 +83,7 @@ class TorProcess extends EventEmitter {
|
|||
});
|
||||
|
||||
this.once('ready', () => {
|
||||
this.ready = true;
|
||||
this.logger && this.logger.info(`[tor-${tor.pid}]: tor is ready`);
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in a new issue