aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-07-16 16:59:31 -0500
committerDan Williams <dcbw@redhat.com>2012-07-16 17:09:01 -0500
commit3270ecf647576ab7aad9127af03ad460a07f1b4f (patch)
treecfe6d0d07740c78fdd23d362ccfcee0a3923012b
parentcae86b0190496d37e89e8b39f6d24a93c5f6911b (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.xml6
-rw-r--r--plugins/mm-modem-icera.c2
-rw-r--r--src/mm-generic-cdma.c3
-rw-r--r--src/mm-generic-gsm.c5
-rw-r--r--src/mm-modem.c7
-rw-r--r--src/mm-modem.h2
6 files changed, 18 insertions, 7 deletions
diff --git a/introspection/org.freedesktop.ModemManager.Modem.xml b/introspection/org.freedesktop.ModemManager.Modem.xml
index 7da014f0..e246881f 100644
--- a/introspection/org.freedesktop.ModemManager.Modem.xml
+++ b/introspection/org.freedesktop.ModemManager.Modem.xml
@@ -313,6 +313,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>
</interface>
diff --git a/plugins/mm-modem-icera.c b/plugins/mm-modem-icera.c
index 915447ef..3cdf0452 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 a72232f1..7b83cf9a 100644
--- a/src/mm-generic-cdma.c
+++ b/src/mm-generic-cdma.c
@@ -928,6 +928,7 @@ disconnect_flash_done (MMSerialPort *port,
static void
disconnect (MMModem *modem,
+ MMModemStateReason reason,
MMModemFn callback,
gpointer user_data)
{
@@ -947,7 +948,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);
dial_port = priv->primary;
if (MM_IS_AT_SERIAL_PORT (priv->data))
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c
index cab7b78e..9c1f780f 100644
--- a/src/mm-generic-gsm.c
+++ b/src/mm-generic-gsm.c
@@ -3204,7 +3204,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) {
@@ -4026,6 +4026,7 @@ real_do_disconnect (MMGenericGsm *self,
static void
disconnect (MMModem *modem,
+ MMModemStateReason reason,
MMModemFn callback,
gpointer user_data)
{
@@ -4045,7 +4046,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 012e3203..a7b43e59 100644
--- a/src/mm-modem.c
+++ b/src/mm-modem.c
@@ -184,7 +184,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);
}
@@ -339,6 +339,7 @@ impl_modem_get_ip4_config (MMModem *modem,
void
mm_modem_disconnect (MMModem *self,
+ MMModemStateReason reason,
MMModemFn callback,
gpointer user_data)
{
@@ -366,7 +367,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);
}
@@ -375,7 +376,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 c4200645..3c60c633 100644
--- a/src/mm-modem.h
+++ b/src/mm-modem.h
@@ -158,6 +158,7 @@ struct _MMModem {
gpointer user_data);
void (*disconnect) (MMModem *self,
+ MMModemStateReason reason,
MMModemFn callback,
gpointer user_data);
@@ -245,6 +246,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);