diff options
author | Dan Williams <dan@ioncontrol.co> | 2025-05-08 20:10:48 -0500 |
---|---|---|
committer | Dan Williams <dan@ioncontrol.co> | 2025-05-08 20:10:48 -0500 |
commit | efcc960b130356e6b05d05a915ff0f9646b00d5f (patch) | |
tree | cf209fc07098e68c65dca219fee38a826dbcbf1a /src/mm-base-modem.c | |
parent | 02942a04f95f64cda36360c72961fe0e20459ad4 (diff) | |
parent | 1fa21fcc48b271a8dc2191104e35bf4e95fa2331 (diff) |
Merge request !1344 from 'cbm-remove-modem'
Begin removing usage of MMBaseModem from leaf classes
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/merge_requests/1344
Diffstat (limited to 'src/mm-base-modem.c')
-rw-r--r-- | src/mm-base-modem.c | 185 |
1 files changed, 105 insertions, 80 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index 7e142327..eb7c04ca 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -39,11 +39,16 @@ #include "mm-daemon-enums-types.h" #include "mm-serial-parsers.h" #include "mm-modem-helpers.h" +#include "mm-bind.h" static void log_object_iface_init (MMLogObjectInterface *iface); +static void auth_iface_init (MMIfaceAuthInterface *iface); +static void op_lock_iface_init (MMIfaceOpLockInterface *iface); G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MMBaseModem, mm_base_modem, MM_GDBUS_TYPE_OBJECT_SKELETON, - G_IMPLEMENT_INTERFACE (MM_TYPE_LOG_OBJECT, log_object_iface_init)) + G_IMPLEMENT_INTERFACE (MM_TYPE_LOG_OBJECT, log_object_iface_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_AUTH, auth_iface_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_OP_LOCK, op_lock_iface_init)) /* If we get 10 consecutive timeouts in a serial port, we consider the modem * invalid and we request re-probing. */ @@ -150,6 +155,16 @@ struct _MMBaseModemPrivate { gboolean scheduled_operations_forbidden_forever; }; +static void mm_base_modem_operation_lock (MMBaseModem *self, + MMOperationPriority priority, + const gchar *description, + GAsyncReadyCallback callback, + gpointer user_data); +static gssize mm_base_modem_operation_lock_finish (MMBaseModem *self, + GAsyncResult *res, + GError **error); + + guint mm_base_modem_get_dbus_id (MMBaseModem *self) { @@ -774,7 +789,7 @@ state_operation_ready (MMBaseModem *self, ctx = g_task_get_task_data (task); if (ctx->operation_id >= 0) { - mm_base_modem_operation_unlock (self, ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (self), ctx->operation_id); ctx->operation_id = (gssize) -1; } @@ -821,12 +836,12 @@ lock_before_state_operation_ready (MMBaseModem *self, } static void -state_operation (MMBaseModem *self, - StateOperationType operation_type, - MMBaseModemOperationLock operation_lock, - MMBaseModemOperationPriority operation_priority, - GAsyncReadyCallback callback, - gpointer user_data) +state_operation (MMBaseModem *self, + StateOperationType operation_type, + MMOperationLock operation_lock, + MMOperationPriority operation_priority, + GAsyncReadyCallback callback, + gpointer user_data) { GTask *task; StateOperationContext *ctx; @@ -878,12 +893,12 @@ state_operation (MMBaseModem *self, } g_assert (ctx->operation && ctx->operation_finish); - if (operation_lock == MM_BASE_MODEM_OPERATION_LOCK_ALREADY_ACQUIRED) { + if (operation_lock == MM_OPERATION_LOCK_ALREADY_ACQUIRED) { state_operation_run (task); return; } - g_assert (operation_lock == MM_BASE_MODEM_OPERATION_LOCK_REQUIRED); + g_assert (operation_lock == MM_OPERATION_LOCK_REQUIRED); mm_base_modem_operation_lock (self, operation_priority, operation_description, @@ -905,14 +920,14 @@ mm_base_modem_sync_finish (MMBaseModem *self, void mm_base_modem_sync (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data) + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data) { state_operation (self, STATE_OPERATION_TYPE_SYNC, operation_lock, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, + MM_OPERATION_PRIORITY_DEFAULT, callback, user_data); } @@ -930,11 +945,11 @@ mm_base_modem_disable_finish (MMBaseModem *self, } void -mm_base_modem_disable (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - MMBaseModemOperationPriority operation_priority, - GAsyncReadyCallback callback, - gpointer user_data) +mm_base_modem_disable (MMBaseModem *self, + MMOperationLock operation_lock, + MMOperationPriority operation_priority, + GAsyncReadyCallback callback, + gpointer user_data) { state_operation (self, STATE_OPERATION_TYPE_DISABLE, @@ -955,15 +970,15 @@ mm_base_modem_enable_finish (MMBaseModem *self, } void -mm_base_modem_enable (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data) +mm_base_modem_enable (MMBaseModem *self, + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data) { state_operation (self, STATE_OPERATION_TYPE_ENABLE, operation_lock, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, + MM_OPERATION_PRIORITY_DEFAULT, callback, user_data); } @@ -979,15 +994,15 @@ mm_base_modem_initialize_finish (MMBaseModem *self, } void -mm_base_modem_initialize (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data) +mm_base_modem_initialize (MMBaseModem *self, + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data) { state_operation (self, STATE_OPERATION_TYPE_INITIALIZE, operation_lock, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, + MM_OPERATION_PRIORITY_DEFAULT, callback, user_data); } @@ -1775,8 +1790,8 @@ mm_base_modem_organize_ports (MMBaseModem *self, /*****************************************************************************/ /* Authorization */ -gboolean -mm_base_modem_authorize_finish (MMBaseModem *self, +static gboolean +mm_base_modem_authorize_finish (MMIfaceAuth *auth, GAsyncResult *res, GError **error) { @@ -1798,24 +1813,18 @@ authorize_ready (MMAuthProvider *authp, g_object_unref (task); } -void -mm_base_modem_authorize (MMBaseModem *self, +static void +mm_base_modem_authorize (MMIfaceAuth *auth, GDBusMethodInvocation *invocation, const gchar *authorization, GAsyncReadyCallback callback, gpointer user_data) { - GTask *task; + MMBaseModem *self = MM_BASE_MODEM (auth); + GTask *task; task = g_task_new (self, self->priv->authp_cancellable, callback, user_data); - /* When running in the session bus for tests, default to always allow */ - if (mm_context_get_test_session ()) { - g_task_return_boolean (task, TRUE); - g_object_unref (task); - return; - } - mm_auth_provider_authorize (self->priv->authp, invocation, authorization, @@ -1828,10 +1837,10 @@ mm_base_modem_authorize (MMBaseModem *self, /* Exclusive operation */ typedef struct { - gssize id; - MMBaseModemOperationPriority priority; - gchar *description; - GTask *wait_task; + gssize id; + MMOperationPriority priority; + gchar *description; + GTask *wait_task; } OperationInfo; static void @@ -1844,7 +1853,7 @@ operation_info_free (OperationInfo *info) /* Exclusive operation lock */ -gssize +static gssize mm_base_modem_operation_lock_finish (MMBaseModem *self, GAsyncResult *res, GError **error) @@ -1869,7 +1878,7 @@ base_modem_operation_run (MMBaseModem *self) /* Run the operation in head of the list */ mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: lock acquired", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); task = g_steal_pointer (&info->wait_task); g_task_return_int (task, info->id); @@ -1912,7 +1921,7 @@ abort_pending_operations (MMBaseModem *self) g_assert (info->wait_task); mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: aborted early", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); task = g_steal_pointer (&info->wait_task); @@ -1925,12 +1934,12 @@ abort_pending_operations (MMBaseModem *self) self->priv->scheduled_operations = head; } -void -mm_base_modem_operation_lock (MMBaseModem *self, - MMBaseModemOperationPriority priority, - const gchar *description, - GAsyncReadyCallback callback, - gpointer user_data) +static void +mm_base_modem_operation_lock (MMBaseModem *self, + MMOperationPriority priority, + const gchar *description, + GAsyncReadyCallback callback, + gpointer user_data) { GTask *task; OperationInfo *info; @@ -1957,19 +1966,19 @@ mm_base_modem_operation_lock (MMBaseModem *self, } else operation_id++; - if (info->priority == MM_BASE_MODEM_OPERATION_PRIORITY_OVERRIDE) { + if (info->priority == MM_OPERATION_PRIORITY_OVERRIDE) { mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: override requested - no new operations will be allowed", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); g_assert (!self->priv->scheduled_operations_forbidden_forever); self->priv->scheduled_operations_forbidden_forever = TRUE; abort_pending_operations (self); self->priv->scheduled_operations = g_list_append (self->priv->scheduled_operations, info); - } else if (info->priority == MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT) { + } else if (info->priority == MM_OPERATION_PRIORITY_DEFAULT) { mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: scheduled", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); self->priv->scheduled_operations = g_list_append (self->priv->scheduled_operations, info); } else @@ -1980,10 +1989,11 @@ mm_base_modem_operation_lock (MMBaseModem *self, /* Exclusive operation unlock */ -void -mm_base_modem_operation_unlock (MMBaseModem *self, - gssize operation_id) +static void +mm_base_modem_operation_unlock (MMIfaceOpLock *_self, + gssize operation_id) { + MMBaseModem *self = MM_BASE_MODEM (_self); OperationInfo *info; g_assert (self->priv->scheduled_operations); @@ -1994,7 +2004,7 @@ mm_base_modem_operation_unlock (MMBaseModem *self, mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: lock released", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); /* Remove head list item and free its contents */ @@ -2009,9 +2019,9 @@ mm_base_modem_operation_unlock (MMBaseModem *self, /*****************************************************************************/ typedef struct { - GDBusMethodInvocation *invocation; - MMBaseModemOperationPriority operation_priority; - gchar *operation_description; + GDBusMethodInvocation *invocation; + MMOperationPriority operation_priority; + gchar *operation_description; } AuthorizeAndOperationLockContext; static void @@ -2022,8 +2032,8 @@ authorize_and_operation_lock_context_free (AuthorizeAndOperationLockContext *ctx g_slice_free (AuthorizeAndOperationLockContext, ctx); } -gssize -mm_base_modem_authorize_and_operation_lock_finish (MMBaseModem *self, +static gssize +mm_base_modem_authorize_and_operation_lock_finish (MMIfaceOpLock *self, GAsyncResult *res, GError **error) { @@ -2047,35 +2057,35 @@ lock_after_authorize_ready (MMBaseModem *self, } static void -authorize_before_lock_ready (MMBaseModem *self, +authorize_before_lock_ready (MMIfaceAuth *auth, GAsyncResult *res, GTask *task) { GError *error = NULL; AuthorizeAndOperationLockContext *ctx; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { g_task_return_error (task, error); g_object_unref (task); return; } ctx = g_task_get_task_data (task); - mm_base_modem_operation_lock (self, + mm_base_modem_operation_lock (MM_BASE_MODEM (auth), ctx->operation_priority, ctx->operation_description, (GAsyncReadyCallback) lock_after_authorize_ready, task); } -void -mm_base_modem_authorize_and_operation_lock (MMBaseModem *self, - GDBusMethodInvocation *invocation, - const gchar *authorization, - MMBaseModemOperationPriority operation_priority, - const gchar *operation_description, - GAsyncReadyCallback callback, - gpointer user_data) +static void +mm_base_modem_authorize_and_operation_lock (MMIfaceOpLock *self, + GDBusMethodInvocation *invocation, + const gchar *authorization, + MMOperationPriority operation_priority, + const gchar *operation_description, + GAsyncReadyCallback callback, + gpointer user_data) { GTask *task; AuthorizeAndOperationLockContext *ctx; @@ -2088,7 +2098,7 @@ mm_base_modem_authorize_and_operation_lock (MMBaseModem *self, ctx->operation_description = g_strdup (operation_description); g_task_set_task_data (task, ctx, (GDestroyNotify)authorize_and_operation_lock_context_free); - mm_base_modem_authorize (self, + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, authorization, (GAsyncReadyCallback)authorize_before_lock_ready, @@ -2631,6 +2641,21 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +auth_iface_init (MMIfaceAuthInterface *iface) +{ + iface->authorize = mm_base_modem_authorize; + iface->authorize_finish = mm_base_modem_authorize_finish; +} + +static void +op_lock_iface_init (MMIfaceOpLockInterface *iface) +{ + iface->authorize_and_lock = mm_base_modem_authorize_and_operation_lock; + iface->authorize_and_lock_finish = mm_base_modem_authorize_and_operation_lock_finish; + iface->unlock = mm_base_modem_operation_unlock; +} + +static void mm_base_modem_class_init (MMBaseModemClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -2728,7 +2753,7 @@ mm_base_modem_class_init (MMBaseModemClass *klass) g_object_class_install_property (object_class, PROP_SUBSYSTEM_DEVICE_ID, properties[PROP_SUBSYSTEM_DEVICE_ID]); properties[PROP_CONNECTION] = - g_param_spec_object (MM_BASE_MODEM_CONNECTION, + g_param_spec_object (MM_BINDABLE_CONNECTION, "Connection", "GDBus connection to the system bus.", G_TYPE_DBUS_CONNECTION, |