diff options
author | Dan Williams <dcbw@redhat.com> | 2013-02-07 11:08:01 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2013-02-07 11:08:01 -0600 |
commit | fd5dd42e6a59243941620797e9eca199afaf1cad (patch) | |
tree | ad0bc00681ad39b6aba488e03284e7e4bddb935b | |
parent | 63c512170f00bd869c1034233580888f16150c80 (diff) |
mbm: disconnect if the modem indicates the connection failed (bgo #690868)
-rw-r--r-- | introspection/org.freedesktop.ModemManager.Modem.xml | 5 | ||||
-rw-r--r-- | plugins/mm-modem-mbm.c | 13 |
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); |