diff options
author | Aleksander Morgado <aleksandermj@chromium.org> | 2022-10-20 09:52:10 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksandermj@chromium.org> | 2022-11-08 13:43:07 +0000 |
commit | cabb003dd6b4f11439ce0a8158830c94f6c83624 (patch) | |
tree | 99fae5a7afd0bac93ad327a37b7f37db5b110e65 /src/mm-iface-modem-3gpp.c | |
parent | 347c25445c769198dd33891619f732ea51f0d00d (diff) |
iface-modem-3gpp: allow internal request to set packet service
Provide a new internal method in the 3GPP interface to request an
explicit packet service state update.
Diffstat (limited to 'src/mm-iface-modem-3gpp.c')
-rw-r--r-- | src/mm-iface-modem-3gpp.c | 77 |
1 files changed, 61 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 |