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:10:04 -0500
commit40dc0dd9d9fa995ff6a86ccb7947ddd0c676858c (patch)
treee2fc6c137f162298bc18cee9d3723bfe79772a98
parent4421fc180d6ecdf801517e380c6765e1de3df4d0 (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.h5
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);