From 3fd7b55de96484e02accb991fb2c0c3ce0aa9883 Mon Sep 17 00:00:00 2001 From: antialias Date: Tue, 25 Sep 2012 17:37:48 -0400 Subject: First check for threaded network checks. TODO: tests. --- src/leap/baseapp/network.py | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/leap/baseapp/network.py (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py new file mode 100644 index 00000000..42a42fcd --- /dev/null +++ b/src/leap/baseapp/network.py @@ -0,0 +1,56 @@ +from __future__ import print_function +import logging +import time +logger = logging.getLogger(name=__name__) + +from leap.base.network import NetworkChecker +from leap.baseapp.dialogs import ErrorDialog + + +class NetworkCheckerAppMixin(object): + """ + initialize an instance of the Network Checker, + which gathers error and passes them on. + """ + + def __init__(self, *args, **kwargs): + opts = kwargs.pop('opts', None) + config_file = getattr(opts, 'config_file', None) + + self.network_checker_started = False + + self.network_checker = NetworkChecker( + watcher_cb=self.newLogLine.emit, + status_signals=(self.statusChange.emit, ), + debug=self.debugmode) + + self.network_checker.run_checks() + self.error_check() + + def error_check(self): + """ + consumes the conductor error queue. + pops errors, and acts accordingly (launching user dialogs). + """ + logger.debug('error check') + + errq = self.conductor.error_queue + while errq.qsize() != 0: + logger.debug('%s errors left in conductor queue', errq.qsize()) + # we get exception and original traceback from queue + error, tb = errq.get() + + # redundant log, debugging the loop. + logger.error('%s: %s', error.__class__.__name__, error.message) + + if issubclass(error.__class__, eip_exceptions.EIPClientError): + self.handle_eip_error(error) + + else: + # deprecated form of raising exception. + raise error, None, tb + + if error.failfirst is True: + break + + -- cgit v1.2.3 From 58344bb28c1c0f25ed37624ff487cc8f24821d52 Mon Sep 17 00:00:00 2001 From: antialias Date: Fri, 28 Sep 2012 18:16:47 -0400 Subject: Functionality to shutdown network checker when openvpn is stopped. But thread not being successfully killed. --- src/leap/baseapp/network.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index 42a42fcd..75690cc9 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -36,7 +36,7 @@ class NetworkCheckerAppMixin(object): errq = self.conductor.error_queue while errq.qsize() != 0: - logger.debug('%s errors left in conductor queue', errq.qsize()) + logger.debug('%s errors left in network queue', errq.qsize()) # we get exception and original traceback from queue error, tb = errq.get() @@ -44,7 +44,7 @@ class NetworkCheckerAppMixin(object): logger.error('%s: %s', error.__class__.__name__, error.message) if issubclass(error.__class__, eip_exceptions.EIPClientError): - self.handle_eip_error(error) + self.handle_network_error(error) else: # deprecated form of raising exception. @@ -53,4 +53,5 @@ class NetworkCheckerAppMixin(object): if error.failfirst is True: break - + def handle_network_error(self, error): + pass -- cgit v1.2.3 From 95ce59c8833cb2ba951630080cdbc1e6d756a666 Mon Sep 17 00:00:00 2001 From: antialias Date: Mon, 1 Oct 2012 15:10:55 -0400 Subject: Still some QT related problems. Hand off to kali to fix. --- src/leap/baseapp/network.py | 36 +----------------------------------- 1 file changed, 1 insertion(+), 35 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index 75690cc9..c73e8062 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -14,44 +14,10 @@ class NetworkCheckerAppMixin(object): """ def __init__(self, *args, **kwargs): - opts = kwargs.pop('opts', None) - config_file = getattr(opts, 'config_file', None) - - self.network_checker_started = False - self.network_checker = NetworkChecker( watcher_cb=self.newLogLine.emit, - status_signals=(self.statusChange.emit, ), + error_cb=self.handle_network_error, debug=self.debugmode) self.network_checker.run_checks() - self.error_check() - - def error_check(self): - """ - consumes the conductor error queue. - pops errors, and acts accordingly (launching user dialogs). - """ - logger.debug('error check') - - errq = self.conductor.error_queue - while errq.qsize() != 0: - logger.debug('%s errors left in network queue', errq.qsize()) - # we get exception and original traceback from queue - error, tb = errq.get() - - # redundant log, debugging the loop. - logger.error('%s: %s', error.__class__.__name__, error.message) - - if issubclass(error.__class__, eip_exceptions.EIPClientError): - self.handle_network_error(error) - - else: - # deprecated form of raising exception. - raise error, None, tb - - if error.failfirst is True: - break - def handle_network_error(self, error): - pass -- cgit v1.2.3 From 31c0afa5eb9bc7566ca39099520e8adc7b531e22 Mon Sep 17 00:00:00 2001 From: kali Date: Fri, 5 Oct 2012 20:15:12 +0900 Subject: pep8 --- src/leap/baseapp/network.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index c73e8062..f1859c7a 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -1,10 +1,10 @@ from __future__ import print_function + import logging -import time logger = logging.getLogger(name=__name__) from leap.base.network import NetworkChecker -from leap.baseapp.dialogs import ErrorDialog +#from leap.baseapp.dialogs import ErrorDialog class NetworkCheckerAppMixin(object): @@ -20,4 +20,3 @@ class NetworkCheckerAppMixin(object): debug=self.debugmode) self.network_checker.run_checks() - -- cgit v1.2.3 From 1cbf954d9eda71cabfa58811c09bc63cfe9465d5 Mon Sep 17 00:00:00 2001 From: kali Date: Fri, 5 Oct 2012 21:21:22 +0900 Subject: add comments to netchecks --- src/leap/baseapp/network.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index f1859c7a..fbf9376f 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -3,7 +3,7 @@ from __future__ import print_function import logging logger = logging.getLogger(name=__name__) -from leap.base.network import NetworkChecker +from leap.base.network import NetworkCheckerThread #from leap.baseapp.dialogs import ErrorDialog @@ -14,9 +14,12 @@ class NetworkCheckerAppMixin(object): """ def __init__(self, *args, **kwargs): - self.network_checker = NetworkChecker( + self.network_checker = NetworkCheckerThread( + # XXX watcher? remove ----- watcher_cb=self.newLogLine.emit, - error_cb=self.handle_network_error, + # XXX what callback? ------ + error_cb=None, debug=self.debugmode) + # XXX move run_checks to slot self.network_checker.run_checks() -- cgit v1.2.3 From 6728eb9afb21bad867e4052a6190a9bdb34c928a Mon Sep 17 00:00:00 2001 From: kali Date: Mon, 8 Oct 2012 07:50:24 +0900 Subject: popup dialog error when network error happens we are shutting down for now. we should be acting upon failures in the near future. lowered the recurrent checks interval to 10 seconds. --- src/leap/baseapp/network.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index fbf9376f..077d5164 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -1,10 +1,13 @@ from __future__ import print_function import logging + logger = logging.getLogger(name=__name__) +from PyQt4 import QtCore + +from leap.baseapp.dialogs import ErrorDialog from leap.base.network import NetworkCheckerThread -#from leap.baseapp.dialogs import ErrorDialog class NetworkCheckerAppMixin(object): @@ -15,11 +18,23 @@ class NetworkCheckerAppMixin(object): def __init__(self, *args, **kwargs): self.network_checker = NetworkCheckerThread( - # XXX watcher? remove ----- - watcher_cb=self.newLogLine.emit, - # XXX what callback? ------ - error_cb=None, + error_cb=self.networkError.emit, debug=self.debugmode) # XXX move run_checks to slot self.network_checker.run_checks() + + @QtCore.pyqtSlot(object) + def onNetworkError(self, exc): + """ + slot that receives a network exceptions + and raises a user error message + """ + logger.debug('handling network exception') + logger.error(exc.message) + dialog = ErrorDialog(parent=self) + + if exc.critical: + dialog.criticalMessage(exc.usermessage, "network error") + else: + dialog.warningMessage(exc.usermessage, "network error") -- cgit v1.2.3 From 53fa2c134ab2c96376276aa1c0ed74db0aaba218 Mon Sep 17 00:00:00 2001 From: kali Date: Mon, 10 Dec 2012 23:20:09 +0900 Subject: get cipher config from eip-service --- src/leap/baseapp/network.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index 077d5164..3e57490d 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -17,11 +17,14 @@ class NetworkCheckerAppMixin(object): """ def __init__(self, *args, **kwargs): + provider = kwargs.pop('provider', None) self.network_checker = NetworkCheckerThread( error_cb=self.networkError.emit, - debug=self.debugmode) + debug=self.debugmode, + provider=provider) - # XXX move run_checks to slot + # XXX move run_checks to slot -- this definitely + # cannot start on init!!! self.network_checker.run_checks() @QtCore.pyqtSlot(object) -- cgit v1.2.3 From 4984f2c966d11f529a2a8b722814b748b6a524d2 Mon Sep 17 00:00:00 2001 From: kali Date: Wed, 12 Dec 2012 09:16:53 +0900 Subject: changed some values in new style eipconfig --- src/leap/baseapp/network.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index 3e57490d..7363cfaa 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -18,13 +18,17 @@ class NetworkCheckerAppMixin(object): def __init__(self, *args, **kwargs): provider = kwargs.pop('provider', None) + if provider: + self.init_network_checker(provider) + + def init_network_checker(self, provider): self.network_checker = NetworkCheckerThread( error_cb=self.networkError.emit, debug=self.debugmode, provider=provider) - # XXX move run_checks to slot -- this definitely - # cannot start on init!!! + @QtCore.pyqtSlot(object) + def runNetworkChecks(self): self.network_checker.run_checks() @QtCore.pyqtSlot(object) -- cgit v1.2.3 From 89694babd14a9b2ba76095911b6884e359a12282 Mon Sep 17 00:00:00 2001 From: kali Date: Mon, 17 Dec 2012 05:05:37 +0900 Subject: network checker launched by signal fixes problem with provider domain not being defined during first run. --- src/leap/baseapp/network.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index 7363cfaa..a33265e5 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -9,23 +9,27 @@ from PyQt4 import QtCore from leap.baseapp.dialogs import ErrorDialog from leap.base.network import NetworkCheckerThread +from leap.util.misc import null_check + class NetworkCheckerAppMixin(object): """ initialize an instance of the Network Checker, which gathers error and passes them on. """ - def __init__(self, *args, **kwargs): provider = kwargs.pop('provider', None) if provider: self.init_network_checker(provider) def init_network_checker(self, provider): - self.network_checker = NetworkCheckerThread( - error_cb=self.networkError.emit, - debug=self.debugmode, - provider=provider) + null_check(provider, "provider_domain") + if not hasattr(self, 'network_checker'): + self.network_checker = NetworkCheckerThread( + error_cb=self.networkError.emit, + debug=self.debugmode, + provider=provider) + self.network_checker.start() @QtCore.pyqtSlot(object) def runNetworkChecks(self): -- cgit v1.2.3 From bf39c45eddc62733fdb72b4f46cdb81ec649cb30 Mon Sep 17 00:00:00 2001 From: kali Date: Wed, 16 Jan 2013 00:58:22 +0900 Subject: handle loss of tun iface trigger only one dialog and disconnect. additional cleanup of log handling. --- src/leap/baseapp/network.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index a33265e5..a67f6340 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -17,6 +17,8 @@ class NetworkCheckerAppMixin(object): initialize an instance of the Network Checker, which gathers error and passes them on. """ + ERR_NETERR = False + def __init__(self, *args, **kwargs): provider = kwargs.pop('provider', None) if provider: @@ -41,11 +43,19 @@ class NetworkCheckerAppMixin(object): slot that receives a network exceptions and raises a user error message """ - logger.debug('handling network exception') - logger.error(exc.message) - dialog = ErrorDialog(parent=self) + # FIXME this should not HANDLE anything after + # the network check thread has been stopped. - if exc.critical: - dialog.criticalMessage(exc.usermessage, "network error") - else: - dialog.warningMessage(exc.usermessage, "network error") + logger.debug('handling network exception') + if not self.ERR_NETERR: + self.ERR_NETERR = True + + logger.error(exc.message) + dialog = ErrorDialog(parent=self) + if exc.critical: + dialog.criticalMessage(exc.usermessage, "network error") + else: + dialog.warningMessage(exc.usermessage, "network error") + + self.start_or_stopVPN() + self.network_checker.stop() -- cgit v1.2.3 From 54802bf9c53fc32cfcceb23045c5aeb313c19829 Mon Sep 17 00:00:00 2001 From: kali Date: Fri, 18 Jan 2013 08:45:35 +0900 Subject: fix network checker attr in wizard --- src/leap/baseapp/network.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index a67f6340..d5685504 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -21,12 +21,13 @@ class NetworkCheckerAppMixin(object): def __init__(self, *args, **kwargs): provider = kwargs.pop('provider', None) + self.network_checker = None if provider: self.init_network_checker(provider) def init_network_checker(self, provider): null_check(provider, "provider_domain") - if not hasattr(self, 'network_checker'): + if not self.network_checker: self.network_checker = NetworkCheckerThread( error_cb=self.networkError.emit, debug=self.debugmode, -- cgit v1.2.3 From 407b030bb7d27b797fb27254710a358c9c69f8be Mon Sep 17 00:00:00 2001 From: kali Date: Thu, 24 Jan 2013 01:57:28 +0900 Subject: catch missing messages on last page of wizard --- src/leap/baseapp/network.py | 1 + 1 file changed, 1 insertion(+) (limited to 'src/leap/baseapp/network.py') diff --git a/src/leap/baseapp/network.py b/src/leap/baseapp/network.py index d5685504..dc5182a4 100644 --- a/src/leap/baseapp/network.py +++ b/src/leap/baseapp/network.py @@ -36,6 +36,7 @@ class NetworkCheckerAppMixin(object): @QtCore.pyqtSlot(object) def runNetworkChecks(self): + logger.debug('running checks (from NetworkChecker Mixin slot)') self.network_checker.run_checks() @QtCore.pyqtSlot(object) -- cgit v1.2.3