commit b5d3fb4fc8d1d2edb9c48a7a6d9996f7b37912b9 Author: juga0 <j...@riseup.net> Date: Tue Jul 3 08:26:40 2018 +0000
Remove is_controller_ok and log exceptions --- sbws/core/scanner.py | 1 - sbws/lib/circuitbuilder.py | 32 ++++++++++++--------- sbws/lib/relaylist.py | 21 +++++++++----- sbws/util/stem.py | 57 +++++++++++++++++++++---------------- tests/integration/util/test_stem.py | 1 - 5 files changed, 66 insertions(+), 46 deletions(-) diff --git a/sbws/core/scanner.py b/sbws/core/scanner.py index 249d8d4..5bcf276 100644 --- a/sbws/core/scanner.py +++ b/sbws/core/scanner.py @@ -347,7 +347,6 @@ def run_speedtest(args, conf): 'exists for sbws developers. It is expected to be broken and may ' 'even lead to messed up results.', conf['tor']['control_socket']) time.sleep(15) - assert stem_utils.is_controller_okay(controller) rl = RelayList(args, conf, controller) cb = CB(args, conf, controller, rl) rd = ResultDump(args, conf, end_event) diff --git a/sbws/lib/circuitbuilder.py b/sbws/lib/circuitbuilder.py index d55b929..b8d4db7 100644 --- a/sbws/lib/circuitbuilder.py +++ b/sbws/lib/circuitbuilder.py @@ -1,7 +1,6 @@ from stem import CircuitExtensionFailed, InvalidRequest, ProtocolError, Timeout from stem import InvalidArguments import random -import sbws.util.stem as stem_utils from .relaylist import Relay import logging @@ -59,28 +58,30 @@ class CircuitBuilder: def get_circuit_path(self, circ_id): c = self.controller - assert stem_utils.is_controller_okay(c) - circ = c.get_circuit(circ_id, default=None) - if circ is None: - return None - return [relay[0] for relay in circ.path] + try: + circ = c.get_circuit(circ_id, default=None) + except Exception as e: + log.exception("Exception trying to get circuit: %s.", e) + else: + return [relay[0] for relay in circ.path] + return None def close_circuit(self, circ_id): c = self.controller - if not stem_utils.is_controller_okay(c): - return - if c.get_circuit(circ_id, default=None): + try: + c.get_circuit(circ_id, default=None) try: c.close_circuit(circ_id) except InvalidArguments: pass self.built_circuits.discard(circ_id) + except Exception as e: + log.exception("Error trying to get circuit to close it: %s.", e) def _build_circuit_impl(self, path): if not valid_circuit_length(path): raise PathLengthException() c = self.controller - assert stem_utils.is_controller_okay(c) timeout = self.circuit_timeout fp_path = '[' + ' -> '.join([p[0:8] for p in path]) + ']' log.debug('Building %s', fp_path) @@ -92,6 +93,9 @@ class CircuitBuilder: ProtocolError, Timeout) as e: log.warning(e) continue + except Exception as e: + log.exception("Exception trying to build circuit: %s.", e) + continue else: return circ_id return None @@ -100,14 +104,16 @@ class CircuitBuilder: c = self.controller if not self.close_circuits_on_exit: return - if not stem_utils.is_controller_okay(c): - return for circ_id in self.built_circuits: - if c.get_circuit(circ_id, default=None): + try: + c.get_circuit(circ_id, default=None) try: c.close_circuit(circ_id) except InvalidArguments: pass + except Exception as e: + log.exception("Exception trying to get circuit to delete: %s", + e) self.built_circuits.clear() diff --git a/sbws/lib/relaylist.py b/sbws/lib/relaylist.py index 11390de..bafd7b7 100644 --- a/sbws/lib/relaylist.py +++ b/sbws/lib/relaylist.py @@ -1,6 +1,5 @@ from stem.descriptor.router_status_entry import RouterStatusEntryV3 from stem.descriptor.server_descriptor import ServerDescriptor -import sbws.util.stem as stem_utils from stem import Flag from stem.util.connection import is_valid_ipv4_address from stem.util.connection import is_valid_ipv6_address @@ -25,17 +24,22 @@ class Relay: ''' assert isinstance(fp, str) assert len(fp) == 40 - assert stem_utils.is_controller_okay(cont) if ns is not None: assert isinstance(ns, RouterStatusEntryV3) self._ns = ns else: - self._ns = cont.get_network_status(fp, default=None) + try: + self._ns = cont.get_network_status(fp, default=None) + except Exception as e: + log.exception("Exception trying to get ns %s", e) if desc is not None: assert isinstance(desc, ServerDescriptor) self._desc = desc else: - self._desc = cont.get_server_descriptor(fp, default=None) + try: + self._desc = cont.get_server_descriptor(fp, default=None) + except Exception as e: + log.exception("Exception trying to get ns %s", e) def _from_desc(self, attr): if not self._desc: @@ -190,9 +194,12 @@ class RelayList: def _init_relays(self): c = self._controller - assert stem_utils.is_controller_okay(c) - relays = [Relay(ns.fingerprint, c, ns=ns) - for ns in c.get_network_statuses()] + try: + relays = [Relay(ns.fingerprint, c, ns=ns) + for ns in c.get_network_statuses()] + except Exception as e: + log.exception("Exception trying to init relays %s", e) + return [] return relays def _refresh(self): diff --git a/sbws/util/stem.py b/sbws/util/stem.py index 8a92673..54779fd 100644 --- a/sbws/util/stem.py +++ b/sbws/util/stem.py @@ -17,7 +17,6 @@ stream_building_lock = RLock() def attach_stream_to_circuit_listener(controller, circ_id): ''' Returns a function that should be given to add_event_listener(). It looks for newly created streams and attaches them to the given circ_id ''' - assert is_controller_okay(controller) def closure_stream_event_listener(st): if st.status == 'NEW' and st.purpose == 'USER': @@ -28,21 +27,25 @@ def attach_stream_to_circuit_listener(controller, circ_id): except (UnsatisfiableRequest, InvalidRequest) as e: log.warning('Couldn\'t attach stream to circ %s: %s', circ_id, e) + except Exception as e: + log.exception("Exception trying to get ns %s", e) else: pass return closure_stream_event_listener def add_event_listener(controller, func, event): - assert is_controller_okay(controller) - controller.add_event_listener(func, event) + try: + controller.add_event_listener(func, event) + except Exception as e: + log.exception("Exception trying to add event listener %s", e) def remove_event_listener(controller, func): - if not is_controller_okay(controller): - log.warning('Controller not okay so not trying to remove event') - return - controller.remove_event_listener(func) + try: + controller.remove_event_listener(func) + except Exception as e: + log.exception("Exception trying to remove event %s", e) def init_controller(port=None, path=None, set_custom_stream_settings=True): @@ -72,9 +75,11 @@ def init_controller(port=None, path=None, set_custom_stream_settings=True): def is_bootstrapped(c): - if not is_controller_okay(c): + try: + line = c.get_info('status/bootstrap-phase') + except Exception as e: + log.exception("Exception bootstrapping %s", e) return False - line = c.get_info('status/bootstrap-phase') state, _, progress, *_ = line.split() progress = int(progress.split('=')[1]) if state == 'NOTICE' and progress == 100: @@ -83,12 +88,6 @@ def is_bootstrapped(c): return False -def is_controller_okay(c): - if not c: - return False - return c.is_alive() and c.is_authenticated() - - def _init_controller_port(port): assert isinstance(port, int) try: @@ -106,6 +105,10 @@ def _init_controller_socket(socket): c = Controller.from_socket_file(path=socket) c.authenticate() except (IncorrectSocketType, SocketError): + log.debug("Error initting controller socket: socket error.") + return None + except Exception as e: + log.exception("Error initting controller socket: %s", e) return None # TODO: Allow for auth via more than just CookieAuthentication return c @@ -182,21 +185,26 @@ def launch_tor(conf): torrc, init_msg_handler=log.debug, take_ownership=True) # And return a controller to it cont = _init_controller_socket(conf['tor']['control_socket']) - assert is_controller_okay(cont) # Because we build things by hand and can't set these before Tor bootstraps cont.set_conf('__DisablePredictedCircuits', '1') cont.set_conf('__LeaveStreamsUnattached', '1') - log.info('Started and connected to Tor %s via %s', cont.get_version(), - conf['tor']['control_socket']) - return cont + try: + log.info('Started and connected to Tor %s via %s', cont.get_version(), + conf['tor']['control_socket']) + return cont + except Exception as e: + log.exception("Exception trying to launch tor %s", e) def get_socks_info(controller): ''' Returns the first SocksPort Tor is configured to listen on, in the form of an (address, port) tuple ''' - assert is_controller_okay(controller) - socks_ports = controller.get_listeners(Listener.SOCKS) - return socks_ports[0] + try: + socks_ports = controller.get_listeners(Listener.SOCKS) + return socks_ports[0] + except Exception as e: + log.exception("Exception trying to get socks info: %e.", e) + exit(1) def only_relays_with_bandwidth(controller, relays, min_bw=None, max_bw=None): @@ -206,7 +214,6 @@ def only_relays_with_bandwidth(controller, relays, min_bw=None, max_bw=None): min_bw nor max_bw are given, essentially just returns the input list of relays. ''' - assert is_controller_okay(controller) assert min_bw is None or min_bw >= 0 assert max_bw is None or max_bw >= 0 ret = [] @@ -221,7 +228,6 @@ def only_relays_with_bandwidth(controller, relays, min_bw=None, max_bw=None): def circuit_str(controller, circ_id): - assert is_controller_okay(controller) assert isinstance(circ_id, str) int(circ_id) try: @@ -230,6 +236,9 @@ def circuit_str(controller, circ_id): log.warning('Circuit %s no longer seems to exist so can\'t return ' 'a valid circuit string for it: %s', circ_id, e) return None + except Exception as e: + log.exception("Exception trying to get circuit string %s", e) + return None return '[' +\ ' -> '.join(['{} ({})'.format(n, fp[0:8]) for fp, n in circ.path]) +\ ']' diff --git a/tests/integration/util/test_stem.py b/tests/integration/util/test_stem.py index 203cf5d..291f485 100644 --- a/tests/integration/util/test_stem.py +++ b/tests/integration/util/test_stem.py @@ -3,5 +3,4 @@ import sbws.util.stem as stem_utils def test_launch_and_okay(persistent_launch_tor): cont = persistent_launch_tor - assert stem_utils.is_controller_okay(cont) assert stem_utils.is_bootstrapped(cont) _______________________________________________ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits