From 42a262e685dd616e2bdc9a6f1e092cf25c3dc4e7 Mon Sep 17 00:00:00 2001
From: Kali Kaneko <kali@leap.se>
Date: Sat, 28 Sep 2013 17:19:57 -0400
Subject: add connection_aborted signal to state machine

---
 src/leap/bitmask/gui/mainwindow.py          | 19 +++++++++----------
 src/leap/bitmask/gui/statemachines.py       |  8 +++++++-
 src/leap/bitmask/services/connections.py    |  1 +
 src/leap/bitmask/services/eip/connection.py |  1 +
 4 files changed, 18 insertions(+), 11 deletions(-)

(limited to 'src/leap')

diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py
index 200d68aa..1e437999 100644
--- a/src/leap/bitmask/gui/mainwindow.py
+++ b/src/leap/bitmask/gui/mainwindow.py
@@ -1531,7 +1531,9 @@ class MainWindow(QtGui.QMainWindow):
         # TODO we should have a way of parsing the latest lines in the vpn
         # log buffer so we can have a more precise idea of which type
         # of error did we have (server side, local problem, etc)
-        abnormal = True
+
+        qtsigs = self._eip_connection.qtsigs
+        signal = qtsigs.disconnected_signal
 
         # XXX check if these exitCodes are pkexec/cocoasudo specific
         if exitCode in (126, 127):
@@ -1540,28 +1542,25 @@ class MainWindow(QtGui.QMainWindow):
                         "because you did not authenticate properly."),
                 error=True)
             self._vpn.killit()
+            signal = qtsigs.connection_aborted_signal
+
         elif exitCode != 0 or not self.user_stopped_eip:
             self._status_panel.set_global_status(
                 self.tr("Encrypted Internet finished in an "
                         "unexpected manner!"), error=True)
-        else:
-            abnormal = False
+            signal = qtsigs.connection_died_signal
+
         if exitCode == 0 and IS_MAC:
             # XXX remove this warning after I fix cocoasudo.
             logger.warning("The above exit code MIGHT BE WRONG.")
 
-        # We emit signals to trigger transitions in the state machine:
-        qtsigs = self._eip_connection.qtsigs
-        if abnormal:
-            signal = qtsigs.connection_died_signal
-        else:
-            signal = qtsigs.disconnected_signal
-
         # XXX verify that the logic kees the same w/o the abnormal flag
         # after the refactor to EIPConnection has been completed
         # (eipconductor taking the most of the logic under transitions
         # that right now are handled under status_panel)
         #self._stop_eip(abnormal)
+
+        # We emit signals to trigger transitions in the state machine:
         signal.emit()
 
     def _on_raise_window_event(self, req):
diff --git a/src/leap/bitmask/gui/statemachines.py b/src/leap/bitmask/gui/statemachines.py
index c3dd5ed3..c02bf9bc 100644
--- a/src/leap/bitmask/gui/statemachines.py
+++ b/src/leap/bitmask/gui/statemachines.py
@@ -128,11 +128,17 @@ class ConnectionMachineBuilder(object):
             states[_OFF])
 
         # * If we receive the connection_died, we transition
-        #   to the off state
+        #   from on directly to the off state
         states[_ON].addTransition(
             conn.qtsigs.connection_died_signal,
             states[_OFF])
 
+        # * If we receive the connection_aborted, we transition
+        #   from connecting to the off state
+        states[_CON].addTransition(
+            conn.qtsigs.connection_aborted_signal,
+            states[_OFF])
+
         # adding states to the machine
         for state in states.itervalues():
             machine.addState(state)
diff --git a/src/leap/bitmask/services/connections.py b/src/leap/bitmask/services/connections.py
index f3ab9e8e..8aeb4e0c 100644
--- a/src/leap/bitmask/services/connections.py
+++ b/src/leap/bitmask/services/connections.py
@@ -103,6 +103,7 @@ class AbstractLEAPConnection(object):
 
     # Bypass stages
     connection_died_signal = None
+    connection_aborted_signal = None
 
     class Disconnected(State):
         """Disconnected state"""
diff --git a/src/leap/bitmask/services/eip/connection.py b/src/leap/bitmask/services/eip/connection.py
index 5f05ba07..08b29070 100644
--- a/src/leap/bitmask/services/eip/connection.py
+++ b/src/leap/bitmask/services/eip/connection.py
@@ -40,6 +40,7 @@ class EIPConnectionSignals(QtCore.QObject):
     disconnected_signal = QtCore.Signal()
 
     connection_died_signal = QtCore.Signal()
+    connection_aborted_signal = QtCore.Signal()
 
 
 class EIPConnection(AbstractLEAPConnection):
-- 
cgit v1.2.3


From 24c91beb6f7102158a37330e914e19570bb85ecf Mon Sep 17 00:00:00 2001
From: Kali Kaneko <kali@leap.se>
Date: Mon, 30 Sep 2013 13:32:51 -0400
Subject: add connection_died transition to connecting->off too

---
 src/leap/bitmask/gui/statemachines.py | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'src/leap')

diff --git a/src/leap/bitmask/gui/statemachines.py b/src/leap/bitmask/gui/statemachines.py
index c02bf9bc..94726720 100644
--- a/src/leap/bitmask/gui/statemachines.py
+++ b/src/leap/bitmask/gui/statemachines.py
@@ -138,6 +138,14 @@ class ConnectionMachineBuilder(object):
         states[_CON].addTransition(
             conn.qtsigs.connection_aborted_signal,
             states[_OFF])
+        # * Connection died can in some cases also be
+        #   triggered while we are in CONNECTING
+        #   state. I should be avoided, since connection_aborted
+        #   is clearer (and reserve connection_died
+        #   for transitions from on->off
+        states[_CON].addTransition(
+            conn.qtsigs.connection_died_signal,
+            states[_OFF])
 
         # adding states to the machine
         for state in states.itervalues():
-- 
cgit v1.2.3