diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-12-21 21:55:44 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:36 +0100 |
commit | 8a636f6b16641ca90a5b87be412713cce15af45f (patch) | |
tree | cbc8de0a0bcc76bce716570fae8c02678d149c95 /src/mm-iface-modem.c | |
parent | 9a80f5816568b52ee8e159e4b5775a02b3d095cf (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.c | 127 |
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 |