aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-12-21 21:55:44 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:14:36 +0100
commit8a636f6b16641ca90a5b87be412713cce15af45f (patch)
treecbc8de0a0bcc76bce716570fae8c02678d149c95 /src/mm-iface-modem.c
parent9a80f5816568b52ee8e159e4b5775a02b3d095cf (diff)
broadband-modem: handle state checks during Enable() and Disable()
Before it was done in the interface; but we should really be doing it in the implementation; so that mm_base_modem_enable()/disable() also has the state checks.
Diffstat (limited to 'src/mm-iface-modem.c')
-rw-r--r--src/mm-iface-modem.c127
1 files changed, 14 insertions, 113 deletions
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index 6a69fc30..2f29313a 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -383,137 +383,38 @@ enable_disable_ready (MMIfaceModem *self,
}
static gboolean
-run_enable (MMIfaceModem *self,
- MmGdbusModem *skeleton,
- MMModemState modem_state,
- GDBusMethodInvocation *invocation)
+handle_enable (MmGdbusModem *skeleton,
+ GDBusMethodInvocation *invocation,
+ gboolean arg_enable,
+ MMIfaceModem *self)
{
- switch (modem_state) {
- case MM_MODEM_STATE_UNKNOWN:
- /* We should never have a UNKNOWN->ENABLED transition */
- g_assert_not_reached ();
- break;
+ MMModemState modem_state;
- case MM_MODEM_STATE_LOCKED:
- g_dbus_method_invocation_return_error (invocation,
- MM_CORE_ERROR,
- MM_CORE_ERROR_WRONG_STATE,
- "Cannot enable modem: device locked");
- break;
+ g_assert (MM_BASE_MODEM_GET_CLASS (self)->enable != NULL);
+ g_assert (MM_BASE_MODEM_GET_CLASS (self)->enable_finish != NULL);
- case MM_MODEM_STATE_DISABLED:
+ modem_state = MM_MODEM_STATE_UNKNOWN;
+ g_object_get (self,
+ MM_IFACE_MODEM_STATE, &modem_state,
+ NULL);
+
+ if (arg_enable)
MM_BASE_MODEM_GET_CLASS (self)->enable (MM_BASE_MODEM (self),
NULL, /* cancellable */
(GAsyncReadyCallback)enable_disable_ready,
dbus_call_context_new (skeleton,
invocation,
self));
- break;
-
- case MM_MODEM_STATE_DISABLING:
- g_dbus_method_invocation_return_error (invocation,
- MM_CORE_ERROR,
- MM_CORE_ERROR_WRONG_STATE,
- "Cannot enable modem: "
- "currently being disabled");
- break;
-
- case MM_MODEM_STATE_ENABLING:
- g_dbus_method_invocation_return_error (invocation,
- MM_CORE_ERROR,
- MM_CORE_ERROR_WRONG_STATE,
- "Cannot enable modem: "
- "already being enabled");
- break;
-
- case MM_MODEM_STATE_ENABLED:
- case MM_MODEM_STATE_SEARCHING:
- case MM_MODEM_STATE_REGISTERED:
- case MM_MODEM_STATE_DISCONNECTING:
- case MM_MODEM_STATE_CONNECTING:
- case MM_MODEM_STATE_CONNECTED:
- /* Just return success, don't relaunch enabling */
- mm_gdbus_modem_complete_enable (skeleton, invocation);
- break;
- }
-
- return TRUE;
-}
-
-static gboolean
-run_disable (MMIfaceModem *self,
- MmGdbusModem *skeleton,
- MMModemState modem_state,
- GDBusMethodInvocation *invocation)
-{
- switch (modem_state) {
- case MM_MODEM_STATE_UNKNOWN:
- /* We should never have a UNKNOWN->DISABLED transition requested by
- * the user. */
- g_assert_not_reached ();
- break;
-
- case MM_MODEM_STATE_LOCKED:
- case MM_MODEM_STATE_DISABLED:
- /* Just return success, don't relaunch enabling */
- mm_gdbus_modem_complete_enable (skeleton, invocation);
- break;
-
- case MM_MODEM_STATE_DISABLING:
- g_dbus_method_invocation_return_error (invocation,
- MM_CORE_ERROR,
- MM_CORE_ERROR_WRONG_STATE,
- "Cannot disable modem: "
- "already being disabled");
- break;
-
- case MM_MODEM_STATE_ENABLING:
- g_dbus_method_invocation_return_error (invocation,
- MM_CORE_ERROR,
- MM_CORE_ERROR_WRONG_STATE,
- "Cannot disable modem: "
- "currently being enabled");
- break;
-
- case MM_MODEM_STATE_ENABLED:
- case MM_MODEM_STATE_SEARCHING:
- case MM_MODEM_STATE_REGISTERED:
- case MM_MODEM_STATE_DISCONNECTING:
- case MM_MODEM_STATE_CONNECTING:
- case MM_MODEM_STATE_CONNECTED:
+ else
MM_BASE_MODEM_GET_CLASS (self)->disable (MM_BASE_MODEM (self),
NULL, /* cancellable */
(GAsyncReadyCallback)enable_disable_ready,
dbus_call_context_new (skeleton,
invocation,
self));
- break;
- }
-
return TRUE;
}
-static gboolean
-handle_enable (MmGdbusModem *skeleton,
- GDBusMethodInvocation *invocation,
- gboolean arg_enable,
- MMIfaceModem *self)
-{
- MMModemState modem_state;
-
- g_assert (MM_BASE_MODEM_GET_CLASS (self)->enable != NULL);
- g_assert (MM_BASE_MODEM_GET_CLASS (self)->enable_finish != NULL);
-
- modem_state = MM_MODEM_STATE_UNKNOWN;
- g_object_get (self,
- MM_IFACE_MODEM_STATE, &modem_state,
- NULL);
-
- return (arg_enable ?
- run_enable (self, skeleton, modem_state, invocation) :
- run_disable (self, skeleton, modem_state, invocation));
-}
-
/*****************************************************************************/
static void