summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2013-02-07 11:08:01 -0600
committerDan Williams <dcbw@redhat.com>2013-02-07 11:08:01 -0600
commitfd5dd42e6a59243941620797e9eca199afaf1cad (patch)
treead0bc00681ad39b6aba488e03284e7e4bddb935b
parent63c512170f00bd869c1034233580888f16150c80 (diff)
mbm: disconnect if the modem indicates the connection failed (bgo #690868)
-rw-r--r--introspection/org.freedesktop.ModemManager.Modem.xml5
-rw-r--r--plugins/mm-modem-mbm.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/introspection/org.freedesktop.ModemManager.Modem.xml b/introspection/org.freedesktop.ModemManager.Modem.xml
index e246881f..7f9a53cb 100644
--- a/introspection/org.freedesktop.ModemManager.Modem.xml
+++ b/introspection/org.freedesktop.ModemManager.Modem.xml
@@ -319,6 +319,11 @@
is not allowed.
</tp:docstring>
</tp:enumvalue>
+ <tp:enumvalue suffix="CONNECTION_FAILED" value="4">
+ <tp:docstring>
+ State change was caused because the data connection failed.
+ </tp:docstring>
+ </tp:enumvalue>
</tp:enum>
</interface>
diff --git a/plugins/mm-modem-mbm.c b/plugins/mm-modem-mbm.c
index ab7d84e6..9b7c36b3 100644
--- a/plugins/mm-modem-mbm.c
+++ b/plugins/mm-modem-mbm.c
@@ -687,6 +687,14 @@ mbm_do_connect_done (MMModemMbm *self, gboolean success)
}
static void
+e2nap_disconnect_done (MMModem *modem,
+ GError *error,
+ gpointer user_data)
+{
+ mm_info ("Disconnected because the data connection failed");
+}
+
+static void
mbm_e2nap_received (MMAtSerialPort *port,
GMatchInfo *info,
gpointer user_data)
@@ -701,7 +709,10 @@ mbm_e2nap_received (MMAtSerialPort *port,
if (MBM_E2NAP_DISCONNECTED == state) {
mm_dbg ("disconnected");
- mbm_do_connect_done (MM_MODEM_MBM (user_data), FALSE);
+ if (mm_modem_get_state (MM_MODEM (user_data)) == MM_MODEM_STATE_CONNECTED)
+ mm_modem_disconnect (MM_MODEM (user_data), MM_MODEM_STATE_REASON_CONNECTION_FAILED, e2nap_disconnect_done, NULL);
+ else
+ mbm_do_connect_done (MM_MODEM_MBM (user_data), FALSE);
} else if (MBM_E2NAP_CONNECTED == state) {
mm_dbg ("connected");
mbm_do_connect_done (MM_MODEM_MBM (user_data), TRUE);