def experiment(self, args): log.msg("Doing test") # What you return here gets handed as input to control from ooni.lib.txtorcon import TorProtocolFactory, TorConfig, TorState from ooni.lib.txtorcon import DEFAULT_VALUE, launch_tor def updates(prog, tag, summary): log.msg("%d%%: %s" % (prog, summary)) return def setup_failed(args): log.msg("Setup Failed.") report.update({'failed': args}) return report def setup_complete(proto): log.msg("Setup Complete.") report.update({'success': args}) return report config = TorConfig() import random config.SocksPort = random.randint(1024, 2**16) config.ControlPort = random.randint(1024, 2**16) if 'bridge' in args: config.UseBridges = 1 config.Bridge = args['bridge'] config.save() print config.create_torrc() report = {'tor_config': config.config} log.msg("Starting Tor") d = launch_tor(config, self.reactor, progress_updates=updates) d.addCallback(setup_complete) d.addErrback(setup_failed) return d