| 27 | @PluginManager.acceptPlugins |
| 28 | class TorManager(object): |
| 29 | def __init__(self, fileserver_ip=None, fileserver_port=None): |
| 30 | self.privatekeys = {} # Onion: Privatekey |
| 31 | self.site_onions = {} # Site address: Onion |
| 32 | self.tor_exe = "tools/tor/tor.exe" |
| 33 | self.has_meek_bridges = os.path.isfile("tools/tor/PluggableTransports/meek-client.exe") |
| 34 | self.tor_process = None |
| 35 | self.log = logging.getLogger("TorManager") |
| 36 | self.start_onions = None |
| 37 | self.conn = None |
| 38 | self.lock = RLock() |
| 39 | self.starting = True |
| 40 | self.connecting = True |
| 41 | self.event_started = gevent.event.AsyncResult() |
| 42 | |
| 43 | if config.tor == "disable": |
| 44 | self.enabled = False |
| 45 | self.start_onions = False |
| 46 | self.setStatus("Disabled") |
| 47 | else: |
| 48 | self.enabled = True |
| 49 | self.setStatus("Waiting") |
| 50 | |
| 51 | if fileserver_port: |
| 52 | self.fileserver_port = fileserver_port |
| 53 | else: |
| 54 | self.fileserver_port = config.fileserver_port |
| 55 | |
| 56 | self.ip, self.port = config.tor_controller.rsplit(":", 1) |
| 57 | self.port = int(self.port) |
| 58 | |
| 59 | self.proxy_ip, self.proxy_port = config.tor_proxy.rsplit(":", 1) |
| 60 | self.proxy_port = int(self.proxy_port) |
| 61 | |
| 62 | def start(self): |
| 63 | self.log.debug("Starting (Tor: %s)" % config.tor) |