def start_tor(config):
"""
Launches tor with random TCP ports chosen for SocksPort and ControlPort,
and other options specified by a txtorcon.torconfig.TorConfig instance.
Returns a deferred that calls back with a txtorcon.torstate.TorState
instance.
"""
def get_random_tor_ports():
d2 = available_tcp_port(reactor)
d2.addCallback(lambda port: config.__setattr__('SocksPort', port))
d2.addCallback(lambda _: available_tcp_port(reactor))
d2.addCallback(lambda port: config.__setattr__('ControlPort', port))
return d2
def launch_and_get_state(ignore):
d2 = launch_tor(config, reactor, stdout=sys.stdout)
d2.addCallback(lambda tpp: TorState(tpp.tor_protocol).post_bootstrap)
return d2
return get_random_tor_ports().addCallback(launch_and_get_state)
评论列表
文章目录