def test_full_tor_connection(self): config = txtorcon.TorConfig() config.ControlPort = net.randomFreePort() config.SocksPort = net.randomFreePort() config.DataDirectory = self.tor_datadir log.msg("Connecting to tor %s" % (onion.tor_details['version'])) config.log = ['notice stdout', 'notice file %s' % self.tor_logfile] config.save() def updates(prog, tag, summary): log.msg("Progress is at: %s%%" % (prog)) self.report['tor_progress'] = int(prog) self.report['tor_progress_tag'] = tag self.report['tor_progress_summary'] = summary d = txtorcon.launch_tor(config, reactor, tor_binary=onion.find_tor_binary(), timeout=self.timeout, progress_updates=updates) @d.addCallback def setup_complete(proto): try: proto.transport.signalProcess('TERM') except error.ProcessExitedAlready: proto.transport.loseConnection() log.msg("Successfully connected to Tor") self.report['success'] = True @d.addErrback def setup_failed(failure): log.msg("Failed to connect to Tor") self.report['success'] = False self.report['error'] = 'timeout-reached' return @d.addCallback def write_log(_): with open(self.tor_logfile) as f: self.report['tor_log'] = f.read() os.remove(self.tor_logfile) try: shutil.rmtree(self.tor_datadir) except: pass return d
def test_full_tor_connection(self): config = txtorcon.TorConfig() config.ControlPort = net.randomFreePort() config.SocksPort = net.randomFreePort() config.DataDirectory = self.tor_datadir log.msg( "Connecting to tor %s" % (onion.tor_details['version'])) config.log = ['notice stdout', 'notice file %s' % self.tor_logfile] config.save() def updates(prog, tag, summary): log.msg("Progress is at: %s%%" % (prog)) self.report['tor_progress'] = int(prog) self.report['tor_progress_tag'] = tag self.report['tor_progress_summary'] = summary d = txtorcon.launch_tor(config, reactor, tor_binary=onion.find_tor_binary(), timeout=self.timeout, progress_updates=updates) @d.addCallback def setup_complete(proto): try: proto.transport.signalProcess('TERM') except error.ProcessExitedAlready: proto.transport.loseConnection() log.msg("Successfully connected to Tor") self.report['success'] = True @d.addErrback def setup_failed(failure): log.msg("Failed to connect to Tor") self.report['success'] = False self.report['error'] = 'timeout-reached' return @d.addCallback def write_log(_): with open(self.tor_logfile) as f: self.report['tor_log'] = f.read() os.remove(self.tor_logfile) try: shutil.rmtree(self.tor_datadir) except: pass return d
def requirements(self): if not onion.find_tor_binary(): raise TorIsNotInstalled( "For instructions on installing Tor see: " "https://www.torproject.org/download/download")
def test_full_tor_connection(self): config = txtorcon.TorConfig() config.ControlPort = random.randint(2**14, 2**16) config.SocksPort = random.randint(2**14, 2**16) config.DataDirectory = self.tor_datadir log.msg( "Connecting to %s with tor %s" % (self.bridge, self.tor_details['version'])) transport_name = onion.transport_name(self.bridge) if transport_name == None: self.report['bridge_address'] = self.bridge.split(' ')[0] else: self.report['bridge_address'] = self.bridge.split(' ')[1] self.report['transport_name'] = transport_name try: config.ClientTransportPlugin = \ onion.bridge_line(transport_name, self.obfsproxy_logfile) except onion.UnrecognizedTransport: log.err("Unable to test bridge because we don't recognize " "the %s transport" % transport_name) self.report['error'] = "unrecognized-transport" return except onion.UninstalledTransport: bin_name = onion.transport_bin_name.get(transport_name) log.err("Unable to test bridge because %s is not installed" % bin_name) self.report['error'] = "missing-%s" % bin_name return except onion.OutdatedObfsproxy: log.err("The obfsproxy version you are using " \ "appears to be outdated.") self.report['error'] = 'old-obfsproxy' return except onion.OutdatedTor: log.err("Unsupported Tor version.") self.report['error'] = 'unsupported-tor-version' return log.debug("Using ClientTransportPlugin '%s'" % \ config.ClientTransportPlugin) config.Bridge = self.bridge config.UseBridges = 1 config.log = ['notice stdout', 'notice file %s' % self.tor_logfile] config.save() def updates(prog, tag, summary): log.msg("%s: %s%%" % (self.bridge, prog)) self.report['tor_progress'] = int(prog) self.report['tor_progress_tag'] = tag self.report['tor_progress_summary'] = summary d = txtorcon.launch_tor(config, reactor, tor_binary=onion.find_tor_binary(), timeout=self.timeout, progress_updates=updates) @d.addCallback def setup_complete(proto): try: proto.transport.signalProcess('TERM') except error.ProcessExitedAlready: proto.transport.loseConnection() log.msg("Successfully connected to %s" % self.bridge) self.report['success'] = True @d.addErrback def setup_failed(failure): log.msg("Failed to connect to %s" % self.bridge) self.report['success'] = False self.report['error'] = 'timeout-reached' return @d.addCallback def write_log(_): with open(self.tor_logfile) as f: self.report['tor_log'] = f.read() os.remove(self.tor_logfile) with open(self.obfsproxy_logfile) as f: self.report['obfsproxy_log'] = f.read() os.remove(self.obfsproxy_logfile) try: with open(os.path.join(self.tor_datadir, 'pt_state', 'obfs4proxy.log')) as f: self.report['obfsproxy_log'] = f.read() except: pass finally: shutil.rmtree(self.tor_datadir) return d