diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-iface-modem-3gpp.c | 77 | ||||
-rw-r--r-- | src/mm-iface-modem-3gpp.h | 10 |
2 files changed, 71 insertions, 16 deletions
diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c index 4ce4c872..68b0048c 100644 --- a/src/mm-iface-modem-3gpp.c +++ b/src/mm-iface-modem-3gpp.c @@ -1437,6 +1437,59 @@ handle_disable_facility_lock (MmGdbusModem3gpp *skeleton, } /*****************************************************************************/ +/* Set Packet Service State (internal) */ + +gboolean +mm_iface_modem_3gpp_set_packet_service_state_finish (MMIfaceModem3gpp *self, + GAsyncResult *res, + GError **error) +{ + return g_task_propagate_boolean (G_TASK (res), error); +} + +static void +set_packet_service_state_ready (MMIfaceModem3gpp *self, + GAsyncResult *res, + GTask *task) +{ + GError *error = NULL; + + if (!MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->set_packet_service_state_finish (self, res, &error)) + g_task_return_error (task, error); + else + g_task_return_boolean (task, TRUE); + g_object_unref (task); +} + +void +mm_iface_modem_3gpp_set_packet_service_state (MMIfaceModem3gpp *self, + MMModem3gppPacketServiceState packet_service_state, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + + g_assert (packet_service_state == MM_MODEM_3GPP_PACKET_SERVICE_STATE_ATTACHED || + packet_service_state == MM_MODEM_3GPP_PACKET_SERVICE_STATE_DETACHED); + + task = g_task_new (self, NULL, callback, user_data); + + if (!MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->set_packet_service_state || + !MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->set_packet_service_state_finish) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, + "Explicit packet service attach/detach operation not supported"); + g_object_unref (task); + return; + } + + MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->set_packet_service_state ( + self, + packet_service_state, + (GAsyncReadyCallback)set_packet_service_state_ready, + task); +} + +/*****************************************************************************/ /* Set Packet Service State */ typedef struct { @@ -1456,13 +1509,13 @@ handle_set_packet_service_state_context_free (HandlePacketServiceStateContext *c } static void -set_packet_service_state_ready (MMIfaceModem3gpp *self, - GAsyncResult *res, - HandlePacketServiceStateContext *ctx) +internal_set_packet_service_state_ready (MMIfaceModem3gpp *self, + GAsyncResult *res, + HandlePacketServiceStateContext *ctx) { GError *error = NULL; - if (!MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->set_packet_service_state_finish (self, res, &error)) { + if (!mm_iface_modem_3gpp_set_packet_service_state_finish (self, res, &error)) { mm_obj_warn (self, "failed setting packet service state to '%s': %s", mm_modem_3gpp_packet_service_state_get_string (ctx->packet_service_state), error->message); @@ -1495,14 +1548,6 @@ set_packet_service_state_auth_ready (MMBaseModem *self, return; } - if (!MM_IFACE_MODEM_3GPP_GET_INTERFACE (ctx->self)->set_packet_service_state || - !MM_IFACE_MODEM_3GPP_GET_INTERFACE (ctx->self)->set_packet_service_state_finish) { - g_dbus_method_invocation_return_error (ctx->invocation, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, - "Operation not supported"); - handle_set_packet_service_state_context_free (ctx); - return; - } - if ((ctx->packet_service_state != MM_MODEM_3GPP_PACKET_SERVICE_STATE_ATTACHED) && (ctx->packet_service_state != MM_MODEM_3GPP_PACKET_SERVICE_STATE_DETACHED)) { g_dbus_method_invocation_return_error (ctx->invocation, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, @@ -1513,10 +1558,10 @@ set_packet_service_state_auth_ready (MMBaseModem *self, mm_obj_info (self, "processing user request to set packet service state to '%s'...", mm_modem_3gpp_packet_service_state_get_string (ctx->packet_service_state)); - MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->set_packet_service_state (ctx->self, - ctx->packet_service_state, - (GAsyncReadyCallback)set_packet_service_state_ready, - ctx); + mm_iface_modem_3gpp_set_packet_service_state (ctx->self, + ctx->packet_service_state, + (GAsyncReadyCallback)internal_set_packet_service_state_ready, + ctx); } static gboolean diff --git a/src/mm-iface-modem-3gpp.h b/src/mm-iface-modem-3gpp.h index 08ef956e..3925a583 100644 --- a/src/mm-iface-modem-3gpp.h +++ b/src/mm-iface-modem-3gpp.h @@ -392,6 +392,16 @@ gboolean mm_iface_modem_3gpp_reregister_in_network_finish (MMIfaceModem3gpp GAsyncResult *res, GError **error); +/* Allow requesting packet service explicitly */ +void mm_iface_modem_3gpp_set_packet_service_state (MMIfaceModem3gpp *self, + MMModem3gppPacketServiceState packet_service_state, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_iface_modem_3gpp_set_packet_service_state_finish (MMIfaceModem3gpp *self, + GAsyncResult *res, + GError **error); + +/* Allow waiting for packet service */ void mm_iface_modem_3gpp_wait_for_packet_service_state (MMIfaceModem3gpp *self, MMModem3gppPacketServiceState final_state, GAsyncReadyCallback callback, |