diff options
author | Dan Williams <dcbw@redhat.com> | 2012-07-16 16:59:31 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-07-16 17:10:04 -0500 |
commit | 40dc0dd9d9fa995ff6a86ccb7947ddd0c676858c (patch) | |
tree | e2fc6c137f162298bc18cee9d3723bfe79772a98 | |
parent | 4421fc180d6ecdf801517e380c6765e1de3df4d0 (diff) |
gsm: emit usable reason code when disconnecting due to roaming
Tell clients that the reason we're disconnecting isn't some random
hiccup, but that roaming isn't allowed and we're now roaming, and
thus the modem is getting disconnected.
-rw-r--r-- | introspection/org.freedesktop.ModemManager.Modem.xml | 6 | ||||
-rw-r--r-- | plugins/mm-modem-icera.c | 2 | ||||
-rw-r--r-- | src/mm-generic-cdma.c | 3 | ||||
-rw-r--r-- | src/mm-generic-gsm.c | 5 | ||||
-rw-r--r-- | src/mm-modem.c | 7 | ||||
-rw-r--r-- | src/mm-modem.h | 5 |
6 files changed, 20 insertions, 8 deletions
diff --git a/introspection/org.freedesktop.ModemManager.Modem.xml b/introspection/org.freedesktop.ModemManager.Modem.xml index 3f6f0bbc..8b28ffe0 100644 --- a/introspection/org.freedesktop.ModemManager.Modem.xml +++ b/introspection/org.freedesktop.ModemManager.Modem.xml @@ -238,6 +238,12 @@ State change was caused by a system suspend. </tp:docstring> </tp:enumvalue> + <tp:enumvalue suffix="ROAMING_NOT_ALLOWED" value="3"> + <tp:docstring> + State change was caused because the modem is roaming and roaming + is not allowed. + </tp:docstring> + </tp:enumvalue> </tp:enum> diff --git a/plugins/mm-modem-icera.c b/plugins/mm-modem-icera.c index 89331429..1dcc4c67 100644 --- a/plugins/mm-modem-icera.c +++ b/plugins/mm-modem-icera.c @@ -434,7 +434,7 @@ connection_enabled (MMAtSerialPort *port, case 0: /* Disconnected */ if (mm_modem_get_state (MM_MODEM (self)) >= MM_MODEM_STATE_CONNECTED) - mm_modem_disconnect (MM_MODEM (self), icera_disconnect_done, NULL); + mm_modem_disconnect (MM_MODEM (self), MM_MODEM_STATE_REASON_NONE, icera_disconnect_done, NULL); break; case 1: /* Connected */ diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c index 515cfddd..5c6af264 100644 --- a/src/mm-generic-cdma.c +++ b/src/mm-generic-cdma.c @@ -912,6 +912,7 @@ disconnect_flash_done (MMSerialPort *port, static void disconnect (MMModem *modem, + MMModemStateReason reason, MMModemFn callback, gpointer user_data) { @@ -930,7 +931,7 @@ disconnect (MMModem *modem, GUINT_TO_POINTER (state), NULL); - mm_modem_set_state (modem, MM_MODEM_STATE_DISCONNECTING, MM_MODEM_STATE_REASON_NONE); + mm_modem_set_state (modem, MM_MODEM_STATE_DISCONNECTING, reason); mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, TRUE, disconnect_flash_done, info); } diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index ad5de263..4ed81241 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -3019,7 +3019,7 @@ mm_generic_gsm_set_reg_status (MMGenericGsm *self, if ( (status == MM_MODEM_GSM_NETWORK_REG_STATUS_ROAMING) && (mm_modem_get_state (MM_MODEM (self)) == MM_MODEM_STATE_CONNECTED) && (priv->roam_allowed == FALSE)) { - mm_modem_disconnect (MM_MODEM (self), roam_disconnect_done, NULL); + mm_modem_disconnect (MM_MODEM (self), MM_MODEM_STATE_REASON_ROAMING_NOT_ALLOWED, roam_disconnect_done, NULL); } else { /* Grab the new operator name and MCC/MNC */ if (port) { @@ -3787,6 +3787,7 @@ real_do_disconnect (MMGenericGsm *self, static void disconnect (MMModem *modem, + MMModemStateReason reason, MMModemFn callback, gpointer user_data) { @@ -3806,7 +3807,7 @@ disconnect (MMModem *modem, GUINT_TO_POINTER (state), NULL); - mm_modem_set_state (modem, MM_MODEM_STATE_DISCONNECTING, MM_MODEM_STATE_REASON_NONE); + mm_modem_set_state (modem, MM_MODEM_STATE_DISCONNECTING, reason); g_assert (MM_GENERIC_GSM_GET_CLASS (self)->do_disconnect); MM_GENERIC_GSM_GET_CLASS (self)->do_disconnect (self, priv->cid, disconnect_done, info); diff --git a/src/mm-modem.c b/src/mm-modem.c index 33b81164..a2250ac8 100644 --- a/src/mm-modem.c +++ b/src/mm-modem.c @@ -182,7 +182,7 @@ mm_modem_disable (MMModem *self, cb_data = g_malloc0 (sizeof (DisableDisconnectInfo)); cb_data->callback = callback; cb_data->user_data = user_data; - mm_modem_disconnect (self, disable_disconnect_done, cb_data); + mm_modem_disconnect (self, MM_MODEM_STATE_REASON_NONE, disable_disconnect_done, cb_data); } else finish_disable (self, callback, user_data); } @@ -337,6 +337,7 @@ impl_modem_get_ip4_config (MMModem *modem, void mm_modem_disconnect (MMModem *self, + MMModemStateReason reason, MMModemFn callback, gpointer user_data) { @@ -364,7 +365,7 @@ mm_modem_disconnect (MMModem *self, } if (MM_MODEM_GET_INTERFACE (self)->disconnect) - MM_MODEM_GET_INTERFACE (self)->disconnect (self, callback, user_data); + MM_MODEM_GET_INTERFACE (self)->disconnect (self, reason, callback, user_data); else async_op_not_supported (self, callback, user_data); } @@ -373,7 +374,7 @@ static void impl_modem_disconnect (MMModem *modem, DBusGMethodInvocation *context) { - mm_modem_disconnect (modem, async_call_done, context); + mm_modem_disconnect (modem, MM_MODEM_STATE_REASON_USER_REQUESTED, async_call_done, context); } static void diff --git a/src/mm-modem.h b/src/mm-modem.h index 45f81103..2f922585 100644 --- a/src/mm-modem.h +++ b/src/mm-modem.h @@ -42,7 +42,8 @@ typedef enum { typedef enum { MM_MODEM_STATE_REASON_NONE = 0, MM_MODEM_STATE_REASON_USER_REQUESTED, - MM_MODEM_STATE_REASON_SUSPEND + MM_MODEM_STATE_REASON_SUSPEND, + MM_MODEM_STATE_REASON_ROAMING_NOT_ALLOWED } MMModemStateReason; #define DBUS_PATH_TAG "dbus-path" @@ -164,6 +165,7 @@ struct _MMModem { gpointer user_data); void (*disconnect) (MMModem *self, + MMModemStateReason reason, MMModemFn callback, gpointer user_data); @@ -247,6 +249,7 @@ void mm_modem_get_ip4_config (MMModem *self, gpointer user_data); void mm_modem_disconnect (MMModem *self, + MMModemStateReason reason, MMModemFn callback, gpointer user_data); |