diff options
| -rw-r--r-- | src/leap/bitmask/backend.py | 2 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/eip_status.py | 21 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/mainwindow.py | 2 | ||||
| -rw-r--r-- | src/leap/bitmask/gui/statemachines.py | 4 | ||||
| -rw-r--r-- | src/leap/bitmask/services/eip/conductor.py | 33 | ||||
| -rw-r--r-- | src/leap/bitmask/services/eip/vpnprocess.py | 2 | 
6 files changed, 46 insertions, 18 deletions
| diff --git a/src/leap/bitmask/backend.py b/src/leap/bitmask/backend.py index f0fe50f9..1ab5b40d 100644 --- a/src/leap/bitmask/backend.py +++ b/src/leap/bitmask/backend.py @@ -1718,7 +1718,7 @@ class Backend(object):          """          self._call_queue.put(("eip", "start", None)) -    def eip_stop(self, shutdown=False, restart=False): +    def eip_stop(self, shutdown=False, restart=False, failed=False):          """          Stop the EIP service. diff --git a/src/leap/bitmask/gui/eip_status.py b/src/leap/bitmask/gui/eip_status.py index ca209d6a..04acc167 100644 --- a/src/leap/bitmask/gui/eip_status.py +++ b/src/leap/bitmask/gui/eip_status.py @@ -361,7 +361,7 @@ class EIPStatusWidget(QtGui.QWidget):              self.eipconnection.qtsigs.do_connect_signal)      @QtCore.Slot(dict) -    def eip_stopped(self, restart=False): +    def eip_stopped(self, restart=False, failed=False):          """          TRIGGERS:              EIPConductor.qtsigs.disconnected_signal @@ -378,16 +378,29 @@ class EIPStatusWidget(QtGui.QWidget):          # status positively.          # Or better call it from the conductor... -        clear_traffic = self.tr("Traffic is being routed in the clear") -        unreachable_net = self.tr("Network is unreachable") +        clear_traffic = self.tr("Traffic is being routed in the clear.") +        unreachable_net = self.tr("Network is unreachable.") +        failed_msg = self.tr("Cannot start Encrypted Proxy.")          if restart:              msg = unreachable_net +        elif failed: +            msg = failed_msg          else:              msg = clear_traffic          self.ui.lblEIPMessage.setText(msg)          self.ui.lblEIPStatus.show() +    def eip_failed_to_restart(self): +        """ +        Update EIP messages. +        """ +        msg = self.tr("Could not restart Encrypted Proxy") +        self.ui.lblEIPMessage.setText(msg) +        self.ui.lblEIPStatus.show() + +        self.set_eip_status(self.tr("You can start the service manually.")) +      @QtCore.Slot(dict)      def update_vpn_status(self, data=None):          """ @@ -530,7 +543,7 @@ class EIPStatusWidget(QtGui.QWidget):          self.set_eip_status(eip_status_label, error=True)          # signal connection_aborted to state machine: -        qtsigs = self._eip_connection.qtsigs +        qtsigs = self._eipconnection.qtsigs          qtsigs.connection_aborted_signal.emit()      def _on_eip_openvpn_already_running(self): diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py index aa317d96..98d9fb8b 100644 --- a/src/leap/bitmask/gui/mainwindow.py +++ b/src/leap/bitmask/gui/mainwindow.py @@ -1764,7 +1764,7 @@ class MainWindow(QtGui.QMainWindow):          if self._systray is not None:              self._systray.showMessage(                  self.tr('Quitting...'), -                self.tr('The app is quitting, please wait.')) +                self.tr('Bitmask is quitting, please wait.'))          # explicitly process events to display tooltip immediately          QtCore.QCoreApplication.processEvents(0, 10) diff --git a/src/leap/bitmask/gui/statemachines.py b/src/leap/bitmask/gui/statemachines.py index 2a876b83..f8e5479d 100644 --- a/src/leap/bitmask/gui/statemachines.py +++ b/src/leap/bitmask/gui/statemachines.py @@ -55,10 +55,6 @@ class SignallingState(QState):          """          Emits the signal on entry.          """ -        print "IIIIIIIIIIIIIIIIIII" -        print "TO STATE", self._name, self.objectName() -        print "IIIIIIIIIIIIIIIIIII" -          logger.debug('State %s::%s entered. Emitting signal ...'                       % (self._name, self.objectName()))          if self._signal is not None: diff --git a/src/leap/bitmask/services/eip/conductor.py b/src/leap/bitmask/services/eip/conductor.py index 7cc80014..0cd4c95c 100644 --- a/src/leap/bitmask/services/eip/conductor.py +++ b/src/leap/bitmask/services/eip/conductor.py @@ -81,6 +81,7 @@ class EIPConductor(object):          # for conductor          signaler.eip_process_restart_tls.connect(self._do_eip_restart) +        signaler.eip_process_restart_tls.connect(self._do_eip_failed)          signaler.eip_process_restart_ping.connect(self._do_eip_restart)          signaler.eip_process_finished.connect(self._eip_finished) @@ -141,7 +142,7 @@ class EIPConductor(object):          self._backend.eip_start()      @QtCore.Slot() -    def _stop_eip(self, restart=False): +    def _stop_eip(self, restart=False, failed=False):          """          TRIGGERS:            self.qsigs.do_disconnect_signal (via state machine) @@ -151,9 +152,12 @@ class EIPConductor(object):          :param restart: whether this is part of a eip restart.          :type restart: bool + +        :param failed: whether this is the final step of a retry sequence +        :type failed: bool          """          self._eip_status.is_restart = restart -        self.user_stopped_eip = not restart +        self.user_stopped_eip = not restart and not failed          def on_disconnected_do_restart():              # hard restarts @@ -166,11 +170,9 @@ class EIPConductor(object):              QtDelayedCall(2000, self.do_connect)          def plug_restart_on_disconnected(): -            #print "PLUGGING RESTART ON DISCONNECTED"              self.qtsigs.disconnected_signal.connect(on_disconnected_do_restart)          def reconnect_disconnected_signal(): -            #print "RECONNECTING DISCONNECTED SIGNAL"              self.qtsigs.disconnected_signal.disconnect(                  on_disconnected_do_restart) @@ -178,7 +180,6 @@ class EIPConductor(object):              self._stop_eip(restart=False)          def reconnect_stop_signal(): -            #print "RECONNECTING StOP SIGNAL"              self.qtsigs.disconnecting_signal.disconnect()              self.qtsigs.disconnecting_signal.connect(do_stop) @@ -190,6 +191,10 @@ class EIPConductor(object):              # ...and reconnect the original signal again, after having used the              # diversion              QtDelayedCall(500, reconnect_disconnected_signal) + +        elif failed: +            self.qtsigs.disconnected_signal.emit() +          else:              logger.debug('Setting autostart to: False')              self._settings.set_autostart_eip(False) @@ -197,9 +202,11 @@ class EIPConductor(object):          # Call to the backend.          self._backend.eip_stop(restart=restart) -        self._already_started_eip = False +        # ... and inform the status widget          self._eip_status.set_eipstatus_off(False) -        self._eip_status.eip_stopped(restart=restart) +        self._eip_status.eip_stopped(restart=restart, failed=failed) + +        self._already_started_eip = False          # XXX needed?          if restart: @@ -227,6 +234,18 @@ class EIPConductor(object):          self.qtsigs.disconnecting_signal.connect(do_stop)          self.qtsigs.do_disconnect_signal.emit() +    @QtCore.Slot() +    def _do_eip_failed(self): +        """ +        Stop EIP after a failure to start. + +        TRIGGERS +            signaler.eip_process_restart_tls +        """ +        logger.debug("TLS Error: eip_stop (failed)") +        self.qtsigs.connection_died_signal.emit() +        QtDelayedCall(1000, self._eip_status.eip_failed_to_restart) +      @QtCore.Slot(int)      def _eip_finished(self, exitCode):          """ diff --git a/src/leap/bitmask/services/eip/vpnprocess.py b/src/leap/bitmask/services/eip/vpnprocess.py index 6eef05af..098619be 100644 --- a/src/leap/bitmask/services/eip/vpnprocess.py +++ b/src/leap/bitmask/services/eip/vpnprocess.py @@ -70,7 +70,7 @@ class VPNObserver(object):          'NETWORK_UNREACHABLE': (              'Network is unreachable (code=101)',),          'PROCESS_RESTART_TLS': ( -            "SIGUSR1[soft,tls-error]",), +            "SIGTERM[soft,tls-error]",),          'PROCESS_RESTART_PING': (              "SIGTERM[soft,ping-restart]",),          'INITIALIZATION_COMPLETED': ( | 
