From 7262b46a82642b7232ef922b827d77626a93eec0 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 17 Apr 2025 21:06:17 -0500 Subject: base-modem,auth-provider: move testcase auth bypass to auth provider The bypass when in testcase mode has nothing to do with the base modem class; so make it generic. Signed-off-by: Dan Williams --- src/mm-auth-provider.c | 8 ++++++++ src/mm-base-modem.c | 7 ------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/mm-auth-provider.c b/src/mm-auth-provider.c index 5b4b13f3..38ec04d3 100644 --- a/src/mm-auth-provider.c +++ b/src/mm-auth-provider.c @@ -22,6 +22,7 @@ #include "mm-log-object.h" #include "mm-utils.h" #include "mm-auth-provider.h" +#include "mm-context.h" #if defined WITH_POLKIT # include @@ -128,6 +129,13 @@ mm_auth_provider_authorize (MMAuthProvider *self, task = g_task_new (self, 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; + } + #if defined WITH_POLKIT { AuthorizeContext *ctx; diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index 7e142327..6bf5b68d 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -1809,13 +1809,6 @@ mm_base_modem_authorize (MMBaseModem *self, 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, -- cgit v1.2.3-70-g09d2 From ef5cee3ab578c2fde8ca6cc636f10acfdb79f123 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 29 Apr 2025 20:54:36 -0500 Subject: auth-provider: move auth provider logic into each class Rather than make all of them rely on MMBaseModem for it. This lets us disentangle dependencies for easier unit testing. For interfaces, rather than casting directly to MMBaseModem use intermediate interfaces (MMIfaceAuth and MMIfaceOpLock) that tests can fake out. Signed-off-by: Dan Williams --- src/meson.build | 37 +++++- src/mm-auth-provider.c | 37 ++++++ src/mm-auth-provider.h | 35 ++++++ src/mm-base-bearer.c | 51 ++++---- src/mm-base-call.c | 151 ++++++++++------------ src/mm-base-manager.c | 6 +- src/mm-base-modem.c | 175 +++++++++++++++----------- src/mm-base-modem.h | 114 +++++------------ src/mm-base-sim.c | 81 ++++++------ src/mm-base-sms.c | 53 ++++---- src/mm-device.c | 6 +- src/mm-iface-modem-3gpp-profile-manager.c | 18 +-- src/mm-iface-modem-3gpp-ussd.c | 18 +-- src/mm-iface-modem-3gpp.c | 91 ++++++++------ src/mm-iface-modem-cdma.c | 14 ++- src/mm-iface-modem-cell-broadcast.c | 15 ++- src/mm-iface-modem-firmware.c | 14 ++- src/mm-iface-modem-location.c | 35 +++--- src/mm-iface-modem-messaging.c | 25 ++-- src/mm-iface-modem-oma.c | 28 +++-- src/mm-iface-modem-sar.c | 14 ++- src/mm-iface-modem-signal.c | 12 +- src/mm-iface-modem-simple.c | 16 +-- src/mm-iface-modem-time.c | 11 +- src/mm-iface-modem-voice.c | 56 +++++---- src/mm-iface-modem.c | 200 ++++++++++++++++-------------- src/mm-iface-op-lock.c | 71 +++++++++++ src/mm-iface-op-lock.h | 79 ++++++++++++ 28 files changed, 873 insertions(+), 590 deletions(-) create mode 100644 src/mm-iface-op-lock.c create mode 100644 src/mm-iface-op-lock.h diff --git a/src/meson.build b/src/meson.build index f2a53625..7516a6ee 100644 --- a/src/meson.build +++ b/src/meson.build @@ -206,10 +206,43 @@ libport_dep = declare_dependency( link_with: libport, ) +# auth provider library +sources = files( + 'mm-auth-provider.c', + 'mm-context.c', +) + +incs = [ + top_inc, + kerneldevice_inc, +] + +deps = [libmm_glib_dep, libhelpers_dep] + +if enable_polkit + deps += polkit_gobject_dep +endif + +private_deps = [] + +libauth = static_library( + 'auth', + sources: sources, + include_directories: incs, + dependencies: deps, + c_args: '-DPLUGINDIR="@0@"'.format(mm_prefix / mm_pkglibdir), +) + +libauth_dep = declare_dependency( + include_directories: ['.', kerneldevice_inc], + dependencies: deps, + link_with: libauth, +) + # Daemon enums, required by plugins headers = files( 'mm-base-bearer.h', - 'mm-base-modem.h', + 'mm-iface-op-lock.h', 'mm-filter.h', 'mm-port-probe.h', ) @@ -292,6 +325,7 @@ sources = files( 'mm-iface-modem-simple.c', 'mm-iface-modem-time.c', 'mm-iface-modem-voice.c', + 'mm-iface-op-lock.c', 'mm-log-helpers.c', 'mm-plugin.c', 'mm-plugin-manager.c', @@ -308,6 +342,7 @@ deps = [ gmodule_dep, libport_dep, libqcdm_dep, + libauth_dep, ] if enable_tests diff --git a/src/mm-auth-provider.c b/src/mm-auth-provider.c index 38ec04d3..2455da30 100644 --- a/src/mm-auth-provider.c +++ b/src/mm-auth-provider.c @@ -226,3 +226,40 @@ mm_auth_provider_class_init (MMAuthProviderClass *class) } MM_DEFINE_SINGLETON_GETTER (MMAuthProvider, mm_auth_provider_get, MM_TYPE_AUTH_PROVIDER) + +/*****************************************************************************/ +/* Auth interface */ + +G_DEFINE_INTERFACE (MMIfaceAuth, mm_iface_auth, G_TYPE_OBJECT) + +void +mm_iface_auth_authorize (MMIfaceAuth *self, + GDBusMethodInvocation *invocation, + const gchar *authorization, + GAsyncReadyCallback callback, + gpointer user_data) +{ + g_assert (MM_IFACE_AUTH_GET_IFACE (self)->authorize != NULL); + + MM_IFACE_AUTH_GET_IFACE (self)->authorize (self, + invocation, + authorization, + callback, + user_data); +} + +gboolean +mm_iface_auth_authorize_finish (MMIfaceAuth *self, + GAsyncResult *res, + GError **error) +{ + g_assert (MM_IFACE_AUTH_GET_IFACE (self)->authorize_finish != NULL); + + return MM_IFACE_AUTH_GET_IFACE (self)->authorize_finish (self, res, error); +} + +static void +mm_iface_auth_default_init (MMIfaceAuthInterface *iface) +{ +} + diff --git a/src/mm-auth-provider.h b/src/mm-auth-provider.h index 6065c806..2167cd59 100644 --- a/src/mm-auth-provider.h +++ b/src/mm-auth-provider.h @@ -56,4 +56,39 @@ gboolean mm_auth_provider_authorize_finish (MMAuthProvider *self, GAsyncResult *res, GError **error); +/*****************************************************************************/ +/* Auth interface + * + * Implemented by objects (mainly MMBaseModem) that provide authorization + * capability to other interfaces (MMIfaceModem) since GLib interfaces don't + * have private data to store the singletone. + */ + +#define MM_TYPE_IFACE_AUTH mm_iface_auth_get_type () +G_DECLARE_INTERFACE (MMIfaceAuth, mm_iface_auth, MM, IFACE_AUTH, GObject) + +struct _MMIfaceAuthInterface { + GTypeInterface g_iface; + + void (* authorize) (MMIfaceAuth *self, + GDBusMethodInvocation *invocation, + const gchar *authorization, + GAsyncReadyCallback callback, + gpointer user_data); + + gboolean (* authorize_finish) (MMIfaceAuth *self, + GAsyncResult *res, + GError **error); +}; + +void mm_iface_auth_authorize (MMIfaceAuth *self, + GDBusMethodInvocation *invocation, + const gchar *authorization, + GAsyncReadyCallback callback, + gpointer user_data); + +gboolean mm_iface_auth_authorize_finish (MMIfaceAuth *self, + GAsyncResult *res, + GError **error); + #endif /* MM_AUTH_PROVIDER_H */ diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c index 52e8db02..3c7d2d99 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -41,6 +41,7 @@ #include "mm-error-helpers.h" #include "mm-bearer-stats.h" #include "mm-dispatcher-connection.h" +#include "mm-auth-provider.h" /* We require up to 20s to get a proper IP when using PPP */ #define BEARER_IP_TIMEOUT_DEFAULT 20 @@ -83,6 +84,10 @@ struct _MMBaseBearerPrivate { GDBusConnection *connection; guint dbus_id; + /* The authorization provider */ + MMAuthProvider *authp; + GCancellable *authp_cancellable; + /* The modem which owns this BEARER */ MMBaseModem *modem; /* The path where the BEARER object is exported */ @@ -1118,7 +1123,6 @@ mm_base_bearer_connect (MMBaseBearer *self, typedef struct { MMBaseBearer *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleConnectContext; @@ -1126,7 +1130,6 @@ static void handle_connect_context_free (HandleConnectContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_free (ctx); } @@ -1147,13 +1150,13 @@ handle_connect_ready (MMBaseBearer *self, } static void -handle_connect_auth_ready (MMBaseModem *modem, +handle_connect_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleConnectContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_connect_context_free (ctx); return; @@ -1174,15 +1177,13 @@ handle_connect (MMBaseBearer *self, ctx = g_new0 (HandleConnectContext, 1); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_BEARER_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - (GAsyncReadyCallback)handle_connect_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_connect_auth_ready, + ctx); return TRUE; } @@ -1307,7 +1308,6 @@ mm_base_bearer_disconnect (MMBaseBearer *self, typedef struct { MMBaseBearer *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleDisconnectContext; @@ -1315,7 +1315,6 @@ static void handle_disconnect_context_free (HandleDisconnectContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_free (ctx); } @@ -1336,13 +1335,13 @@ handle_disconnect_ready (MMBaseBearer *self, } static void -handle_disconnect_auth_ready (MMBaseModem *modem, +handle_disconnect_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleDisconnectContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_disconnect_context_free (ctx); return; @@ -1363,15 +1362,13 @@ handle_disconnect (MMBaseBearer *self, ctx = g_new0 (HandleDisconnectContext, 1); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_BEARER_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - (GAsyncReadyCallback)handle_disconnect_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_disconnect_auth_ready, + ctx); return TRUE; } @@ -1835,6 +1832,10 @@ mm_base_bearer_init (MMBaseBearer *self) /* Each bearer is given a unique id to build its own DBus path */ self->priv->dbus_id = id++; + /* Setup authorization provider */ + self->priv->authp = mm_auth_provider_get (); + self->priv->authp_cancellable = g_cancellable_new (); + self->priv->status = MM_BEARER_STATUS_DISCONNECTED; self->priv->reason_3gpp = CONNECTION_FORBIDDEN_REASON_NONE; self->priv->reason_cdma = CONNECTION_FORBIDDEN_REASON_NONE; @@ -1886,6 +1887,8 @@ dispose (GObject *object) g_clear_object (&self->priv->modem); g_clear_object (&self->priv->config); + g_cancellable_cancel (self->priv->authp_cancellable); + g_clear_object (&self->priv->authp_cancellable); G_OBJECT_CLASS (mm_base_bearer_parent_class)->dispose (object); } diff --git a/src/mm-base-call.c b/src/mm-base-call.c index ab77a564..c1408559 100644 --- a/src/mm-base-call.c +++ b/src/mm-base-call.c @@ -59,6 +59,10 @@ struct _MMBaseCallPrivate { GDBusConnection *connection; guint dbus_id; + /* The authorization provider */ + MMAuthProvider *authp; + GCancellable *authp_cancellable; + /* The modem which owns this call */ MMBaseModem *modem; /* The path where the call object is exported */ @@ -139,7 +143,6 @@ mm_base_call_change_audio_settings (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleStartContext; @@ -147,7 +150,6 @@ static void handle_start_context_free (HandleStartContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_free (ctx); } @@ -203,14 +205,14 @@ handle_start_ready (MMBaseCall *self, } static void -handle_start_auth_ready (MMBaseModem *modem, +handle_start_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleStartContext *ctx) { MMCallState state; GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_base_call_change_state (ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_UNKNOWN); mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_start_context_free (ctx); @@ -230,7 +232,7 @@ handle_start_auth_ready (MMBaseModem *modem, mm_obj_info (ctx->self, "processing user request to start voice call..."); /* Disallow non-emergency calls when in emergency-only state */ - if (!mm_iface_modem_voice_authorize_outgoing_call (MM_IFACE_MODEM_VOICE (modem), ctx->self, &error)) { + if (!mm_iface_modem_voice_authorize_outgoing_call (MM_IFACE_MODEM_VOICE (ctx->self->priv->modem), ctx->self, &error)) { mm_base_call_change_state (ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_UNKNOWN); mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_start_context_free (ctx); @@ -268,15 +270,13 @@ handle_start (MMBaseCall *self, ctx = g_new0 (HandleStartContext, 1); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_CALL_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_VOICE, - (GAsyncReadyCallback)handle_start_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_VOICE, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_start_auth_ready, + ctx); return TRUE; } @@ -285,7 +285,6 @@ handle_start (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleAcceptContext; @@ -293,7 +292,6 @@ static void handle_accept_context_free (HandleAcceptContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_free (ctx); } @@ -324,14 +322,14 @@ handle_accept_ready (MMBaseCall *self, } static void -handle_accept_auth_ready (MMBaseModem *modem, +handle_accept_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleAcceptContext *ctx) { MMCallState state; GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_accept_context_free (ctx); return; @@ -372,13 +370,11 @@ handle_accept (MMBaseCall *self, ctx = g_new0 (HandleAcceptContext, 1); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_CALL_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, + mm_auth_provider_authorize (self->priv->authp, invocation, MM_AUTHORIZATION_VOICE, + self->priv->authp_cancellable, (GAsyncReadyCallback)handle_accept_auth_ready, ctx); return TRUE; @@ -389,7 +385,6 @@ handle_accept (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; gchar *number; } HandleDeflectContext; @@ -399,7 +394,6 @@ handle_deflect_context_free (HandleDeflectContext *ctx) { g_free (ctx->number); g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_slice_free (HandleDeflectContext, ctx); } @@ -425,14 +419,14 @@ handle_deflect_ready (MMBaseCall *self, } static void -handle_deflect_auth_ready (MMBaseModem *modem, +handle_deflect_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleDeflectContext *ctx) { MMCallState state; GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_deflect_context_free (ctx); return; @@ -475,15 +469,13 @@ handle_deflect (MMBaseCall *self, ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); ctx->number = g_strdup (number); - g_object_get (self, - MM_BASE_CALL_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_VOICE, - (GAsyncReadyCallback)handle_deflect_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_VOICE, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_deflect_auth_ready, + ctx); return TRUE; } @@ -492,7 +484,6 @@ handle_deflect (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleJoinMultipartyContext; @@ -500,7 +491,6 @@ static void handle_join_multiparty_context_free (HandleJoinMultipartyContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_free (ctx); } @@ -520,13 +510,13 @@ modem_voice_join_multiparty_ready (MMIfaceModemVoice *modem, } static void -handle_join_multiparty_auth_ready (MMBaseModem *modem, - GAsyncResult *res, +handle_join_multiparty_auth_ready (MMAuthProvider *authp, + GAsyncResult *res, HandleJoinMultipartyContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_join_multiparty_context_free (ctx); return; @@ -537,7 +527,7 @@ handle_join_multiparty_auth_ready (MMBaseModem *modem, /* This action is provided in the Call API, but implemented in the Modem.Voice interface * logic, because the action affects not only one call object, but all call objects that * are part of the multiparty call. */ - mm_iface_modem_voice_join_multiparty (MM_IFACE_MODEM_VOICE (ctx->modem), + mm_iface_modem_voice_join_multiparty (MM_IFACE_MODEM_VOICE (ctx->self->priv->modem), ctx->self, (GAsyncReadyCallback)modem_voice_join_multiparty_ready, ctx); @@ -552,15 +542,13 @@ handle_join_multiparty (MMBaseCall *self, ctx = g_new0 (HandleJoinMultipartyContext, 1); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_CALL_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_VOICE, - (GAsyncReadyCallback)handle_join_multiparty_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_VOICE, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_join_multiparty_auth_ready, + ctx); return TRUE; } @@ -569,7 +557,6 @@ handle_join_multiparty (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleLeaveMultipartyContext; @@ -577,7 +564,6 @@ static void handle_leave_multiparty_context_free (HandleLeaveMultipartyContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_free (ctx); } @@ -598,13 +584,13 @@ modem_voice_leave_multiparty_ready (MMIfaceModemVoice *modem, } static void -handle_leave_multiparty_auth_ready (MMBaseModem *modem, +handle_leave_multiparty_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleLeaveMultipartyContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_leave_multiparty_context_free (ctx); return; @@ -615,7 +601,7 @@ handle_leave_multiparty_auth_ready (MMBaseModem *modem, /* This action is provided in the Call API, but implemented in the Modem.Voice interface * logic, because the action affects not only one call object, but all call objects that * are part of the multiparty call. */ - mm_iface_modem_voice_leave_multiparty (MM_IFACE_MODEM_VOICE (ctx->modem), + mm_iface_modem_voice_leave_multiparty (MM_IFACE_MODEM_VOICE (ctx->self->priv->modem), ctx->self, (GAsyncReadyCallback)modem_voice_leave_multiparty_ready, ctx); @@ -630,15 +616,13 @@ handle_leave_multiparty (MMBaseCall *self, ctx = g_new0 (HandleLeaveMultipartyContext, 1); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_CALL_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_VOICE, - (GAsyncReadyCallback)handle_leave_multiparty_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_VOICE, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_leave_multiparty_auth_ready, + ctx); return TRUE; } @@ -647,7 +631,6 @@ handle_leave_multiparty (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleHangupContext; @@ -655,7 +638,6 @@ static void handle_hangup_context_free (HandleHangupContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_free (ctx); } @@ -681,14 +663,14 @@ handle_hangup_ready (MMBaseCall *self, } static void -handle_hangup_auth_ready (MMBaseModem *modem, +handle_hangup_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleHangupContext *ctx) { MMCallState state; GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_hangup_context_free (ctx); return; @@ -728,15 +710,13 @@ handle_hangup (MMBaseCall *self, ctx = g_new0 (HandleHangupContext, 1); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_CALL_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_VOICE, - (GAsyncReadyCallback)handle_hangup_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_VOICE, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_hangup_auth_ready, + ctx); return TRUE; } @@ -745,7 +725,6 @@ handle_hangup (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; gchar *dtmf; } HandleSendDtmfContext; @@ -754,7 +733,6 @@ static void handle_send_dtmf_context_free (HandleSendDtmfContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_free (ctx->dtmf); g_free (ctx); @@ -777,14 +755,14 @@ handle_send_dtmf_ready (MMBaseCall *self, } static void -handle_send_dtmf_auth_ready (MMBaseModem *modem, +handle_send_dtmf_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleSendDtmfContext *ctx) { MMCallState state; GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_send_dtmf_context_free (ctx); return; @@ -825,17 +803,14 @@ handle_send_dtmf (MMBaseCall *self, ctx = g_new0 (HandleSendDtmfContext, 1); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - ctx->dtmf = g_strdup (dtmf); - g_object_get (self, - MM_BASE_CALL_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_VOICE, - (GAsyncReadyCallback)handle_send_dtmf_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_VOICE, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_send_dtmf_auth_ready, + ctx); return TRUE; } @@ -1447,6 +1422,10 @@ mm_base_call_init (MMBaseCall *self) /* Each call is given a unique id to build its own DBus path */ self->priv->dbus_id = id++; + + /* Setup authorization provider */ + self->priv->authp = mm_auth_provider_get (); + self->priv->authp_cancellable = g_cancellable_new (); } static void @@ -1480,6 +1459,8 @@ dispose (GObject *object) } g_clear_object (&self->priv->modem); + g_cancellable_cancel (self->priv->authp_cancellable); + g_clear_object (&self->priv->authp_cancellable); G_OBJECT_CLASS (mm_base_call_parent_class)->dispose (object); } diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c index f473ef2a..3110c2a7 100644 --- a/src/mm-base-manager.c +++ b/src/mm-base-manager.c @@ -992,8 +992,8 @@ device_shutdown_step (GTask *task) "disabling modem%d", mm_base_modem_get_dbus_id (ctx->modem)); mm_base_modem_disable (ctx->modem, - MM_BASE_MODEM_OPERATION_LOCK_REQUIRED, - MM_BASE_MODEM_OPERATION_PRIORITY_OVERRIDE, + MM_OPERATION_LOCK_REQUIRED, + MM_OPERATION_PRIORITY_OVERRIDE, (GAsyncReadyCallback)shutdown_disable_ready, task); return; @@ -1228,7 +1228,7 @@ mm_base_manager_sync (MMBaseManager *self) /* We just want to start the synchronization, we don't need the result */ if (modem) { mm_base_modem_sync (modem, - MM_BASE_MODEM_OPERATION_LOCK_REQUIRED, + MM_OPERATION_LOCK_REQUIRED, (GAsyncReadyCallback)base_modem_sync_ready, NULL); } diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index 6bf5b68d..2e4337fe 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -41,9 +41,13 @@ #include "mm-modem-helpers.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 +154,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 +788,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 +835,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 +892,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 +919,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 +944,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 +969,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 +993,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 +1789,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,14 +1812,15 @@ 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); @@ -1821,10 +1836,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 @@ -1837,7 +1852,7 @@ operation_info_free (OperationInfo *info) /* Exclusive operation lock */ -gssize +static gssize mm_base_modem_operation_lock_finish (MMBaseModem *self, GAsyncResult *res, GError **error) @@ -1862,7 +1877,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); @@ -1905,7 +1920,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); @@ -1918,12 +1933,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; @@ -1950,19 +1965,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 @@ -1973,10 +1988,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); @@ -1987,7 +2003,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 */ @@ -2002,9 +2018,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 @@ -2015,8 +2031,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) { @@ -2040,35 +2056,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; @@ -2081,7 +2097,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, @@ -2623,6 +2639,21 @@ log_object_iface_init (MMLogObjectInterface *iface) iface->build_id = log_object_build_id; } +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) { diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h index 0bcd974a..acdaec3c 100644 --- a/src/mm-base-modem.h +++ b/src/mm-base-modem.h @@ -36,6 +36,7 @@ #include "mm-port-serial-qcdm.h" #include "mm-port-serial-gps.h" #include "mm-iface-port-at.h" +#include "mm-iface-op-lock.h" #if defined WITH_QMI #include "mm-port-qmi.h" @@ -220,94 +221,41 @@ guint mm_base_modem_get_subsystem_device_id (MMBaseModem *self); GCancellable *mm_base_modem_peek_cancellable (MMBaseModem *self); /******************************************************************************/ -/* Polkit */ - -void mm_base_modem_authorize (MMBaseModem *self, - GDBusMethodInvocation *invocation, - const gchar *authorization, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean mm_base_modem_authorize_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); +/* State operations */ -/******************************************************************************/ -/* Operation lock support */ - -typedef enum { /*< underscore_name=mm_base_modem_operation_priority >*/ - MM_BASE_MODEM_OPERATION_PRIORITY_UNKNOWN, - /* Default operations are scheduled at the end of the list of pending - * operations */ - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - /* An override operation will make all pending operations be cancelled, and - * it will also disallow adding new operations. This type of operation would - * be the last one expected in a modem object. */ - MM_BASE_MODEM_OPERATION_PRIORITY_OVERRIDE, -} MMBaseModemOperationPriority; - -void mm_base_modem_operation_lock (MMBaseModem *self, - MMBaseModemOperationPriority priority, - const gchar *description, - GAsyncReadyCallback callback, - gpointer user_data); -gssize mm_base_modem_operation_lock_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); -void mm_base_modem_operation_unlock (MMBaseModem *self, - gssize operation_id); - -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); -gssize mm_base_modem_authorize_and_operation_lock_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); +void mm_base_modem_initialize (MMBaseModem *self, + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_base_modem_initialize_finish (MMBaseModem *self, + GAsyncResult *res, + GError **error); -/******************************************************************************/ -/* State operations */ +void mm_base_modem_enable (MMBaseModem *self, + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_base_modem_enable_finish (MMBaseModem *self, + GAsyncResult *res, + GError **error); -typedef enum { - MM_BASE_MODEM_OPERATION_LOCK_REQUIRED, - MM_BASE_MODEM_OPERATION_LOCK_ALREADY_ACQUIRED, -} MMBaseModemOperationLock; - -void mm_base_modem_initialize (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean mm_base_modem_initialize_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); - -void mm_base_modem_enable (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean mm_base_modem_enable_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); - -void mm_base_modem_disable (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - MMBaseModemOperationPriority priority, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean mm_base_modem_disable_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); +void mm_base_modem_disable (MMBaseModem *self, + MMOperationLock operation_lock, + MMOperationPriority priority, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_base_modem_disable_finish (MMBaseModem *self, + GAsyncResult *res, + GError **error); #if defined WITH_SUSPEND_RESUME -void mm_base_modem_sync (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean mm_base_modem_sync_finish (MMBaseModem *self, - GAsyncResult *res, - GError **error); +void mm_base_modem_sync (MMBaseModem *self, + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_base_modem_sync_finish (MMBaseModem *self, + GAsyncResult *res, + GError **error); #endif void mm_base_modem_teardown_ports (MMBaseModem *self, diff --git a/src/mm-base-sim.c b/src/mm-base-sim.c index e3f3cd77..04dbcf65 100644 --- a/src/mm-base-sim.c +++ b/src/mm-base-sim.c @@ -63,6 +63,10 @@ struct _MMBaseSimPrivate { GDBusConnection *connection; guint dbus_id; + /* The authorization provider */ + MMAuthProvider *authp; + GCancellable *authp_cancellable; + /* The modem which owns this SIM */ MMBaseModem *modem; /* The path where the SIM object is exported */ @@ -238,13 +242,13 @@ handle_change_pin_ready (MMBaseSim *self, } static void -handle_change_pin_auth_ready (MMBaseModem *modem, +handle_change_pin_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleChangePinContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_change_pin_context_free (ctx); return; @@ -296,11 +300,12 @@ handle_change_pin (MMBaseSim *self, ctx->old_pin = g_strdup (old_pin); ctx->new_pin = g_strdup (new_pin); - mm_base_modem_authorize (self->priv->modem, - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - (GAsyncReadyCallback)handle_change_pin_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_change_pin_auth_ready, + ctx); return TRUE; } @@ -421,13 +426,13 @@ handle_enable_pin_ready (MMBaseSim *self, } static void -handle_enable_pin_auth_ready (MMBaseModem *modem, +handle_enable_pin_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleEnablePinContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_enable_pin_context_free (ctx); return; @@ -478,11 +483,12 @@ handle_enable_pin (MMBaseSim *self, ctx->pin = g_strdup (pin); ctx->enabled = enabled; - mm_base_modem_authorize (self->priv->modem, - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - (GAsyncReadyCallback)handle_enable_pin_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_enable_pin_auth_ready, + ctx); return TRUE; } @@ -844,13 +850,13 @@ handle_send_pin_ready (MMBaseSim *self, } static void -handle_send_pin_auth_ready (MMBaseModem *modem, +handle_send_pin_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleSendPinContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_send_pin_context_free (ctx); return; @@ -889,11 +895,12 @@ handle_send_pin (MMBaseSim *self, ctx->invocation = g_object_ref (invocation); ctx->pin = g_strdup (pin); - mm_base_modem_authorize (self->priv->modem, - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - (GAsyncReadyCallback)handle_send_pin_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_send_pin_auth_ready, + ctx); return TRUE; } @@ -948,13 +955,13 @@ handle_send_puk_ready (MMBaseSim *self, } static void -handle_send_puk_auth_ready (MMBaseModem *modem, +handle_send_puk_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleSendPukContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_send_puk_context_free (ctx); return; @@ -996,11 +1003,12 @@ handle_send_puk (MMBaseSim *self, ctx->puk = g_strdup (puk); ctx->new_pin = g_strdup (new_pin); - mm_base_modem_authorize (self->priv->modem, - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - (GAsyncReadyCallback)handle_send_puk_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_send_puk_auth_ready, + ctx); return TRUE; } @@ -1504,13 +1512,13 @@ handle_set_preferred_networks_ready (MMBaseSim *self, } static void -handle_set_preferred_networks_auth_ready (MMBaseModem *modem, +handle_set_preferred_networks_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleSetPreferredNetworksContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_preferred_networks_context_free (ctx); return; @@ -1558,11 +1566,12 @@ handle_set_preferred_networks (MMBaseSim *self, ctx->invocation = g_object_ref (invocation); ctx->networks = g_variant_ref (networks_variant); - mm_base_modem_authorize (self->priv->modem, - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - (GAsyncReadyCallback)handle_set_preferred_networks_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_set_preferred_networks_auth_ready, + ctx); return TRUE; } @@ -3047,6 +3056,8 @@ dispose (GObject *object) } g_clear_object (&self->priv->modem); + g_cancellable_cancel (self->priv->authp_cancellable); + g_clear_object (&self->priv->authp_cancellable); G_OBJECT_CLASS (mm_base_sim_parent_class)->dispose (object); } diff --git a/src/mm-base-sms.c b/src/mm-base-sms.c index 202b178f..f7d46321 100644 --- a/src/mm-base-sms.c +++ b/src/mm-base-sms.c @@ -36,6 +36,7 @@ #include "mm-log-object.h" #include "mm-modem-helpers.h" #include "mm-error-helpers.h" +#include "mm-auth-provider.h" static void log_object_iface_init (MMLogObjectInterface *iface); @@ -60,6 +61,10 @@ struct _MMBaseSmsPrivate { GDBusConnection *connection; guint dbus_id; + /* The authorization provider */ + MMAuthProvider *authp; + GCancellable *authp_cancellable; + /* The modem which owns this SMS */ MMBaseModem *modem; /* The path where the SMS object is exported */ @@ -324,7 +329,6 @@ generate_submit_pdus (MMBaseSms *self, typedef struct { MMBaseSms *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; MMSmsStorage storage; } HandleStoreContext; @@ -333,7 +337,6 @@ static void handle_store_context_free (HandleStoreContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_slice_free (HandleStoreContext, ctx); } @@ -406,13 +409,13 @@ prepare_sms_to_be_stored (MMBaseSms *self, } static void -handle_store_auth_ready (MMBaseModem *modem, +handle_store_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleStoreContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_store_context_free (ctx); return; @@ -442,7 +445,7 @@ handle_store_auth_ready (MMBaseModem *modem, } /* Check if the requested storage is allowed for storing */ - if (!mm_iface_modem_messaging_is_storage_supported_for_storing (MM_IFACE_MODEM_MESSAGING (ctx->modem), + if (!mm_iface_modem_messaging_is_storage_supported_for_storing (MM_IFACE_MODEM_MESSAGING (ctx->self->priv->modem), ctx->storage, &error)) { mm_obj_warn (ctx->self, "failed storing SMS message: %s", error->message); @@ -485,9 +488,6 @@ handle_store (MMBaseSms *self, ctx = g_slice_new0 (HandleStoreContext); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_SMS_MODEM, &ctx->modem, - NULL); ctx->storage = (MMSmsStorage)storage; if (ctx->storage == MM_SMS_STORAGE_UNKNOWN) { @@ -498,11 +498,12 @@ handle_store (MMBaseSms *self, g_assert (ctx->storage != MM_SMS_STORAGE_UNKNOWN); } - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_MESSAGING, - (GAsyncReadyCallback)handle_store_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_MESSAGING, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_store_auth_ready, + ctx); return TRUE; } @@ -511,7 +512,6 @@ handle_store (MMBaseSms *self, typedef struct { MMBaseSms *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleSendContext; @@ -519,7 +519,6 @@ static void handle_send_context_free (HandleSendContext *ctx) { g_object_unref (ctx->invocation); - g_object_unref (ctx->modem); g_object_unref (ctx->self); g_slice_free (HandleSendContext, ctx); } @@ -586,14 +585,14 @@ prepare_sms_to_be_sent (MMBaseSms *self, } static void -handle_send_auth_ready (MMBaseModem *modem, +handle_send_auth_ready (MMAuthProvider *authp, GAsyncResult *res, HandleSendContext *ctx) { MMSmsState state; GError *error = NULL; - if (!mm_base_modem_authorize_finish (modem, res, &error)) { + if (!mm_auth_provider_authorize_finish (authp, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_send_context_free (ctx); return; @@ -650,15 +649,13 @@ handle_send (MMBaseSms *self, ctx = g_slice_new0 (HandleSendContext); ctx->self = g_object_ref (self); ctx->invocation = g_object_ref (invocation); - g_object_get (self, - MM_BASE_SMS_MODEM, &ctx->modem, - NULL); - mm_base_modem_authorize (ctx->modem, - invocation, - MM_AUTHORIZATION_MESSAGING, - (GAsyncReadyCallback)handle_send_auth_ready, - ctx); + mm_auth_provider_authorize (self->priv->authp, + invocation, + MM_AUTHORIZATION_MESSAGING, + self->priv->authp_cancellable, + (GAsyncReadyCallback)handle_send_auth_ready, + ctx); return TRUE; } @@ -2071,6 +2068,10 @@ mm_base_sms_init (MMBaseSms *self) /* Each SMS is given a unique id to build its own DBus path */ self->priv->dbus_id = id++; + + /* Setup authorization provider */ + self->priv->authp = mm_auth_provider_get (); + self->priv->authp_cancellable = g_cancellable_new (); } static void @@ -2097,6 +2098,8 @@ dispose (GObject *object) } g_clear_object (&self->priv->modem); + g_cancellable_cancel (self->priv->authp_cancellable); + g_clear_object (&self->priv->authp_cancellable); G_OBJECT_CLASS (mm_base_sms_parent_class)->dispose (object); } diff --git a/src/mm-device.c b/src/mm-device.c index 96b7d874..b2e3541a 100644 --- a/src/mm-device.c +++ b/src/mm-device.c @@ -436,7 +436,7 @@ mm_device_initialize_modem (MMDevice *self) mm_obj_dbg (self, "modem initializing..."); mm_base_modem_initialize (modem, - MM_BASE_MODEM_OPERATION_LOCK_REQUIRED, + MM_OPERATION_LOCK_REQUIRED, (GAsyncReadyCallback)initialize_ready, g_object_ref (self)); } @@ -868,8 +868,8 @@ mm_device_inhibit (MMDevice *self, * an exclusive lock marked as override, so the modem object will not * allow any additional lock request any more. */ mm_base_modem_disable (self->priv->modem, - MM_BASE_MODEM_OPERATION_LOCK_REQUIRED, - MM_BASE_MODEM_OPERATION_PRIORITY_OVERRIDE, + MM_OPERATION_LOCK_REQUIRED, + MM_OPERATION_PRIORITY_OVERRIDE, (GAsyncReadyCallback)inhibit_disable_ready, task); } diff --git a/src/mm-iface-modem-3gpp-profile-manager.c b/src/mm-iface-modem-3gpp-profile-manager.c index d76202b7..abdc5f25 100644 --- a/src/mm-iface-modem-3gpp-profile-manager.c +++ b/src/mm-iface-modem-3gpp-profile-manager.c @@ -1109,13 +1109,13 @@ list_profiles_ready (MMIfaceModem3gppProfileManager *self, } static void -handle_list_auth_ready (MMBaseModem *self, +handle_list_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleListContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_list_context_free (ctx); return; @@ -1150,7 +1150,7 @@ handle_list (MmGdbusModem3gppProfileManager *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_list_auth_ready, @@ -1208,7 +1208,7 @@ set_profile_ready (MMIfaceModem3gppProfileManager *self, } static void -handle_set_auth_ready (MMBaseModem *self, +handle_set_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleSetContext *ctx) { @@ -1216,7 +1216,7 @@ handle_set_auth_ready (MMBaseModem *self, GError *error = NULL; g_autoptr(MM3gppProfile) profile_requested = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_context_free (ctx); return; @@ -1276,7 +1276,7 @@ handle_set (MmGdbusModem3gppProfileManager *skeleton, ctx->self = g_object_ref (self); ctx->requested_dictionary = requested_dictionary ? g_variant_ref (requested_dictionary) : NULL; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_set_auth_ready, @@ -1325,7 +1325,7 @@ delete_profile_ready (MMIfaceModem3gppProfileManager *self, } static void -handle_delete_auth_ready (MMBaseModem *self, +handle_delete_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleDeleteContext *ctx) { @@ -1335,7 +1335,7 @@ handle_delete_auth_ready (MMBaseModem *self, gint profile_id = MM_3GPP_PROFILE_ID_UNKNOWN; MMBearerApnType apn_type = MM_BEARER_APN_TYPE_NONE; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_delete_context_free (ctx); return; @@ -1428,7 +1428,7 @@ handle_delete (MmGdbusModem3gppProfileManager *skeleton, ctx->self = g_object_ref (self); ctx->dictionary = g_variant_ref (dictionary); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_delete_auth_ready, diff --git a/src/mm-iface-modem-3gpp-ussd.c b/src/mm-iface-modem-3gpp-ussd.c index 7a1be95c..484946ad 100644 --- a/src/mm-iface-modem-3gpp-ussd.c +++ b/src/mm-iface-modem-3gpp-ussd.c @@ -79,13 +79,13 @@ handle_cancel_ready (MMIfaceModem3gppUssd *self, } static void -handle_cancel_auth_ready (MMBaseModem *self, +handle_cancel_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleCancelContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_cancel_context_free (ctx); return; @@ -120,7 +120,7 @@ handle_cancel (MmGdbusModem3gppUssd *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_USSD, (GAsyncReadyCallback)handle_cancel_auth_ready, @@ -168,13 +168,13 @@ handle_respond_ready (MMIfaceModem3gppUssd *self, } static void -handle_respond_auth_ready (MMBaseModem *self, +handle_respond_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleRespondContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_respond_context_free (ctx); return; @@ -230,7 +230,7 @@ handle_respond (MmGdbusModem3gppUssd *skeleton, ctx->self = g_object_ref (self); ctx->command = g_strdup (command); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_USSD, (GAsyncReadyCallback)handle_respond_auth_ready, @@ -278,13 +278,13 @@ handle_initiate_ready (MMIfaceModem3gppUssd *self, } static void -handle_initiate_auth_ready (MMBaseModem *self, +handle_initiate_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleInitiateContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_initiate_context_free (ctx); return; @@ -340,7 +340,7 @@ handle_initiate (MmGdbusModem3gppUssd *skeleton, ctx->self = g_object_ref (self); ctx->command = g_strdup (command); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_USSD, (GAsyncReadyCallback)handle_initiate_auth_ready, diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c index c103fd13..490b68dc 100644 --- a/src/mm-iface-modem-3gpp.c +++ b/src/mm-iface-modem-3gpp.c @@ -30,6 +30,7 @@ #include "mm-error-helpers.h" #include "mm-log.h" #include "mm-log-helpers.h" +#include "mm-iface-op-lock.h" #define SUBSYSTEM_3GPP "3gpp" @@ -840,14 +841,15 @@ handle_register_ready (MMIfaceModem3gpp *self, } static void -handle_register_auth_ready (MMBaseModem *self, +handle_register_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleRegisterContext *ctx) { + MMIfaceModem3gpp *self = MM_IFACE_MODEM_3GPP (auth); MMModemState modem_state = MM_MODEM_STATE_UNKNOWN; GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_register_context_free (ctx); return; @@ -915,7 +917,7 @@ handle_register (MmGdbusModem3gpp *skeleton, ctx->self = g_object_ref (self); ctx->operator_id = g_strdup (operator_id); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_register_auth_ready, @@ -1007,13 +1009,14 @@ handle_scan_ready (MMIfaceModem3gpp *self, } static void -handle_scan_auth_ready (MMBaseModem *self, +handle_scan_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleScanContext *ctx) { + MMIfaceModem3gpp *self = MM_IFACE_MODEM_3GPP (auth); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_scan_context_free (ctx); return; @@ -1053,7 +1056,7 @@ handle_scan (MmGdbusModem3gpp *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_scan_auth_ready, @@ -1145,13 +1148,14 @@ handle_set_eps_ue_mode_operation_ready (MMIfaceModem3gpp *self } static void -handle_set_eps_ue_mode_operation_auth_ready (MMBaseModem *self, +handle_set_eps_ue_mode_operation_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleSetEpsUeModeOperationContext *ctx) { + MMIfaceModem3gpp *self = MM_IFACE_MODEM_3GPP (auth); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_eps_ue_mode_operation_context_free (ctx); return; @@ -1198,7 +1202,7 @@ handle_set_eps_ue_mode_operation (MmGdbusModem3gpp *skeleton, ctx->self = g_object_ref (self); ctx->mode = mode; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_set_eps_ue_mode_operation_auth_ready, @@ -1233,7 +1237,7 @@ static void handle_set_initial_eps_bearer_settings_context_free (HandleSetInitialEpsBearerSettingsContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_assert (!ctx->saved_error); g_clear_object (&ctx->config); @@ -1419,16 +1423,17 @@ handle_set_initial_eps_bearer_settings_step (HandleSetInitialEpsBearerSettingsCo } static void -set_initial_eps_bearer_settings_auth_ready (MMBaseModem *self, +set_initial_eps_bearer_settings_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleSetInitialEpsBearerSettingsContext *ctx) { + MMBaseModem *self = MM_BASE_MODEM (_self); gboolean force = FALSE; GError *error = NULL; GVariant *old_dictionary; g_autoptr(MMBearerProperties) old_config = NULL; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_initial_eps_bearer_settings_context_free (ctx); @@ -1488,13 +1493,13 @@ handle_set_initial_eps_bearer_settings (MmGdbusModem3gpp *skeleton, ctx->previous_power_state = MM_MODEM_POWER_STATE_UNKNOWN; ctx->operation_id = -1; - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - "set-initial-eps-bearer-settings", - (GAsyncReadyCallback)set_initial_eps_bearer_settings_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + "set-initial-eps-bearer-settings", + (GAsyncReadyCallback)set_initial_eps_bearer_settings_auth_ready, + ctx); return TRUE; } @@ -1572,13 +1577,14 @@ handle_disable_facility_lock_ready (MMIfaceModem3gpp *self, } static void -disable_facility_lock_auth_ready (MMBaseModem *self, +disable_facility_lock_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleDisableFacilityLockContext *ctx) { + MMIfaceModem3gpp *self = MM_IFACE_MODEM_3GPP (auth); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_disable_facility_lock_context_free (ctx); return; @@ -1648,7 +1654,7 @@ handle_disable_facility_lock (MmGdbusModem3gpp *skeleton, ctx->self = g_object_ref (self); ctx->dictionary = g_variant_ref (dictionary); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)disable_facility_lock_auth_ready, @@ -1749,13 +1755,14 @@ internal_set_packet_service_state_ready (MMIfaceModem3gpp *self, } static void -set_packet_service_state_auth_ready (MMBaseModem *self, +set_packet_service_state_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandlePacketServiceStateContext *ctx) { + MMIfaceModem3gpp *self = MM_IFACE_MODEM_3GPP (auth); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_packet_service_state_context_free (ctx); return; @@ -1798,7 +1805,7 @@ handle_set_packet_service_state (MmGdbusModem3gpp *skeleton, ctx->self = g_object_ref (self); ctx->packet_service_state = packet_service_state; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)set_packet_service_state_auth_ready, @@ -1821,7 +1828,7 @@ static void handle_set_nr5g_registration_settings_context_free (HandleSetNr5gRegistrationSettingsContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_clear_object (&ctx->settings); g_variant_unref (ctx->dictionary); @@ -1893,17 +1900,18 @@ set_nr5g_registration_settings_ready (MMIfaceModem3gpp * } static void -set_nr5g_registration_settings_auth_ready (MMBaseModem *self, +set_nr5g_registration_settings_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleSetNr5gRegistrationSettingsContext *ctx) { + MMBaseModem *self = MM_BASE_MODEM (_self); GError *error = NULL; GVariant *old_dictionary; g_autoptr(MMNr5gRegistrationSettings) old_settings = NULL; MMModem3gppDrxCycle new_drx_cycle; MMModem3gppMicoMode new_mico_mode; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_nr5g_registration_settings_context_free (ctx); @@ -1979,13 +1987,13 @@ handle_set_nr5g_registration_settings (MmGdbusModem3gpp *skeleton, ctx->dictionary = g_variant_ref (dictionary); ctx->operation_id = -1; - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - "set-nr5g-registration-settings", - (GAsyncReadyCallback)set_nr5g_registration_settings_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + "set-nr5g-registration-settings", + (GAsyncReadyCallback)set_nr5g_registration_settings_auth_ready, + ctx); return TRUE; } @@ -3595,15 +3603,16 @@ handle_set_carrier_lock_ready (MMIfaceModem3gpp *self, } static void -handle_set_carrier_lock_auth_ready (MMBaseModem *self, +handle_set_carrier_lock_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleSetCarrierLockContext *ctx) { - GError *error = NULL; - const guint8 *data; - gsize data_size; + MMIfaceModem3gpp *self = MM_IFACE_MODEM_3GPP (auth); + GError *error = NULL; + const guint8 *data; + gsize data_size; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_carrier_lock_context_free (ctx); return; @@ -3642,7 +3651,7 @@ handle_set_carrier_lock (MmGdbusModem3gpp *skeleton, ctx->self = g_object_ref (self); ctx->data = g_variant_ref (data); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_set_carrier_lock_auth_ready, diff --git a/src/mm-iface-modem-cdma.c b/src/mm-iface-modem-cdma.c index 14d1ae9a..9cf5872c 100644 --- a/src/mm-iface-modem-cdma.c +++ b/src/mm-iface-modem-cdma.c @@ -136,17 +136,18 @@ handle_activate_ready (MMIfaceModemCdma *self, } static void -handle_activate_auth_ready (MMBaseModem *self, +handle_activate_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleActivateContext *ctx) { + MMIfaceModemCdma *self = MM_IFACE_MODEM_CDMA (_self); Private *priv; MMModemState modem_state; GError *error = NULL; priv = get_private (MM_IFACE_MODEM_CDMA (self)); - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_activate_context_free (ctx); return; @@ -254,7 +255,7 @@ handle_activate (MmGdbusModemCdma *skeleton, ctx->self = g_object_ref (self); ctx->carrier = g_strdup (carrier); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_activate_auth_ready, @@ -302,10 +303,11 @@ handle_activate_manual_ready (MMIfaceModemCdma *self, } static void -handle_activate_manual_auth_ready (MMBaseModem *self, +handle_activate_manual_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleActivateManualContext *ctx) { + MMIfaceModemCdma *self = MM_IFACE_MODEM_CDMA (_self); MMCdmaManualActivationProperties *properties; Private *priv; MMModemState modem_state; @@ -313,7 +315,7 @@ handle_activate_manual_auth_ready (MMBaseModem *self, priv = get_private (MM_IFACE_MODEM_CDMA (self)); - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_activate_manual_context_free (ctx); return; @@ -422,7 +424,7 @@ handle_activate_manual (MmGdbusModemCdma *skeleton, ctx->self = g_object_ref (self); ctx->dictionary = g_variant_ref (dictionary); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_activate_manual_auth_ready, diff --git a/src/mm-iface-modem-cell-broadcast.c b/src/mm-iface-modem-cell-broadcast.c index f543d8f9..b29d01c5 100644 --- a/src/mm-iface-modem-cell-broadcast.c +++ b/src/mm-iface-modem-cell-broadcast.c @@ -79,13 +79,14 @@ set_channels_ready (MMIfaceModemCellBroadcast *self, } static void -handle_set_channels_auth_ready (MMBaseModem *self, +handle_set_channels_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSetChannelsCellBroadcastContext *ctx) { + MMIfaceModemCellBroadcast *self = MM_IFACE_MODEM_CELL_BROADCAST (_self); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_channels_context_free (ctx); return; @@ -128,7 +129,8 @@ handle_set_channels (MmGdbusModemCellBroadcast *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); ctx->channels = mm_common_cell_broadcast_channels_variant_to_garray (channels); - mm_base_modem_authorize (MM_BASE_MODEM (self), + + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_set_channels_auth_ready, @@ -173,14 +175,15 @@ handle_delete_ready (MMCbmList *list, } static void -handle_delete_auth_ready (MMBaseModem *self, +handle_delete_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleDeleteContext *ctx) { + MMIfaceModemCellBroadcast *self = MM_IFACE_MODEM_CELL_BROADCAST (_self); g_autoptr(MMCbmList) list = NULL; GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_delete_context_free (ctx); return; @@ -229,7 +232,7 @@ handle_delete (MmGdbusModemCellBroadcast *skeleton, ctx->self = g_object_ref (self); ctx->path = g_strdup (path); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_CELL_BROADCAST, (GAsyncReadyCallback)handle_delete_auth_ready, diff --git a/src/mm-iface-modem-firmware.c b/src/mm-iface-modem-firmware.c index c71254c4..f13e4a4c 100644 --- a/src/mm-iface-modem-firmware.c +++ b/src/mm-iface-modem-firmware.c @@ -180,13 +180,14 @@ load_list_ready (MMIfaceModemFirmware *self, } static void -list_auth_ready (MMBaseModem *self, +list_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleListContext *ctx) { + MMIfaceModemFirmware *self = MM_IFACE_MODEM_FIRMWARE (_self); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_list_context_free (ctx); return; @@ -221,7 +222,7 @@ handle_list (MmGdbusModemFirmware *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_FIRMWARE, (GAsyncReadyCallback)list_auth_ready, @@ -265,13 +266,14 @@ change_current_ready (MMIfaceModemFirmware *self, } static void -select_auth_ready (MMBaseModem *self, +select_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSelectContext *ctx) { + MMIfaceModemFirmware *self = MM_IFACE_MODEM_FIRMWARE (_self); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_select_context_free (ctx); return; @@ -308,7 +310,7 @@ handle_select (MmGdbusModemFirmware *skeleton, ctx->self = g_object_ref (self); ctx->name = g_strdup (name); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_FIRMWARE, (GAsyncReadyCallback)select_auth_ready, diff --git a/src/mm-iface-modem-location.c b/src/mm-iface-modem-location.c index 7ce16a16..d891cb01 100644 --- a/src/mm-iface-modem-location.c +++ b/src/mm-iface-modem-location.c @@ -924,10 +924,11 @@ setup_gathering_ready (MMIfaceModemLocation *self, } static void -handle_setup_auth_ready (MMBaseModem *self, +handle_setup_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSetupContext *ctx) { + MMIfaceModemLocation *self = MM_IFACE_MODEM_LOCATION (_self); GError *error = NULL; MMModemState modem_state; MMModemLocationSource not_supported; @@ -935,7 +936,7 @@ handle_setup_auth_ready (MMBaseModem *self, LocationContext *location_ctx; g_autofree gchar *str = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_setup_context_free (ctx); return; @@ -1018,7 +1019,7 @@ handle_setup (MmGdbusModemLocation *skeleton, ctx->sources = sources; ctx->signal_location = signal_location; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_setup_auth_ready, @@ -1063,13 +1064,14 @@ set_supl_server_ready (MMIfaceModemLocation *self, } static void -handle_set_supl_server_auth_ready (MMBaseModem *self, +handle_set_supl_server_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSetSuplServerContext *ctx) { + MMIfaceModemLocation *self = MM_IFACE_MODEM_LOCATION (_self); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_supl_server_context_free (ctx); return; @@ -1122,7 +1124,7 @@ handle_set_supl_server (MmGdbusModemLocation *skeleton, ctx->self = g_object_ref (self); ctx->supl = g_strdup (supl); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_set_supl_server_auth_ready, @@ -1164,15 +1166,16 @@ inject_assistance_data_ready (MMIfaceModemLocation *self, } static void -handle_inject_assistance_data_auth_ready (MMBaseModem *self, +handle_inject_assistance_data_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleInjectAssistanceDataContext *ctx) { + MMIfaceModemLocation *self = MM_IFACE_MODEM_LOCATION (_self); GError *error = NULL; const guint8 *data; gsize data_size; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_inject_assistance_data_context_free (ctx); return; @@ -1221,7 +1224,7 @@ handle_inject_assistance_data (MmGdbusModemLocation *skeleton, ctx->self = g_object_ref (self); ctx->datav = g_variant_ref (datav); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_inject_assistance_data_auth_ready, @@ -1248,13 +1251,14 @@ handle_set_gps_refresh_rate_context_free (HandleSetGpsRefreshRateContext *ctx) } static void -handle_set_gps_refresh_rate_auth_ready (MMBaseModem *self, +handle_set_gps_refresh_rate_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSetGpsRefreshRateContext *ctx) { + MMIfaceModemLocation *self = MM_IFACE_MODEM_LOCATION (_self); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_gps_refresh_rate_context_free (ctx); return; @@ -1290,7 +1294,7 @@ handle_set_gps_refresh_rate (MmGdbusModemLocation *skeleton, ctx->self = g_object_ref (self); ctx->rate = rate; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_set_gps_refresh_rate_auth_ready, @@ -1316,14 +1320,15 @@ handle_get_location_context_free (HandleGetLocationContext *ctx) } static void -handle_get_location_auth_ready (MMBaseModem *self, +handle_get_location_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleGetLocationContext *ctx) { + MMIfaceModemLocation *self = MM_IFACE_MODEM_LOCATION (_self); LocationContext *location_ctx; GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_get_location_context_free (ctx); return; @@ -1354,7 +1359,7 @@ handle_get_location (MmGdbusModemLocation *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_LOCATION, (GAsyncReadyCallback)handle_get_location_auth_ready, diff --git a/src/mm-iface-modem-messaging.c b/src/mm-iface-modem-messaging.c index 98e859a9..0634b578 100644 --- a/src/mm-iface-modem-messaging.c +++ b/src/mm-iface-modem-messaging.c @@ -180,14 +180,15 @@ handle_delete_ready (MMSmsList *list, } static void -handle_delete_auth_ready (MMBaseModem *self, +handle_delete_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleDeleteContext *ctx) { - g_autoptr(MMSmsList) list = NULL; - GError *error = NULL; + MMIfaceModemMessaging *self = MM_IFACE_MODEM_MESSAGING (auth); + g_autoptr(MMSmsList) list = NULL; + GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_delete_context_free (ctx); return; @@ -236,7 +237,7 @@ handle_delete (MmGdbusModemMessaging *skeleton, ctx->self = g_object_ref (self); ctx->path = g_strdup (path); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_MESSAGING, (GAsyncReadyCallback)handle_delete_auth_ready, @@ -264,16 +265,17 @@ handle_create_context_free (HandleCreateContext *ctx) } static void -handle_create_auth_ready (MMBaseModem *self, +handle_create_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleCreateContext *ctx) { + MMIfaceModemMessaging *self = MM_IFACE_MODEM_MESSAGING (auth); GError *error = NULL; g_autoptr(MMSmsList) list = NULL; g_autoptr(MMSmsProperties) properties = NULL; g_autoptr(MMBaseSms) sms = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_create_context_free (ctx); return; @@ -334,7 +336,7 @@ handle_create (MmGdbusModemMessaging *skeleton, ctx->self = g_object_ref (self); ctx->dictionary = g_variant_ref (dictionary); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_MESSAGING, (GAsyncReadyCallback)handle_create_auth_ready, @@ -416,13 +418,14 @@ handle_set_default_storage_ready (MMIfaceModemMessaging *self, } static void -handle_set_default_storage_auth_ready (MMBaseModem *self, +handle_set_default_storage_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleSetDefaultStorageContext *ctx) { + MMIfaceModemMessaging *self = MM_IFACE_MODEM_MESSAGING (auth); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_default_storage_context_free (ctx); return; @@ -469,7 +472,7 @@ handle_set_default_storage (MmGdbusModemMessaging *skeleton, ctx->self = g_object_ref (self); ctx->storage = (MMSmsStorage)storage; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_MESSAGING, (GAsyncReadyCallback)handle_set_default_storage_auth_ready, diff --git a/src/mm-iface-modem-oma.c b/src/mm-iface-modem-oma.c index ca3278b8..37d6f4af 100644 --- a/src/mm-iface-modem-oma.c +++ b/src/mm-iface-modem-oma.c @@ -182,15 +182,16 @@ setup_ready (MMIfaceModemOma *self, } static void -handle_setup_auth_ready (MMBaseModem *self, +handle_setup_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSetupContext *ctx) { + MMIfaceModemOma *self = MM_IFACE_MODEM_OMA (_self); GError *error = NULL; MMModemState modem_state; gchar *str; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_setup_context_free (ctx); return; @@ -240,7 +241,7 @@ handle_setup (MmGdbusModemOma *skeleton, ctx->self = g_object_ref (self); ctx->features = features; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_setup_auth_ready, @@ -287,14 +288,15 @@ start_client_initiated_session_ready (MMIfaceModemOma *self, } static void -handle_start_client_initiated_session_auth_ready (MMBaseModem *self, +handle_start_client_initiated_session_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleStartClientInitiatedSessionContext *ctx) { + MMIfaceModemOma *self = MM_IFACE_MODEM_OMA (_self); GError *error = NULL; MMModemState modem_state; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_start_client_initiated_session_context_free (ctx); return; @@ -355,7 +357,7 @@ handle_start_client_initiated_session (MmGdbusModemOma *skeleton, ctx->self = g_object_ref (self); ctx->session_type = session_type; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_start_client_initiated_session_auth_ready, @@ -441,14 +443,15 @@ get_pending_network_initiated_session_type (MMIfaceModemOma *self, } static void -handle_accept_network_initiated_session_auth_ready (MMBaseModem *self, +handle_accept_network_initiated_session_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleAcceptNetworkInitiatedSessionContext *ctx) { + MMIfaceModemOma *self = MM_IFACE_MODEM_OMA (_self); GError *error = NULL; MMModemState modem_state; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_accept_network_initiated_session_context_free (ctx); return; @@ -514,7 +517,7 @@ handle_accept_network_initiated_session (MmGdbusModemOma *skeleton, ctx->session_id = session_id; ctx->accept = accept; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_accept_network_initiated_session_auth_ready, @@ -561,14 +564,15 @@ cancel_session_ready (MMIfaceModemOma *self, } static void -handle_cancel_session_auth_ready (MMBaseModem *self, +handle_cancel_session_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleCancelSessionContext *ctx) { + MMIfaceModemOma *self = MM_IFACE_MODEM_OMA (_self); GError *error = NULL; MMModemState modem_state; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_cancel_session_context_free (ctx); return; @@ -612,7 +616,7 @@ handle_cancel_session (MmGdbusModemOma *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_cancel_session_auth_ready, diff --git a/src/mm-iface-modem-sar.c b/src/mm-iface-modem-sar.c index 71726f26..4cd5a05c 100644 --- a/src/mm-iface-modem-sar.c +++ b/src/mm-iface-modem-sar.c @@ -98,13 +98,14 @@ enable_ready (MMIfaceModemSar *self, } static void -handle_enable_auth_ready (MMBaseModem *self, +handle_enable_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleEnableContext *ctx) { + MMIfaceModemSar *self = MM_IFACE_MODEM_SAR (_self); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_enable_context_free (ctx); return; @@ -146,7 +147,7 @@ handle_enable (MmGdbusModemSar *skeleton, ctx->self = g_object_ref (self); ctx->enable = enable; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_enable_auth_ready, @@ -193,13 +194,14 @@ set_power_level_ready (MMIfaceModemSar *self, } static void -handle_set_power_level_auth_ready (MMBaseModem *self, +handle_set_power_level_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSetPowerLevelContext *ctx) { + MMIfaceModemSar *self = MM_IFACE_MODEM_SAR (_self); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_power_level_context_free (ctx); return; @@ -248,7 +250,7 @@ handle_set_power_level (MmGdbusModemSar *skeleton, ctx->self = g_object_ref (self); ctx->power_level = level; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_set_power_level_auth_ready, diff --git a/src/mm-iface-modem-signal.c b/src/mm-iface-modem-signal.c index da37921b..9b61ccee 100644 --- a/src/mm-iface-modem-signal.c +++ b/src/mm-iface-modem-signal.c @@ -374,7 +374,7 @@ handle_setup_context_free (HandleSetupContext *ctx) } static void -handle_setup_auth_ready (MMBaseModem *_self, +handle_setup_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSetupContext *ctx) { @@ -382,7 +382,7 @@ handle_setup_auth_ready (MMBaseModem *_self, GError *error = NULL; Private *priv; - if (!mm_base_modem_authorize_finish (_self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_setup_context_free (ctx); return; @@ -418,7 +418,7 @@ handle_setup (MmGdbusModemSignal *skeleton, ctx->skeleton = g_object_ref (skeleton); ctx->rate = rate; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_setup_auth_ready, @@ -471,7 +471,7 @@ setup_thresholds_restart_ready (MMIfaceModemSignal *self, } static void -handle_setup_thresholds_auth_ready (MMBaseModem *_self, +handle_setup_thresholds_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleSetupThresholdsContext *ctx) { @@ -484,7 +484,7 @@ handle_setup_thresholds_auth_ready (MMBaseModem *_self, priv = get_private (self); - if (!mm_base_modem_authorize_finish (_self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_setup_thresholds_context_free (ctx); return; @@ -545,7 +545,7 @@ handle_setup_thresholds (MmGdbusModemSignal *skeleton, ctx->skeleton = g_object_ref (skeleton); ctx->settings = g_variant_ref (settings); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_setup_thresholds_auth_ready, diff --git a/src/mm-iface-modem-simple.c b/src/mm-iface-modem-simple.c index 004371b2..b4ddbbe0 100644 --- a/src/mm-iface-modem-simple.c +++ b/src/mm-iface-modem-simple.c @@ -756,7 +756,7 @@ connection_step (ConnectionContext *ctx) mm_obj_msg (ctx->self, "simple connect state (%d/%d): enable", ctx->step, CONNECTION_STEP_LAST); mm_base_modem_enable (MM_BASE_MODEM (ctx->self), - MM_BASE_MODEM_OPERATION_LOCK_REQUIRED, + MM_OPERATION_LOCK_REQUIRED, (GAsyncReadyCallback)enable_ready, ctx); return; @@ -881,14 +881,15 @@ connection_step (ConnectionContext *ctx) } static void -connect_auth_ready (MMBaseModem *self, +connect_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, ConnectionContext *ctx) { + MMIfaceModemSimple *self = MM_IFACE_MODEM_SIMPLE (_self); GError *error = NULL; MMModemState current = MM_MODEM_STATE_UNKNOWN; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); connection_context_free (ctx); return; @@ -980,7 +981,7 @@ handle_connect (MmGdbusModemSimple *skeleton, ctx->self = g_object_ref (self); ctx->dictionary = g_variant_ref (dictionary); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)connect_auth_ready, @@ -1025,14 +1026,15 @@ bearer_list_disconnect_bearers_ready (MMBearerList *bearer_list, } static void -disconnect_auth_ready (MMBaseModem *self, +disconnect_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, DisconnectionContext *ctx) { + MMIfaceModemSimple *self = MM_IFACE_MODEM_SIMPLE (_self); g_autoptr(MMBearerList) list = NULL; GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); disconnection_context_free (ctx); return; @@ -1087,7 +1089,7 @@ handle_disconnect (MmGdbusModemSimple *skeleton, if (g_strcmp0 (bearer_path, "/") != 0) ctx->bearer_path = g_strdup (bearer_path); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)disconnect_auth_ready, diff --git a/src/mm-iface-modem-time.c b/src/mm-iface-modem-time.c index 53d03b30..4f9e7f3f 100644 --- a/src/mm-iface-modem-time.c +++ b/src/mm-iface-modem-time.c @@ -75,14 +75,15 @@ load_network_time_ready (MMIfaceModemTime *self, } static void -handle_get_network_time_auth_ready (MMBaseModem *self, +handle_get_network_time_auth_ready (MMIfaceAuth *_self, GAsyncResult *res, HandleGetNetworkTimeContext *ctx) { - MMModemState state; - GError *error = NULL; + MMIfaceModemTime *self = MM_IFACE_MODEM_TIME (_self); + MMModemState state; + GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (_self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_get_network_time_context_free (ctx); return; @@ -127,7 +128,7 @@ handle_get_network_time (MmGdbusModemTime *skeleton, ctx->skeleton = g_object_ref (skeleton); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_TIME, (GAsyncReadyCallback)handle_get_network_time_auth_ready, diff --git a/src/mm-iface-modem-voice.c b/src/mm-iface-modem-voice.c index 01519bc3..bca51c83 100644 --- a/src/mm-iface-modem-voice.c +++ b/src/mm-iface-modem-voice.c @@ -596,14 +596,15 @@ handle_delete_context_free (HandleDeleteContext *ctx) } static void -handle_delete_auth_ready (MMBaseModem *self, +handle_delete_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleDeleteContext *ctx) { + MMIfaceModemVoice *self = MM_IFACE_MODEM_VOICE (auth); MMCallList *list = NULL; GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_delete_context_free (ctx); return; @@ -643,7 +644,7 @@ handle_delete (MmGdbusModemVoice *skeleton, ctx->self = g_object_ref (self); ctx->path = g_strdup (path); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_VOICE, (GAsyncReadyCallback)handle_delete_auth_ready, @@ -671,16 +672,17 @@ handle_create_context_free (HandleCreateContext *ctx) } static void -handle_create_auth_ready (MMBaseModem *self, +handle_create_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleCreateContext *ctx) { + MMIfaceModemVoice *self = MM_IFACE_MODEM_VOICE (auth); MMCallList *list = NULL; GError *error = NULL; MMCallProperties *properties; MMBaseCall *call; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_create_context_free (ctx); return; @@ -746,7 +748,7 @@ handle_create (MmGdbusModemVoice *skeleton, ctx->self = g_object_ref (self); ctx->dictionary = g_variant_ref (dictionary); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_VOICE, (GAsyncReadyCallback)handle_create_auth_ready, @@ -855,14 +857,15 @@ prepare_hold_and_accept_foreach (MMBaseCall *call, } static void -handle_hold_and_accept_auth_ready (MMBaseModem *self, +handle_hold_and_accept_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleHoldAndAcceptContext *ctx) { + MMIfaceModemVoice *self = MM_IFACE_MODEM_VOICE (auth); GError *error = NULL; MMCallList *list = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_hold_and_accept_context_free (ctx); return; @@ -907,7 +910,7 @@ handle_hold_and_accept (MmGdbusModemVoice *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_VOICE, (GAsyncReadyCallback)handle_hold_and_accept_auth_ready, @@ -986,14 +989,15 @@ prepare_hangup_and_accept_foreach (MMBaseCall *call, } static void -handle_hangup_and_accept_auth_ready (MMBaseModem *self, +handle_hangup_and_accept_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleHangupAndAcceptContext *ctx) { + MMIfaceModemVoice *self = MM_IFACE_MODEM_VOICE (auth); GError *error = NULL; MMCallList *list = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_hangup_and_accept_context_free (ctx); return; @@ -1038,7 +1042,7 @@ handle_hangup_and_accept (MmGdbusModemVoice *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_VOICE, (GAsyncReadyCallback)handle_hangup_and_accept_auth_ready, @@ -1127,14 +1131,15 @@ prepare_hangup_all_foreach (MMBaseCall *call, } static void -handle_hangup_all_auth_ready (MMBaseModem *self, +handle_hangup_all_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleHangupAllContext *ctx) { + MMIfaceModemVoice *self = MM_IFACE_MODEM_VOICE (auth); GError *error = NULL; MMCallList *list = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_hangup_all_context_free (ctx); return; @@ -1179,7 +1184,7 @@ handle_hangup_all (MmGdbusModemVoice *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_VOICE, (GAsyncReadyCallback)handle_hangup_all_auth_ready, @@ -1248,14 +1253,15 @@ prepare_transfer_foreach (MMBaseCall *call, } static void -handle_transfer_auth_ready (MMBaseModem *self, +handle_transfer_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleTransferContext *ctx) { + MMIfaceModemVoice *self = MM_IFACE_MODEM_VOICE (auth); GError *error = NULL; MMCallList *list = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_transfer_context_free (ctx); return; @@ -1300,7 +1306,7 @@ handle_transfer (MmGdbusModemVoice *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_VOICE, (GAsyncReadyCallback)handle_transfer_auth_ready, @@ -1344,13 +1350,14 @@ call_waiting_setup_ready (MMIfaceModemVoice *self, } static void -handle_call_waiting_setup_auth_ready (MMBaseModem *self, +handle_call_waiting_setup_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleCallWaitingSetupContext *ctx) { + MMIfaceModemVoice *self = MM_IFACE_MODEM_VOICE (auth); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_call_waiting_setup_context_free (ctx); return; @@ -1386,7 +1393,7 @@ handle_call_waiting_setup (MmGdbusModemVoice *skeleton, ctx->self = g_object_ref (self); ctx->enable = enable; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_VOICE, (GAsyncReadyCallback)handle_call_waiting_setup_auth_ready, @@ -1431,13 +1438,14 @@ call_waiting_query_ready (MMIfaceModemVoice *self, } static void -handle_call_waiting_query_auth_ready (MMBaseModem *self, +handle_call_waiting_query_auth_ready (MMIfaceAuth *auth, GAsyncResult *res, HandleCallWaitingQueryContext *ctx) { + MMIfaceModemVoice *self = MM_IFACE_MODEM_VOICE (auth); GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_call_waiting_query_context_free (ctx); return; @@ -1470,7 +1478,7 @@ handle_call_waiting_query (MmGdbusModemVoice *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_VOICE, (GAsyncReadyCallback)handle_call_waiting_query_auth_ready, diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 75c2ca63..7bd0f0ff 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -33,6 +33,7 @@ #include "mm-log-object.h" #include "mm-log-helpers.h" #include "mm-context.h" +#include "mm-iface-op-lock.h" #include "mm-dispatcher-fcc-unlock.h" #if defined WITH_QMI # include "mm-broadband-modem-qmi.h" @@ -362,8 +363,8 @@ mm_iface_modem_process_sim_event (MMIfaceModem *self) * allow any additional lock request any more. */ mm_base_modem_set_reprobe (MM_BASE_MODEM (self), TRUE); mm_base_modem_disable (MM_BASE_MODEM (self), - MM_BASE_MODEM_OPERATION_LOCK_REQUIRED, - MM_BASE_MODEM_OPERATION_PRIORITY_OVERRIDE, + MM_OPERATION_LOCK_REQUIRED, + MM_OPERATION_PRIORITY_OVERRIDE, (GAsyncReadyCallback) after_sim_event_disable_ready, NULL); } @@ -1050,14 +1051,14 @@ handle_create_bearer_ready (MMIfaceModem *self, } static void -handle_create_bearer_auth_ready (MMBaseModem *self, +handle_create_bearer_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleCreateBearerContext *ctx) { g_autoptr(MMBearerProperties) properties = NULL; GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_create_bearer_context_free (ctx); return; @@ -1099,7 +1100,7 @@ handle_create_bearer (MmGdbusModem *skeleton, ctx->self = g_object_ref (self); ctx->dictionary = g_variant_ref (dictionary); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_create_bearer_auth_ready, @@ -1148,13 +1149,13 @@ command_ready (MMIfaceModem *self, } static void -handle_command_auth_ready (MMBaseModem *self, +handle_command_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleCommandContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_command_context_free (ctx); return; @@ -1202,7 +1203,7 @@ handle_command (MmGdbusModem *skeleton, ctx->cmd = g_strdup (cmd); ctx->timeout = timeout; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_command_auth_ready, @@ -1258,13 +1259,13 @@ delete_bearer_disconnect_ready (MMBaseBearer *bearer, } static void -handle_delete_bearer_auth_ready (MMBaseModem *self, +handle_delete_bearer_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleDeleteBearerContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_delete_bearer_context_free (ctx); return; @@ -1313,7 +1314,7 @@ handle_delete_bearer (MmGdbusModem *skeleton, MM_IFACE_MODEM_BEARER_LIST, &ctx->list, NULL); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_delete_bearer_auth_ready, @@ -1396,14 +1397,14 @@ set_primary_sim_slot_ready (MMIfaceModem *self, } static void -handle_set_primary_sim_slot_auth_ready (MMBaseModem *self, +handle_set_primary_sim_slot_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleSetPrimarySimSlotContext *ctx) { GError *error = NULL; const gchar *const *sim_slot_paths; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_primary_sim_slot_context_free (ctx); return; @@ -1448,7 +1449,7 @@ handle_set_primary_sim_slot (MmGdbusModem *skeleton, ctx->self = g_object_ref (self); ctx->requested_sim_slot = sim_slot; - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_set_primary_sim_slot_auth_ready, @@ -1516,13 +1517,13 @@ get_cell_info_ready (MMIfaceModem *self, } static void -handle_get_cell_info_auth_ready (MMBaseModem *self, +handle_get_cell_info_auth_ready (MMIfaceAuth *self, GAsyncResult *res, HandleGetCellInfoContext *ctx) { GError *error = NULL; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (self, res, &error)) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_get_cell_info_context_free (ctx); return; @@ -1560,7 +1561,7 @@ handle_get_cell_info (MmGdbusModem *skeleton, ctx->invocation = g_object_ref (invocation); ctx->self = g_object_ref (self); - mm_base_modem_authorize (MM_BASE_MODEM (self), + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, MM_AUTHORIZATION_DEVICE_CONTROL, (GAsyncReadyCallback)handle_get_cell_info_auth_ready, @@ -2294,7 +2295,7 @@ static void handle_enable_context_free (HandleEnableContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_object_unref (ctx->skeleton); g_object_unref (ctx->invocation); @@ -2331,13 +2332,14 @@ enable_ready (MMBaseModem *self, } static void -handle_enable_auth_ready (MMBaseModem *self, +handle_enable_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleEnableContext *ctx) { + MMBaseModem *self = MM_BASE_MODEM (_self); GError *error = NULL; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_enable_context_free (ctx); @@ -2352,14 +2354,14 @@ handle_enable_auth_ready (MMBaseModem *self, if (ctx->enable) { mm_obj_info (self, "processing user request to enable modem..."); mm_base_modem_enable (self, - MM_BASE_MODEM_OPERATION_LOCK_ALREADY_ACQUIRED, + MM_OPERATION_LOCK_ALREADY_ACQUIRED, (GAsyncReadyCallback)enable_ready, ctx); } else { mm_obj_info (self, "processing user request to disable modem..."); mm_base_modem_disable (self, - MM_BASE_MODEM_OPERATION_LOCK_ALREADY_ACQUIRED, - MM_BASE_MODEM_OPERATION_PRIORITY_UNKNOWN, + MM_OPERATION_LOCK_ALREADY_ACQUIRED, + MM_OPERATION_PRIORITY_UNKNOWN, (GAsyncReadyCallback)enable_ready, ctx); } @@ -2380,13 +2382,13 @@ handle_enable (MmGdbusModem *skeleton, ctx->enable = enable; ctx->operation_id = -1; - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - enable ? "enable" : "disable", - (GAsyncReadyCallback)handle_enable_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + enable ? "enable" : "disable", + (GAsyncReadyCallback)handle_enable_auth_ready, + ctx); return TRUE; } @@ -2406,7 +2408,7 @@ static void handle_set_power_state_context_free (HandleSetPowerStateContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_assert (!ctx->saved_error); g_object_unref (ctx->skeleton); @@ -2442,8 +2444,8 @@ disable_after_low (MMIfaceModem *self, { mm_obj_info (self, "automatically disable modem after low-power mode..."); mm_base_modem_disable (MM_BASE_MODEM (self), - MM_BASE_MODEM_OPERATION_LOCK_ALREADY_ACQUIRED, - MM_BASE_MODEM_OPERATION_PRIORITY_UNKNOWN, + MM_OPERATION_LOCK_ALREADY_ACQUIRED, + MM_OPERATION_PRIORITY_UNKNOWN, (GAsyncReadyCallback)disable_after_low_ready, ctx); } @@ -2477,14 +2479,15 @@ set_power_state_ready (MMIfaceModem *self, } static void -handle_set_power_state_auth_ready (MMBaseModem *self, +handle_set_power_state_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleSetPowerStateContext *ctx) { + MMBaseModem *self = MM_BASE_MODEM (_self); MMModemState modem_state; GError *error = NULL; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_power_state_context_free (ctx); @@ -2559,13 +2562,13 @@ handle_set_power_state (MmGdbusModem *skeleton, } operation_name = g_strdup_printf ("set-power-state-%s", mm_modem_power_state_get_string (ctx->power_state)); - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - operation_name, - (GAsyncReadyCallback)handle_set_power_state_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + operation_name, + (GAsyncReadyCallback)handle_set_power_state_auth_ready, + ctx); return TRUE; } @@ -2582,7 +2585,7 @@ static void handle_reset_context_free (HandleResetContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_object_unref (ctx->skeleton); g_object_unref (ctx->invocation); @@ -2609,13 +2612,14 @@ handle_reset_ready (MMIfaceModem *self, } static void -handle_reset_auth_ready (MMBaseModem *self, +handle_reset_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleResetContext *ctx) { - GError *error = NULL; + MMBaseModem *self = MM_BASE_MODEM (_self); + GError *error = NULL; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_reset_context_free (ctx); @@ -2649,13 +2653,13 @@ handle_reset (MmGdbusModem *skeleton, ctx->self = g_object_ref (self); ctx->operation_id = -1; - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - "reset", - (GAsyncReadyCallback)handle_reset_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + "reset", + (GAsyncReadyCallback)handle_reset_auth_ready, + ctx); return TRUE; } @@ -2674,7 +2678,7 @@ static void handle_factory_reset_context_free (HandleFactoryResetContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_object_unref (ctx->skeleton); g_object_unref (ctx->invocation); @@ -2702,13 +2706,14 @@ handle_factory_reset_ready (MMIfaceModem *self, } static void -handle_factory_reset_auth_ready (MMBaseModem *self, +handle_factory_reset_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleFactoryResetContext *ctx) { - GError *error = NULL; + MMBaseModem *self = MM_BASE_MODEM (_self); + GError *error = NULL; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_factory_reset_context_free (ctx); @@ -2745,13 +2750,13 @@ handle_factory_reset (MmGdbusModem *skeleton, ctx->code = g_strdup (code); ctx->operation_id = -1; - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - "factory-reset", - (GAsyncReadyCallback)handle_factory_reset_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + "factory-reset", + (GAsyncReadyCallback)handle_factory_reset_auth_ready, + ctx); return TRUE; } @@ -2777,7 +2782,7 @@ static void handle_set_current_capabilities_context_free (HandleSetCurrentCapabilitiesContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_free (ctx->capabilities_str); g_object_unref (ctx->skeleton); @@ -2807,16 +2812,17 @@ set_current_capabilities_ready (MMIfaceModem *self, } static void -handle_set_current_capabilities_auth_ready (MMBaseModem *self, +handle_set_current_capabilities_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleSetCurrentCapabilitiesContext *ctx) { + MMBaseModem *self = MM_BASE_MODEM (_self); GError *error = NULL; g_autoptr(GArray) supported = NULL; gboolean matched = FALSE; guint i; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_current_capabilities_context_free (ctx); @@ -2890,13 +2896,13 @@ handle_set_current_capabilities (MmGdbusModem *skeleton, ctx->capabilities = capabilities; ctx->operation_id = -1; - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - "set-current-capabilities", - (GAsyncReadyCallback)handle_set_current_capabilities_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + "set-current-capabilities", + (GAsyncReadyCallback)handle_set_current_capabilities_auth_ready, + ctx); return TRUE; } @@ -3267,7 +3273,7 @@ static void handle_set_current_bands_context_free (HandleSetCurrentBandsContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_free (ctx->bands_str); g_variant_unref (ctx->bands); @@ -3298,14 +3304,15 @@ handle_set_current_bands_ready (MMIfaceModem *self, } static void -handle_set_current_bands_auth_ready (MMBaseModem *self, +handle_set_current_bands_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleSetCurrentBandsContext *ctx) { + MMBaseModem *self = MM_BASE_MODEM (_self); g_autoptr(GArray) bands_array = NULL; GError *error = NULL; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_current_bands_context_free (ctx); @@ -3342,13 +3349,13 @@ handle_set_current_bands (MmGdbusModem *skeleton, ctx->bands = g_variant_ref (bands_variant); ctx->operation_id = -1; - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - "set-current-bands", - (GAsyncReadyCallback)handle_set_current_bands_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + "set-current-bands", + (GAsyncReadyCallback)handle_set_current_bands_auth_ready, + ctx); return TRUE; } @@ -3672,7 +3679,7 @@ static void handle_set_current_modes_context_free (HandleSetCurrentModesContext *ctx) { if (ctx->operation_id >= 0) - mm_base_modem_operation_unlock (MM_BASE_MODEM (ctx->self), ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (ctx->self), ctx->operation_id); g_free (ctx->preferred_str); g_free (ctx->allowed_str); @@ -3705,13 +3712,14 @@ handle_set_current_modes_ready (MMIfaceModem *self, } static void -handle_set_current_modes_auth_ready (MMBaseModem *self, +handle_set_current_modes_auth_ready (MMIfaceOpLock *_self, GAsyncResult *res, HandleSetCurrentModesContext *ctx) { - GError *error = NULL; + MMBaseModem *self = MM_BASE_MODEM (_self); + GError *error = NULL; - ctx->operation_id = mm_base_modem_authorize_and_operation_lock_finish (self, res, &error); + ctx->operation_id = mm_iface_op_lock_authorize_and_lock_finish (_self, res, &error); if (ctx->operation_id < 0) { mm_dbus_method_invocation_take_error (ctx->invocation, error); handle_set_current_modes_context_free (ctx); @@ -3753,13 +3761,13 @@ handle_set_current_modes (MmGdbusModem *skeleton, &ctx->allowed, &ctx->preferred); - mm_base_modem_authorize_and_operation_lock (MM_BASE_MODEM (self), - invocation, - MM_AUTHORIZATION_DEVICE_CONTROL, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, - "set-current-modes", - (GAsyncReadyCallback)handle_set_current_modes_auth_ready, - ctx); + mm_iface_op_lock_authorize_and_lock (MM_IFACE_OP_LOCK (self), + invocation, + MM_AUTHORIZATION_DEVICE_CONTROL, + MM_OPERATION_PRIORITY_DEFAULT, + "set-current-modes", + (GAsyncReadyCallback)handle_set_current_modes_auth_ready, + ctx); return TRUE; } @@ -3784,7 +3792,7 @@ restart_initialize_idle (MMIfaceModem *self) priv = get_private (self); mm_base_modem_initialize (MM_BASE_MODEM (self), - MM_BASE_MODEM_OPERATION_LOCK_REQUIRED, + MM_OPERATION_LOCK_REQUIRED, (GAsyncReadyCallback) reinitialize_ready, NULL); diff --git a/src/mm-iface-op-lock.c b/src/mm-iface-op-lock.c new file mode 100644 index 00000000..5adbb385 --- /dev/null +++ b/src/mm-iface-op-lock.c @@ -0,0 +1,71 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2012 Google, Inc. + * Copyright (C) 2025 Dan Williams + */ + +#include +#define _LIBMM_INSIDE_MM +#include + +#include "mm-iface-op-lock.h" + +G_DEFINE_INTERFACE (MMIfaceOpLock, mm_iface_op_lock, G_TYPE_OBJECT) + +/*****************************************************************************/ + +void +mm_iface_op_lock_authorize_and_lock (MMIfaceOpLock *self, + GDBusMethodInvocation *invocation, + const gchar *authorization, + MMOperationPriority operation_priority, + const gchar *operation_description, + GAsyncReadyCallback callback, + gpointer user_data) +{ + g_assert (MM_IFACE_OP_LOCK_GET_IFACE (self)->authorize_and_lock != NULL); + + MM_IFACE_OP_LOCK_GET_IFACE (self)->authorize_and_lock (self, + invocation, + authorization, + operation_priority, + operation_description, + callback, + user_data); +} + +gssize +mm_iface_op_lock_authorize_and_lock_finish (MMIfaceOpLock *self, + GAsyncResult *res, + GError **error) +{ + g_assert (MM_IFACE_OP_LOCK_GET_IFACE (self)->authorize_and_lock_finish != NULL); + + return MM_IFACE_OP_LOCK_GET_IFACE (self)->authorize_and_lock_finish (self, res, error); +} + +void +mm_iface_op_lock_unlock (MMIfaceOpLock *self, + gssize operation_id) +{ + g_assert (MM_IFACE_OP_LOCK_GET_IFACE (self)->unlock != NULL); + + return MM_IFACE_OP_LOCK_GET_IFACE (self)->unlock (self, operation_id); +} + +/*****************************************************************************/ + +static void +mm_iface_op_lock_default_init (MMIfaceOpLockInterface *iface) +{ +} diff --git a/src/mm-iface-op-lock.h b/src/mm-iface-op-lock.h new file mode 100644 index 00000000..665e70f8 --- /dev/null +++ b/src/mm-iface-op-lock.h @@ -0,0 +1,79 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2025 Dan Williams + */ + +#ifndef MM_IFACE_OP_LOCK_H +#define MM_IFACE_OP_LOCK_H + +#include +#include + +#define _LIBMM_INSIDE_MM +#include + +typedef enum { /*< underscore_name=mm_operation_priority >*/ + MM_OPERATION_PRIORITY_UNKNOWN, + /* Default operations are scheduled at the end of the list of pending + * operations */ + MM_OPERATION_PRIORITY_DEFAULT, + /* An override operation will make all pending operations be cancelled, and + * it will also disallow adding new operations. This type of operation would + * be the last one expected in a modem object. */ + MM_OPERATION_PRIORITY_OVERRIDE, +} MMOperationPriority; + +typedef enum { + MM_OPERATION_LOCK_REQUIRED, + MM_OPERATION_LOCK_ALREADY_ACQUIRED, +} MMOperationLock; + +#define MM_TYPE_IFACE_OP_LOCK mm_iface_op_lock_get_type () +G_DECLARE_INTERFACE (MMIfaceOpLock, mm_iface_op_lock, MM, IFACE_OP_LOCK, GObject) + +struct _MMIfaceOpLockInterface { + GTypeInterface g_iface; + + void (* authorize_and_lock) (MMIfaceOpLock *self, + GDBusMethodInvocation *invocation, + const gchar *authorization, + MMOperationPriority operation_priority, + const gchar *operation_description, + GAsyncReadyCallback callback, + gpointer user_data); + + gssize (* authorize_and_lock_finish) (MMIfaceOpLock *self, + GAsyncResult *res, + GError **error); + + void (*unlock) (MMIfaceOpLock *self, + gssize operation_id); +}; + + +void mm_iface_op_lock_authorize_and_lock (MMIfaceOpLock *self, + GDBusMethodInvocation *invocation, + const gchar *authorization, + MMOperationPriority operation_priority, + const gchar *operation_description, + GAsyncReadyCallback callback, + gpointer user_data); + +gssize mm_iface_op_lock_authorize_and_lock_finish (MMIfaceOpLock *self, + GAsyncResult *res, + GError **error); + +void mm_iface_op_lock_unlock (MMIfaceOpLock *self, + gssize operation_id); + +#endif /* MM_IFACE_OP_LOCK_H */ -- cgit v1.2.3-70-g09d2 From ec5104c9a87a440bb791987ffe05e53bf235ae02 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 30 Apr 2025 15:43:52 -0500 Subject: Move log parent and connection property binding to helper Continues removing usage of MMBaseModem in a bunch of files by splitting out bits of its usage to separate interfaces. Signed-off-by: Dan Williams --- src/meson.build | 1 + src/mm-base-bearer.c | 32 ++++++++--- src/mm-base-call.c | 36 +++++++++---- src/mm-base-call.h | 1 + src/mm-base-cbm.c | 38 +++++++++---- src/mm-base-cbm.h | 3 +- src/mm-base-modem.c | 3 +- src/mm-base-modem.h | 1 - src/mm-base-sim.c | 38 +++++++++---- src/mm-base-sim.h | 2 + src/mm-base-sms.c | 35 ++++++++---- src/mm-bearer-mbim.c | 2 + src/mm-bearer-qmi.c | 2 + src/mm-bind.c | 62 ++++++++++++++++++++++ src/mm-bind.h | 42 +++++++++++++++ src/mm-broadband-bearer.c | 2 + src/mm-broadband-modem-qmi.c | 2 +- src/mm-broadband-modem.c | 6 ++- src/mm-call-qmi.c | 2 + src/mm-cbm-list.c | 32 ++++++++--- src/mm-cbm-list.h | 3 +- src/mm-device.c | 5 +- src/mm-iface-modem-cell-broadcast.c | 2 +- src/mm-iface-modem-messaging.c | 2 +- src/mm-sim-mbim.c | 3 ++ src/mm-sim-qmi.c | 3 ++ src/mm-sms-list.c | 31 ++++++++--- src/mm-sms-list.h | 3 +- src/mm-sms-mbim.c | 2 + src/mm-sms-qmi.c | 2 + .../altair/mm-broadband-bearer-altair-lte.c | 2 + .../cinterion/mm-broadband-bearer-cinterion.c | 2 + .../cinterion/mm-broadband-modem-cinterion.c | 8 ++- src/plugins/cinterion/mm-shared-cinterion.c | 1 + .../fibocom/mm-broadband-bearer-fibocom-ecm.c | 2 + src/plugins/huawei/mm-broadband-bearer-huawei.c | 2 + src/plugins/huawei/mm-broadband-modem-huawei.c | 1 + src/plugins/huawei/mm-sim-huawei.c | 2 + src/plugins/icera/mm-broadband-bearer-icera.c | 2 + src/plugins/iridium/mm-bearer-iridium.c | 2 + src/plugins/iridium/mm-sim-iridium.c | 2 + src/plugins/mbm/mm-broadband-bearer-mbm.c | 2 + src/plugins/mbm/mm-sim-mbm.c | 2 + src/plugins/mtk/mm-bearer-mbim-mtk-fibocom.c | 2 + src/plugins/nokia/mm-sim-nokia.c | 2 + .../novatel/mm-broadband-bearer-novatel-lte.c | 2 + src/plugins/novatel/mm-sim-novatel-lte.c | 2 + src/plugins/option/mm-broadband-bearer-hso.c | 2 + src/plugins/option/mm-sim-option.c | 2 + src/plugins/pantech/mm-sim-pantech.c | 2 + src/plugins/sierra/mm-broadband-bearer-sierra.c | 2 + src/plugins/sierra/mm-sim-sierra.c | 2 + src/plugins/ublox/mm-broadband-bearer-ublox.c | 2 + src/plugins/ublox/mm-broadband-modem-ublox.c | 1 + src/plugins/ublox/mm-sim-ublox.c | 2 + 55 files changed, 376 insertions(+), 75 deletions(-) create mode 100644 src/mm-bind.c create mode 100644 src/mm-bind.h diff --git a/src/meson.build b/src/meson.build index 7516a6ee..c3242953 100644 --- a/src/meson.build +++ b/src/meson.build @@ -298,6 +298,7 @@ sources = files( 'mm-base-modem.c', 'mm-base-sim.c', 'mm-base-sms.c', + 'mm-bind.c', 'mm-bearer-list.c', 'mm-broadband-bearer.c', 'mm-broadband-modem.c', diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c index 3c7d2d99..7dadfff0 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -42,6 +42,7 @@ #include "mm-bearer-stats.h" #include "mm-dispatcher-connection.h" #include "mm-auth-provider.h" +#include "mm-bind.h" /* We require up to 20s to get a proper IP when using PPP */ #define BEARER_IP_TIMEOUT_DEFAULT 20 @@ -55,9 +56,11 @@ #define BEARER_CONNECTION_MONITOR_TIMEOUT 5 static void log_object_iface_init (MMLogObjectInterface *iface); +static void bind_iface_init (MMBindInterface *iface); G_DEFINE_TYPE_EXTENDED (MMBaseBearer, mm_base_bearer, MM_GDBUS_TYPE_BEARER_SKELETON, 0, - 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_BIND, bind_iface_init)) typedef enum { CONNECTION_FORBIDDEN_REASON_NONE, @@ -71,6 +74,7 @@ enum { PROP_0, PROP_PATH, PROP_CONNECTION, + PROP_BIND_TO, PROP_MODEM, PROP_STATUS, PROP_CONFIG, @@ -88,6 +92,9 @@ struct _MMBaseBearerPrivate { MMAuthProvider *authp; GCancellable *authp_cancellable; + /* The object this bearer is bound to */ + GObject *bind_to; + /* The modem which owns this BEARER */ MMBaseModem *modem; /* The path where the BEARER object is exported */ @@ -1744,17 +1751,15 @@ set_property (GObject *object, else if (self->priv->path) base_bearer_dbus_export (self); break; + case PROP_BIND_TO: + g_clear_object (&self->priv->bind_to); + self->priv->bind_to = g_value_dup_object (value); + mm_bind_to (MM_BIND (self), MM_BASE_BEARER_CONNECTION, self->priv->bind_to); + break; case PROP_MODEM: g_clear_object (&self->priv->modem); self->priv->modem = g_value_dup_object (value); if (self->priv->modem) { - /* Set owner ID */ - mm_log_object_set_owner_id (MM_LOG_OBJECT (self), mm_log_object_get_id (MM_LOG_OBJECT (self->priv->modem))); - /* Bind the modem's connection (which is set when it is exported, - * and unset when unexported) to the BEARER's connection */ - g_object_bind_property (self->priv->modem, MM_BASE_MODEM_CONNECTION, - self, MM_BASE_BEARER_CONNECTION, - G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); if (self->priv->config) { /* Listen to 3GPP/CDMA registration state changes. We need both * 'config' and 'modem' set. */ @@ -1804,6 +1809,9 @@ get_property (GObject *object, case PROP_CONNECTION: g_value_set_object (value, self->priv->connection); break; + case PROP_BIND_TO: + g_value_set_object (value, self->priv->bind_to); + break; case PROP_MODEM: g_value_set_object (value, self->priv->modem); break; @@ -1886,6 +1894,7 @@ dispose (GObject *object) reset_deferred_unregistration (self); g_clear_object (&self->priv->modem); + g_clear_object (&self->priv->bind_to); g_clear_object (&self->priv->config); g_cancellable_cancel (self->priv->authp_cancellable); g_clear_object (&self->priv->authp_cancellable); @@ -1899,6 +1908,11 @@ log_object_iface_init (MMLogObjectInterface *iface) iface->build_id = log_object_build_id; } +static void +bind_iface_init (MMBindInterface *iface) +{ +} + static void mm_base_bearer_class_init (MMBaseBearerClass *klass) { @@ -1930,6 +1944,8 @@ mm_base_bearer_class_init (MMBaseBearerClass *klass) G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_PATH, properties[PROP_PATH]); + g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); + properties[PROP_MODEM] = g_param_spec_object (MM_BASE_BEARER_MODEM, "Modem", diff --git a/src/mm-base-call.c b/src/mm-base-call.c index c1408559..6308fd18 100644 --- a/src/mm-base-call.c +++ b/src/mm-base-call.c @@ -35,16 +35,20 @@ #include "mm-log-object.h" #include "mm-modem-helpers.h" #include "mm-error-helpers.h" +#include "mm-bind.h" static void log_object_iface_init (MMLogObjectInterface *iface); +static void bind_iface_init (MMBindInterface *iface); G_DEFINE_TYPE_EXTENDED (MMBaseCall, mm_base_call, MM_GDBUS_TYPE_CALL_SKELETON, 0, - 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_BIND, bind_iface_init)) enum { PROP_0, PROP_PATH, PROP_CONNECTION, + PROP_BIND_TO, PROP_MODEM, PROP_SKIP_INCOMING_TIMEOUT, PROP_SUPPORTS_DIALING_TO_RINGING, @@ -63,6 +67,9 @@ struct _MMBaseCallPrivate { MMAuthProvider *authp; GCancellable *authp_cancellable; + /* The object this Call is bound to */ + GObject *bind_to; + /* The modem which owns this call */ MMBaseModem *modem; /* The path where the call object is exported */ @@ -1304,6 +1311,7 @@ log_object_build_id (MMLogObject *_self) MMBaseCall * mm_base_call_new (MMBaseModem *modem, + GObject *bind_to, MMCallDirection direction, const gchar *number, gboolean skip_incoming_timeout, @@ -1312,6 +1320,7 @@ mm_base_call_new (MMBaseModem *modem, { return MM_BASE_CALL (g_object_new (MM_TYPE_BASE_CALL, MM_BASE_CALL_MODEM, modem, + MM_BIND_TO, bind_to, "direction", direction, "number", number, MM_BASE_CALL_SKIP_INCOMING_TIMEOUT, skip_incoming_timeout, @@ -1351,18 +1360,14 @@ set_property (GObject *object, else if (self->priv->path) call_dbus_export (self); break; + case PROP_BIND_TO: + g_clear_object (&self->priv->bind_to); + self->priv->bind_to = g_value_dup_object (value); + mm_bind_to (MM_BIND (self), MM_BASE_CALL_CONNECTION, self->priv->bind_to); + break; case PROP_MODEM: g_clear_object (&self->priv->modem); self->priv->modem = g_value_dup_object (value); - if (self->priv->modem) { - /* Set owner ID */ - mm_log_object_set_owner_id (MM_LOG_OBJECT (self), mm_log_object_get_id (MM_LOG_OBJECT (self->priv->modem))); - /* Bind the modem's connection (which is set when it is exported, - * and unset when unexported) to the call's connection */ - g_object_bind_property (self->priv->modem, MM_BASE_MODEM_CONNECTION, - self, MM_BASE_CALL_CONNECTION, - G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); - } break; case PROP_SKIP_INCOMING_TIMEOUT: self->priv->skip_incoming_timeout = g_value_get_boolean (value); @@ -1394,6 +1399,9 @@ get_property (GObject *object, case PROP_CONNECTION: g_value_set_object (value, self->priv->connection); break; + case PROP_BIND_TO: + g_value_set_object (value, self->priv->bind_to); + break; case PROP_MODEM: g_value_set_object (value, self->priv->modem); break; @@ -1459,6 +1467,7 @@ dispose (GObject *object) } g_clear_object (&self->priv->modem); + g_clear_object (&self->priv->bind_to); g_cancellable_cancel (self->priv->authp_cancellable); g_clear_object (&self->priv->authp_cancellable); @@ -1471,6 +1480,11 @@ log_object_iface_init (MMLogObjectInterface *iface) iface->build_id = log_object_build_id; } +static void +bind_iface_init (MMBindInterface *iface) +{ +} + static void mm_base_call_class_init (MMBaseCallClass *klass) { @@ -1511,6 +1525,8 @@ mm_base_call_class_init (MMBaseCallClass *klass) G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_PATH, properties[PROP_PATH]); + g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); + properties[PROP_MODEM] = g_param_spec_object (MM_BASE_CALL_MODEM, "Modem", diff --git a/src/mm-base-call.h b/src/mm-base-call.h index 4359497e..fc69bf2f 100644 --- a/src/mm-base-call.h +++ b/src/mm-base-call.h @@ -101,6 +101,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMBaseCall, g_object_unref) /* This one can be overridden by plugins */ MMBaseCall *mm_base_call_new (MMBaseModem *modem, + GObject *bind_to, MMCallDirection direction, const gchar *number, gboolean skip_incoming_timeout, diff --git a/src/mm-base-cbm.c b/src/mm-base-cbm.c index 212d2ce8..af02120e 100644 --- a/src/mm-base-cbm.c +++ b/src/mm-base-cbm.c @@ -34,16 +34,20 @@ #include "mm-log-object.h" #include "mm-modem-helpers.h" #include "mm-error-helpers.h" +#include "mm-bind.h" static void log_object_iface_init (MMLogObjectInterface *iface); +static void bind_iface_init (MMBindInterface *iface); G_DEFINE_TYPE_EXTENDED (MMBaseCbm, mm_base_cbm, MM_GDBUS_TYPE_CBM_SKELETON, 0, - 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_BIND, bind_iface_init)) enum { PROP_0, PROP_PATH, PROP_CONNECTION, + PROP_BIND_TO, PROP_MODEM, PROP_MAX_PARTS, PROP_SERIAL, @@ -57,6 +61,9 @@ struct _MMBaseCbmPrivate { GDBusConnection *connection; guint dbus_id; + /* The object this CBM is bound to */ + GObject *bind_to; + /* The modem which owns this CBM */ MMBaseModem *modem; /* The path where the CBM object is exported */ @@ -323,10 +330,12 @@ mm_base_cbm_take_part (MMBaseCbm *self, } MMBaseCbm * -mm_base_cbm_new (MMBaseModem *modem) +mm_base_cbm_new (MMBaseModem *modem, + GObject *bind_to) { return MM_BASE_CBM (g_object_new (MM_TYPE_BASE_CBM, MM_BASE_CBM_MODEM, modem, + MM_BIND_TO, bind_to, NULL)); } @@ -405,18 +414,14 @@ set_property (GObject *object, else if (self->priv->path) cbm_dbus_export (self); break; + case PROP_BIND_TO: + g_clear_object (&self->priv->bind_to); + self->priv->bind_to = g_value_dup_object (value); + mm_bind_to (MM_BIND (self), MM_BASE_CBM_CONNECTION, self->priv->bind_to); + break; case PROP_MODEM: g_clear_object (&self->priv->modem); self->priv->modem = g_value_dup_object (value); - if (self->priv->modem) { - /* Set owner ID */ - mm_log_object_set_owner_id (MM_LOG_OBJECT (self), mm_log_object_get_id (MM_LOG_OBJECT (self->priv->modem))); - /* Bind the modem's connection (which is set when it is exported, - * and unset when unexported) to the CBM's connection */ - g_object_bind_property (self->priv->modem, MM_BASE_MODEM_CONNECTION, - self, MM_BASE_CBM_CONNECTION, - G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); - } break; case PROP_MAX_PARTS: self->priv->max_parts = g_value_get_uint (value); @@ -445,6 +450,9 @@ get_property (GObject *object, case PROP_CONNECTION: g_value_set_object (value, self->priv->connection); break; + case PROP_BIND_TO: + g_value_set_object (value, self->priv->bind_to); + break; case PROP_MODEM: g_value_set_object (value, self->priv->modem); break; @@ -497,6 +505,7 @@ dispose (GObject *object) } g_clear_object (&self->priv->modem); + g_clear_object (&self->priv->bind_to); G_OBJECT_CLASS (mm_base_cbm_parent_class)->dispose (object); } @@ -507,6 +516,11 @@ log_object_iface_init (MMLogObjectInterface *iface) iface->build_id = log_object_build_id; } +static void +bind_iface_init (MMBindInterface *iface) +{ +} + static void mm_base_cbm_class_init (MMBaseCbmClass *klass) { @@ -534,6 +548,8 @@ mm_base_cbm_class_init (MMBaseCbmClass *klass) NULL, G_PARAM_READWRITE); + g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); + properties[PROP_MODEM] = g_param_spec_object (MM_BASE_CBM_MODEM, "Modem", diff --git a/src/mm-base-cbm.h b/src/mm-base-cbm.h index 538cd9d1..08dcd3ae 100644 --- a/src/mm-base-cbm.h +++ b/src/mm-base-cbm.h @@ -56,7 +56,8 @@ struct _MMBaseCbmClass { GType mm_base_cbm_get_type (void); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMBaseCbm, g_object_unref) -MMBaseCbm *mm_base_cbm_new (MMBaseModem *modem); +MMBaseCbm *mm_base_cbm_new (MMBaseModem *modem, + GObject *bind_to); gboolean mm_base_cbm_take_part (MMBaseCbm *self, MMCbmPart *part, GError **error); diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index 2e4337fe..eb7c04ca 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -39,6 +39,7 @@ #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); @@ -2752,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, diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h index acdaec3c..1f35b913 100644 --- a/src/mm-base-modem.h +++ b/src/mm-base-modem.h @@ -57,7 +57,6 @@ typedef struct _MMBaseModem MMBaseModem; typedef struct _MMBaseModemClass MMBaseModemClass; typedef struct _MMBaseModemPrivate MMBaseModemPrivate; -#define MM_BASE_MODEM_CONNECTION "base-modem-connection" #define MM_BASE_MODEM_MAX_TIMEOUTS "base-modem-max-timeouts" #define MM_BASE_MODEM_VALID "base-modem-valid" #define MM_BASE_MODEM_DEVICE "base-modem-device" diff --git a/src/mm-base-sim.c b/src/mm-base-sim.c index 04dbcf65..9bffe872 100644 --- a/src/mm-base-sim.c +++ b/src/mm-base-sim.c @@ -34,18 +34,22 @@ #include "mm-log-object.h" #include "mm-modem-helpers.h" #include "mm-error-helpers.h" +#include "mm-bind.h" static void async_initable_iface_init (GAsyncInitableIface *iface); static void log_object_iface_init (MMLogObjectInterface *iface); +static void bind_iface_init (MMBindInterface *iface); G_DEFINE_TYPE_EXTENDED (MMBaseSim, mm_base_sim, MM_GDBUS_TYPE_SIM_SKELETON, 0, G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init) - 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_BIND, bind_iface_init)) enum { PROP_0, PROP_PATH, PROP_CONNECTION, + PROP_BIND_TO, PROP_MODEM, PROP_SLOT_NUMBER, PROP_LAST @@ -67,6 +71,9 @@ struct _MMBaseSimPrivate { MMAuthProvider *authp; GCancellable *authp_cancellable; + /* The object this SIM is bound to */ + GObject *bind_to; + /* The modem which owns this SIM */ MMBaseModem *modem; /* The path where the SIM object is exported */ @@ -2295,6 +2302,7 @@ load_gid2 (MMBaseSim *self, MMBaseSim * mm_base_sim_new_initialized (MMBaseModem *modem, + GObject *bind_to, guint slot_number, gboolean active, const gchar *sim_identifier, @@ -2308,6 +2316,7 @@ mm_base_sim_new_initialized (MMBaseModem *modem, sim = MM_BASE_SIM (g_object_new (MM_TYPE_BASE_SIM, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, bind_to, MM_BASE_SIM_SLOT_NUMBER, slot_number, "active", active, "sim-identifier", sim_identifier, @@ -2897,6 +2906,7 @@ initable_init_async (GAsyncInitable *initable, void mm_base_sim_new (MMBaseModem *modem, + GObject *bind_to, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) @@ -2907,6 +2917,7 @@ mm_base_sim_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, bind_to, "active", TRUE, /* by default always active */ NULL); } @@ -2972,18 +2983,14 @@ set_property (GObject *object, else if (self->priv->path) sim_dbus_export (self); break; + case PROP_BIND_TO: + g_clear_object (&self->priv->bind_to); + self->priv->bind_to = g_value_dup_object (value); + mm_bind_to (MM_BIND (self), MM_BASE_SIM_CONNECTION, self->priv->bind_to); + break; case PROP_MODEM: g_clear_object (&self->priv->modem); self->priv->modem = g_value_dup_object (value); - if (self->priv->modem) { - /* Set owner ID */ - mm_log_object_set_owner_id (MM_LOG_OBJECT (self), mm_log_object_get_id (MM_LOG_OBJECT (self->priv->modem))); - /* Bind the modem's connection (which is set when it is exported, - * and unset when unexported) to the SIM's connection */ - g_object_bind_property (self->priv->modem, MM_BASE_MODEM_CONNECTION, - self, MM_BASE_SIM_CONNECTION, - G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); - } break; case PROP_SLOT_NUMBER: self->priv->slot_number = g_value_get_uint (value); @@ -3009,6 +3016,9 @@ get_property (GObject *object, case PROP_CONNECTION: g_value_set_object (value, self->priv->connection); break; + case PROP_BIND_TO: + g_value_set_object (value, self->priv->bind_to); + break; case PROP_MODEM: g_value_set_object (value, self->priv->modem); break; @@ -3056,6 +3066,7 @@ dispose (GObject *object) } g_clear_object (&self->priv->modem); + g_clear_object (&self->priv->bind_to); g_cancellable_cancel (self->priv->authp_cancellable); g_clear_object (&self->priv->authp_cancellable); @@ -3075,6 +3086,11 @@ log_object_iface_init (MMLogObjectInterface *iface) iface->build_id = log_object_build_id; } +static void +bind_iface_init (MMBindInterface *iface) +{ +} + static void mm_base_sim_class_init (MMBaseSimClass *klass) { @@ -3139,6 +3155,8 @@ mm_base_sim_class_init (MMBaseSimClass *klass) G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_MODEM, properties[PROP_MODEM]); + g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); + properties[PROP_SLOT_NUMBER] = g_param_spec_uint (MM_BASE_SIM_SLOT_NUMBER, "Slot number", diff --git a/src/mm-base-sim.h b/src/mm-base-sim.h index 60901c0d..8339988c 100644 --- a/src/mm-base-sim.h +++ b/src/mm-base-sim.h @@ -213,6 +213,7 @@ GType mm_base_sim_get_type (void); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMBaseSim, g_object_unref) void mm_base_sim_new (MMBaseModem *modem, + GObject *bind_to, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); @@ -228,6 +229,7 @@ gboolean mm_base_sim_initialize_finish (MMBaseSim *self, GError **error); MMBaseSim *mm_base_sim_new_initialized (MMBaseModem *modem, + GObject *bind_to, guint slot_number, gboolean active, const gchar *sim_identifier, diff --git a/src/mm-base-sms.c b/src/mm-base-sms.c index f7d46321..0e7c7527 100644 --- a/src/mm-base-sms.c +++ b/src/mm-base-sms.c @@ -37,16 +37,20 @@ #include "mm-modem-helpers.h" #include "mm-error-helpers.h" #include "mm-auth-provider.h" +#include "mm-bind.h" static void log_object_iface_init (MMLogObjectInterface *iface); +static void bind_iface_init (MMBindInterface *iface); G_DEFINE_TYPE_EXTENDED (MMBaseSms, mm_base_sms, MM_GDBUS_TYPE_SMS_SKELETON, 0, - 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_BIND, bind_iface_init)) enum { PROP_0, PROP_PATH, PROP_CONNECTION, + PROP_BIND_TO, PROP_MODEM, PROP_IS_MULTIPART, PROP_MAX_PARTS, @@ -65,6 +69,9 @@ struct _MMBaseSmsPrivate { MMAuthProvider *authp; GCancellable *authp_cancellable; + /* The object this SMS is bound to */ + GObject *bind_to; + /* The modem which owns this SMS */ MMBaseModem *modem; /* The path where the SMS object is exported */ @@ -1798,6 +1805,7 @@ mm_base_sms_new (MMBaseModem *modem) { return MM_BASE_SMS (g_object_new (MM_TYPE_BASE_SMS, MM_BASE_SMS_MODEM, modem, + MM_BIND_TO, modem, NULL)); } @@ -1995,18 +2003,14 @@ set_property (GObject *object, else if (self->priv->path) sms_dbus_export (self); break; + case PROP_BIND_TO: + g_clear_object (&self->priv->bind_to); + self->priv->bind_to = g_value_dup_object (value); + mm_bind_to (MM_BIND (self), MM_BASE_SMS_CONNECTION, self->priv->bind_to); + break; case PROP_MODEM: g_clear_object (&self->priv->modem); self->priv->modem = g_value_dup_object (value); - if (self->priv->modem) { - /* Set owner ID */ - mm_log_object_set_owner_id (MM_LOG_OBJECT (self), mm_log_object_get_id (MM_LOG_OBJECT (self->priv->modem))); - /* Bind the modem's connection (which is set when it is exported, - * and unset when unexported) to the SMS's connection */ - g_object_bind_property (self->priv->modem, MM_BASE_MODEM_CONNECTION, - self, MM_BASE_SMS_CONNECTION, - G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); - } break; case PROP_IS_MULTIPART: self->priv->is_multipart = g_value_get_boolean (value); @@ -2038,6 +2042,9 @@ get_property (GObject *object, case PROP_CONNECTION: g_value_set_object (value, self->priv->connection); break; + case PROP_BIND_TO: + g_value_set_object (value, self->priv->bind_to); + break; case PROP_MODEM: g_value_set_object (value, self->priv->modem); break; @@ -2098,6 +2105,7 @@ dispose (GObject *object) } g_clear_object (&self->priv->modem); + g_clear_object (&self->priv->bind_to); g_cancellable_cancel (self->priv->authp_cancellable); g_clear_object (&self->priv->authp_cancellable); @@ -2110,6 +2118,11 @@ log_object_iface_init (MMLogObjectInterface *iface) iface->build_id = log_object_build_id; } +static void +bind_iface_init (MMBindInterface *iface) +{ +} + static void mm_base_sms_class_init (MMBaseSmsClass *klass) { @@ -2146,6 +2159,8 @@ mm_base_sms_class_init (MMBaseSmsClass *klass) G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_PATH, properties[PROP_PATH]); + g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); + properties[PROP_MODEM] = g_param_spec_object (MM_BASE_SMS_MODEM, "Modem", diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c index 33a1b8f1..eb30f78a 100644 --- a/src/mm-bearer-mbim.c +++ b/src/mm-bearer-mbim.c @@ -33,6 +33,7 @@ #include "mm-bearer-mbim.h" #include "mm-log-object.h" #include "mm-context.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBearerMbim, mm_bearer_mbim, MM_TYPE_BASE_BEARER) @@ -2019,6 +2020,7 @@ mm_bearer_mbim_new (MMBroadbandModemMbim *modem, * g_object_new() here */ bearer = g_object_new (MM_TYPE_BEARER_MBIM, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), MM_BASE_BEARER_CONFIG, config, NULL); diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c index cccbf239..8f387ce8 100644 --- a/src/mm-bearer-qmi.c +++ b/src/mm-bearer-qmi.c @@ -37,6 +37,7 @@ #include "mm-log-object.h" #include "mm-modem-helpers.h" #include "mm-context.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBearerQmi, mm_bearer_qmi, MM_TYPE_BASE_BEARER) @@ -2959,6 +2960,7 @@ mm_bearer_qmi_new (MMBroadbandModemQmi *modem, * g_object_new() here */ bearer = g_object_new (MM_TYPE_BEARER_QMI, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), MM_BASE_BEARER_CONFIG, config, NULL); diff --git a/src/mm-bind.c b/src/mm-bind.c new file mode 100644 index 00000000..cef83bea --- /dev/null +++ b/src/mm-bind.c @@ -0,0 +1,62 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2025 Dan Williams + */ + +#include "mm-bind.h" +#include "mm-log-object.h" + +G_DEFINE_INTERFACE (MMBind, mm_bind, MM_TYPE_LOG_OBJECT) + +gboolean +mm_bind_to (MMBind *self, const gchar *local_propname, GObject *other_object) +{ + if (other_object) { + /* Set log owner ID */ + mm_log_object_set_owner_id (MM_LOG_OBJECT (self), + mm_log_object_get_id (MM_LOG_OBJECT (other_object))); + + if (local_propname) { + /* Bind the other object's connection property (which is set when it is + * exported, and unset when unexported) to this object's connection + * property. + */ + g_object_bind_property (other_object, + MM_BINDABLE_CONNECTION, + self, + local_propname, + G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); + } + } + return !!other_object; +} + +static void +mm_bind_default_init (MMBindInterface *iface) +{ + static gsize initialized = 0; + + if (!g_once_init_enter (&initialized)) + return; + + /* Properties */ + g_object_interface_install_property ( + iface, + g_param_spec_object (MM_BIND_TO, + "Bind to", + "Bind to this object", + G_TYPE_OBJECT, + G_PARAM_READWRITE)); + + g_once_init_leave (&initialized, 1); +} diff --git a/src/mm-bind.h b/src/mm-bind.h new file mode 100644 index 00000000..144df2de --- /dev/null +++ b/src/mm-bind.h @@ -0,0 +1,42 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2025 Dan Williams + */ + +#ifndef MM_CHILD_H +#define MM_CHILD_H + +#include +#include + +/* Properties */ +#define MM_BIND_TO "bind-to" + +/* Property name used by an object that wants to allow others + * to bind its connection property. + */ +#define MM_BINDABLE_CONNECTION "bind-connection" + +#define MM_TYPE_BIND mm_bind_get_type () +G_DECLARE_INTERFACE (MMBind, mm_bind, MM, BIND, MMBind) + +struct _MMBindInterface +{ + GTypeInterface g_iface; +}; + +gboolean mm_bind_to (MMBind *self, + const gchar *local_propname, + GObject *other_object); + +#endif /* MM_LOG_OBJECT_H */ diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c index dfd9d489..4c8690d7 100644 --- a/src/mm-broadband-bearer.c +++ b/src/mm-broadband-bearer.c @@ -37,6 +37,7 @@ #include "mm-modem-helpers.h" #include "mm-port-enums-types.h" #include "mm-helper-enums-types.h" +#include "mm-bind.h" static void async_initable_iface_init (GAsyncInitableIface *iface); @@ -1966,6 +1967,7 @@ mm_broadband_bearer_new (MMBroadbandModem *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), MM_BASE_BEARER_CONFIG, bearer_properties, MM_BROADBAND_BEARER_FLOW_CONTROL, flow_control, NULL); diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 16f2a088..bd79ceca 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -11550,7 +11550,7 @@ cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *_self) return iface_modem_cell_broadcast_parent->create_cbm (_self); } - return mm_base_cbm_new (MM_BASE_MODEM (self)); + return mm_base_cbm_new (MM_BASE_MODEM (self), G_OBJECT (self)); } /*****************************************************************************/ diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 6eb04fe2..2ccde45e 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -63,6 +63,7 @@ #include "libqcdm/src/logs.h" #include "libqcdm/src/log-items.h" #include "mm-helper-enums-types.h" +#include "mm-bind.h" static void iface_modem_init (MMIfaceModemInterface *iface); static void iface_modem_3gpp_init (MMIfaceModem3gppInterface *iface); @@ -504,6 +505,7 @@ modem_create_sim (MMIfaceModem *self, { /* New generic SIM */ mm_base_sim_new (MM_BASE_MODEM (self), + G_OBJECT (self), NULL, /* cancellable */ callback, user_data); @@ -5905,6 +5907,7 @@ modem_3gpp_create_initial_eps_bearer (MMIfaceModem3gpp *self, * attempt connection through this bearer object. */ bearer = g_object_new (MM_TYPE_BASE_BEARER, MM_BASE_BEARER_MODEM, MM_BASE_MODEM (self), + MM_BIND_TO, G_OBJECT (self), MM_BASE_BEARER_CONFIG, config, "bearer-type", MM_BEARER_TYPE_DEFAULT_ATTACH, "connected", TRUE, @@ -8896,6 +8899,7 @@ modem_voice_create_call (MMIfaceModemVoice *_self, MMBroadbandModem *self = MM_BROADBAND_MODEM (_self); return mm_base_call_new (MM_BASE_MODEM (self), + G_OBJECT (self), direction, number, /* If +CLCC is supported, we want no incoming timeout. @@ -10688,7 +10692,7 @@ modem_cell_broadcast_cleanup_unsolicited_events (MMIfaceModemCellBroadcast *self static MMBaseCbm * modem_cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *self) { - return mm_base_cbm_new (MM_BASE_MODEM (self)); + return mm_base_cbm_new (MM_BASE_MODEM (self), G_OBJECT (self)); } /***********************************************************************************/ diff --git a/src/mm-call-qmi.c b/src/mm-call-qmi.c index 8fad9584..441be147 100644 --- a/src/mm-call-qmi.c +++ b/src/mm-call-qmi.c @@ -31,6 +31,7 @@ #include "mm-call-qmi.h" #include "mm-base-modem.h" #include "mm-log-object.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMCallQmi, mm_call_qmi, MM_TYPE_BASE_CALL) @@ -492,6 +493,7 @@ mm_call_qmi_new (MMBaseModem *modem, { return MM_BASE_CALL (g_object_new (MM_TYPE_CALL_QMI, MM_BASE_CALL_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "direction", direction, "number", number, MM_BASE_CALL_SKIP_INCOMING_TIMEOUT, TRUE, diff --git a/src/mm-cbm-list.c b/src/mm-cbm-list.c index b86246a6..02d91bdc 100644 --- a/src/mm-cbm-list.c +++ b/src/mm-cbm-list.c @@ -32,14 +32,18 @@ #include "mm-cbm-list.h" #include "mm-base-cbm.h" #include "mm-log-object.h" +#include "mm-bind.h" static void log_object_iface_init (MMLogObjectInterface *iface); +static void bind_iface_init (MMBindInterface *iface); G_DEFINE_TYPE_EXTENDED (MMCbmList, mm_cbm_list, G_TYPE_OBJECT, 0, - 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_BIND, bind_iface_init)) enum { PROP_0, + PROP_BIND_TO, PROP_MODEM, PROP_LAST }; @@ -53,6 +57,8 @@ enum { static guint signals[SIGNAL_LAST]; struct _MMCbmListPrivate { + /* The object this CBM list is bound to */ + GObject *bind_to; /* The owner modem */ MMBaseModem *modem; /* List of cbm objects */ @@ -283,11 +289,12 @@ log_object_build_id (MMLogObject *_self) /*****************************************************************************/ MMCbmList * -mm_cbm_list_new (MMBaseModem *modem) +mm_cbm_list_new (MMBaseModem *modem, GObject *bind_to) { /* Create the object */ return g_object_new (MM_TYPE_CBM_LIST, MM_CBM_LIST_MODEM, modem, + MM_BIND_TO, bind_to, NULL); } @@ -300,14 +307,14 @@ set_property (GObject *object, MMCbmList *self = MM_CBM_LIST (object); switch (prop_id) { + case PROP_BIND_TO: + g_clear_object (&self->priv->bind_to); + self->priv->bind_to = g_value_dup_object (value); + mm_bind_to (MM_BIND (self), NULL, self->priv->bind_to); + break; case PROP_MODEM: g_clear_object (&self->priv->modem); self->priv->modem = g_value_dup_object (value); - if (self->priv->modem) { - /* Set owner ID */ - mm_log_object_set_owner_id (MM_LOG_OBJECT (self), - mm_log_object_get_id (MM_LOG_OBJECT (self->priv->modem))); - } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -324,6 +331,9 @@ get_property (GObject *object, MMCbmList *self = MM_CBM_LIST (object); switch (prop_id) { + case PROP_BIND_TO: + g_value_set_object (value, self->priv->bind_to); + break; case PROP_MODEM: g_value_set_object (value, self->priv->modem); break; @@ -348,6 +358,7 @@ dispose (GObject *object) MMCbmList *self = MM_CBM_LIST (object); g_clear_object (&self->priv->modem); + g_clear_object (&self->priv->bind_to); g_list_free_full (self->priv->list, g_object_unref); self->priv->list = NULL; @@ -360,6 +371,11 @@ log_object_iface_init (MMLogObjectInterface *iface) iface->build_id = log_object_build_id; } +static void +bind_iface_init (MMBindInterface *iface) +{ +} + static void mm_cbm_list_class_init (MMCbmListClass *klass) { @@ -381,6 +397,8 @@ mm_cbm_list_class_init (MMCbmListClass *klass) G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_MODEM, properties[PROP_MODEM]); + g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); + /* Signals */ signals[SIGNAL_ADDED] = g_signal_new (MM_CBM_ADDED, diff --git a/src/mm-cbm-list.h b/src/mm-cbm-list.h index 79a48878..2c493659 100644 --- a/src/mm-cbm-list.h +++ b/src/mm-cbm-list.h @@ -57,7 +57,8 @@ struct _MMCbmListClass { GType mm_cbm_list_get_type (void); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMCbmList, g_object_unref) -MMCbmList *mm_cbm_list_new (MMBaseModem *modem); +MMCbmList *mm_cbm_list_new (MMBaseModem *modem, + GObject *bind_to); GStrv mm_cbm_list_get_paths (MMCbmList *self); guint mm_cbm_list_get_count (MMCbmList *self); diff --git a/src/mm-device.c b/src/mm-device.c index b2e3541a..b991f18d 100644 --- a/src/mm-device.c +++ b/src/mm-device.c @@ -27,6 +27,7 @@ #include "mm-plugin.h" #include "mm-log-object.h" #include "mm-daemon-enums-types.h" +#include "mm-bind.h" static void log_object_iface_init (MMLogObjectInterface *iface); @@ -341,7 +342,7 @@ unexport_modem (MMDevice *self) if (path != NULL) { g_dbus_object_manager_server_unexport (self->priv->object_manager, path); g_object_set (self->priv->modem, - MM_BASE_MODEM_CONNECTION, NULL, + MM_BINDABLE_CONNECTION, NULL, NULL); mm_obj_dbg (self, "unexported modem from path '%s'", path); g_free (path); @@ -389,7 +390,7 @@ export_modem (MMDevice *self) path = g_strdup_printf (MM_DBUS_MODEM_PREFIX "/%d", mm_base_modem_get_dbus_id (self->priv->modem)); g_object_set (self->priv->modem, "g-object-path", path, - MM_BASE_MODEM_CONNECTION, connection, + MM_BINDABLE_CONNECTION, connection, NULL); g_dbus_object_manager_server_export (self->priv->object_manager, diff --git a/src/mm-iface-modem-cell-broadcast.c b/src/mm-iface-modem-cell-broadcast.c index b29d01c5..d6fdbdfe 100644 --- a/src/mm-iface-modem-cell-broadcast.c +++ b/src/mm-iface-modem-cell-broadcast.c @@ -640,7 +640,7 @@ interface_enabling_step (GTask *task) case ENABLING_STEP_FIRST: { g_autoptr (MMCbmList) list = NULL; - list = mm_cbm_list_new (MM_BASE_MODEM (self)); + list = mm_cbm_list_new (MM_BASE_MODEM (self), G_OBJECT (self)); g_object_set (self, MM_IFACE_MODEM_CELL_BROADCAST_CBM_LIST, list, NULL); diff --git a/src/mm-iface-modem-messaging.c b/src/mm-iface-modem-messaging.c index 0634b578..581843c5 100644 --- a/src/mm-iface-modem-messaging.c +++ b/src/mm-iface-modem-messaging.c @@ -1008,7 +1008,7 @@ interface_enabling_step (GTask *task) case ENABLING_STEP_FIRST: { MMSmsList *list; - list = mm_sms_list_new (MM_BASE_MODEM (self)); + list = mm_sms_list_new (MM_BASE_MODEM (self), G_OBJECT (self)); g_object_set (self, MM_IFACE_MODEM_MESSAGING_SMS_LIST, list, NULL); diff --git a/src/mm-sim-mbim.c b/src/mm-sim-mbim.c index 525b3296..5b09fd67 100644 --- a/src/mm-sim-mbim.c +++ b/src/mm-sim-mbim.c @@ -31,6 +31,7 @@ #include "mm-log-object.h" #include "mm-modem-helpers-mbim.h" #include "mm-sim-mbim.h" +#include "mm-bind.h" #define MS_UICC_LOW_LEVEL_SUPPORTED_VERSION 0x01 @@ -1734,6 +1735,7 @@ mm_sim_mbim_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } @@ -1755,6 +1757,7 @@ mm_sim_mbim_new_initialized (MMBaseModem *modem, sim = MM_BASE_SIM (g_object_new (MM_TYPE_SIM_MBIM, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), MM_BASE_SIM_SLOT_NUMBER, slot_number, "active", active, "sim-type", sim_type, diff --git a/src/mm-sim-qmi.c b/src/mm-sim-qmi.c index 0ac3b6eb..f06f4808 100644 --- a/src/mm-sim-qmi.c +++ b/src/mm-sim-qmi.c @@ -31,6 +31,7 @@ #include "mm-sim-qmi.h" #include "mm-modem-helpers-qmi.h" #include "mm-shared-qmi.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMSimQmi, mm_sim_qmi, MM_TYPE_BASE_SIM) @@ -1819,6 +1820,7 @@ mm_sim_qmi_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), MM_SIM_QMI_DMS_UIM_DEPRECATED, dms_uim_deprecated, "active", TRUE, /* by default always active */ NULL); @@ -1840,6 +1842,7 @@ mm_sim_qmi_new_initialized (MMBaseModem *modem, sim = MM_BASE_SIM (g_object_new (MM_TYPE_SIM_QMI, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), MM_SIM_QMI_DMS_UIM_DEPRECATED, dms_uim_deprecated, MM_BASE_SIM_SLOT_NUMBER, slot_number, "active", active, diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c index 3bad49aa..f2401dae 100644 --- a/src/mm-sms-list.c +++ b/src/mm-sms-list.c @@ -28,14 +28,18 @@ #include "mm-sms-list.h" #include "mm-base-sms.h" #include "mm-log-object.h" +#include "mm-bind.h" static void log_object_iface_init (MMLogObjectInterface *iface); +static void bind_iface_init (MMBindInterface *iface); G_DEFINE_TYPE_EXTENDED (MMSmsList, mm_sms_list, G_TYPE_OBJECT, 0, - 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_BIND, bind_iface_init)) enum { PROP_0, + PROP_BIND_TO, PROP_MODEM, PROP_LAST }; @@ -49,6 +53,8 @@ enum { static guint signals[SIGNAL_LAST]; struct _MMSmsListPrivate { + /* The object this SMS list is bound to */ + GObject *bind_to; /* The owner modem */ MMBaseModem *modem; /* List of sms objects */ @@ -397,11 +403,12 @@ log_object_build_id (MMLogObject *_self) /*****************************************************************************/ MMSmsList * -mm_sms_list_new (MMBaseModem *modem) +mm_sms_list_new (MMBaseModem *modem, GObject *bind_to) { /* Create the object */ return g_object_new (MM_TYPE_SMS_LIST, MM_SMS_LIST_MODEM, modem, + MM_BIND_TO, bind_to, NULL); } @@ -414,13 +421,14 @@ set_property (GObject *object, MMSmsList *self = MM_SMS_LIST (object); switch (prop_id) { + case PROP_BIND_TO: + g_clear_object (&self->priv->bind_to); + self->priv->bind_to = g_value_dup_object (value); + mm_bind_to (MM_BIND (self), NULL, self->priv->bind_to); + break; case PROP_MODEM: g_clear_object (&self->priv->modem); self->priv->modem = g_value_dup_object (value); - if (self->priv->modem) { - /* Set owner ID */ - mm_log_object_set_owner_id (MM_LOG_OBJECT (self), mm_log_object_get_id (MM_LOG_OBJECT (self->priv->modem))); - } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -437,6 +445,9 @@ get_property (GObject *object, MMSmsList *self = MM_SMS_LIST (object); switch (prop_id) { + case PROP_BIND_TO: + g_value_set_object (value, self->priv->bind_to); + break; case PROP_MODEM: g_value_set_object (value, self->priv->modem); break; @@ -461,6 +472,7 @@ dispose (GObject *object) MMSmsList *self = MM_SMS_LIST (object); g_clear_object (&self->priv->modem); + g_clear_object (&self->priv->bind_to); g_list_free_full (self->priv->list, g_object_unref); self->priv->list = NULL; @@ -473,6 +485,11 @@ log_object_iface_init (MMLogObjectInterface *iface) iface->build_id = log_object_build_id; } +static void +bind_iface_init (MMBindInterface *iface) +{ +} + static void mm_sms_list_class_init (MMSmsListClass *klass) { @@ -494,6 +511,8 @@ mm_sms_list_class_init (MMSmsListClass *klass) G_PARAM_READWRITE); g_object_class_install_property (object_class, PROP_MODEM, properties[PROP_MODEM]); + g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); + /* Signals */ signals[SIGNAL_ADDED] = g_signal_new (MM_SMS_ADDED, diff --git a/src/mm-sms-list.h b/src/mm-sms-list.h index 8a77d6ca..775611c8 100644 --- a/src/mm-sms-list.h +++ b/src/mm-sms-list.h @@ -57,7 +57,8 @@ struct _MMSmsListClass { GType mm_sms_list_get_type (void); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMSmsList, g_object_unref) -MMSmsList *mm_sms_list_new (MMBaseModem *modem); +MMSmsList *mm_sms_list_new (MMBaseModem *modem, + GObject *bind_to); GStrv mm_sms_list_get_paths (MMSmsList *self); guint mm_sms_list_get_count (MMSmsList *self); diff --git a/src/mm-sms-mbim.c b/src/mm-sms-mbim.c index acbbee44..0a404aa5 100644 --- a/src/mm-sms-mbim.c +++ b/src/mm-sms-mbim.c @@ -31,6 +31,7 @@ #include "mm-base-modem.h" #include "mm-log-object.h" #include "mm-sms-part-3gpp.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMSmsMbim, mm_sms_mbim, MM_TYPE_BASE_SMS) @@ -345,6 +346,7 @@ mm_sms_mbim_new (MMBaseModem *modem) { return MM_BASE_SMS (g_object_new (MM_TYPE_SMS_MBIM, MM_BASE_SMS_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), NULL)); } diff --git a/src/mm-sms-qmi.c b/src/mm-sms-qmi.c index 3db0512e..abc45649 100644 --- a/src/mm-sms-qmi.c +++ b/src/mm-sms-qmi.c @@ -33,6 +33,7 @@ #include "mm-sms-part-3gpp.h" #include "mm-sms-part-cdma.h" #include "mm-log-object.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMSmsQmi, mm_sms_qmi, MM_TYPE_BASE_SMS) @@ -789,6 +790,7 @@ mm_sms_qmi_new (MMBaseModem *modem) { return MM_BASE_SMS (g_object_new (MM_TYPE_SMS_QMI, MM_BASE_SMS_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), NULL)); } diff --git a/src/plugins/altair/mm-broadband-bearer-altair-lte.c b/src/plugins/altair/mm-broadband-bearer-altair-lte.c index 4fee0f5f..7129d4f3 100644 --- a/src/plugins/altair/mm-broadband-bearer-altair-lte.c +++ b/src/plugins/altair/mm-broadband-bearer-altair-lte.c @@ -32,6 +32,7 @@ #include "mm-iface-modem-3gpp.h" #include "mm-log.h" #include "mm-modem-helpers.h" +#include "mm-bind.h" #define CONNECTION_CHECK_TIMEOUT_SEC 5 #define STATCM_TAG "%STATCM:" @@ -340,6 +341,7 @@ mm_broadband_bearer_altair_lte_new (MMBroadbandModemAltairLte *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), MM_BASE_BEARER_CONFIG, config, NULL); } diff --git a/src/plugins/cinterion/mm-broadband-bearer-cinterion.c b/src/plugins/cinterion/mm-broadband-bearer-cinterion.c index 8ab156e8..396837fe 100644 --- a/src/plugins/cinterion/mm-broadband-bearer-cinterion.c +++ b/src/plugins/cinterion/mm-broadband-bearer-cinterion.c @@ -28,6 +28,7 @@ #include "mm-modem-helpers.h" #include "mm-modem-helpers-cinterion.h" #include "mm-daemon-enums-types.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBroadbandBearerCinterion, mm_broadband_bearer_cinterion, MM_TYPE_BROADBAND_BEARER) @@ -767,6 +768,7 @@ mm_broadband_bearer_cinterion_new (MMBroadbandModemCinterion *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, NULL); } diff --git a/src/plugins/cinterion/mm-broadband-modem-cinterion.c b/src/plugins/cinterion/mm-broadband-modem-cinterion.c index 31a3078a..3d70cf50 100644 --- a/src/plugins/cinterion/mm-broadband-modem-cinterion.c +++ b/src/plugins/cinterion/mm-broadband-modem-cinterion.c @@ -3128,7 +3128,9 @@ cinterion_simlocal_unsolicited_handler (MMPortSerialAt *port, if (sim == NULL && is_available) { mm_obj_info (self, "SIM in slot %i inserted", i + 1); - sim = mm_base_sim_new_initialized (MM_BASE_MODEM (self), i + 1, FALSE, + sim = mm_base_sim_new_initialized (MM_BASE_MODEM (self), + G_OBJECT (self), + i + 1, FALSE, NULL, NULL, NULL, NULL, NULL, NULL); mm_iface_modem_modify_sim (MM_IFACE_MODEM (self), i, sim); } else if (sim != NULL && !is_available) { @@ -3185,7 +3187,9 @@ cinterion_slot_availability_init_ready (MMBaseModem *_self, is_available = g_array_index (available, gboolean, i); if (is_available) - sim = mm_base_sim_new_initialized (MM_BASE_MODEM (self), i + 1, FALSE, + sim = mm_base_sim_new_initialized (MM_BASE_MODEM (self), + G_OBJECT (self), + i + 1, FALSE, NULL, NULL, NULL, NULL, NULL, NULL); g_ptr_array_add (ctx->sim_slots, sim); } diff --git a/src/plugins/cinterion/mm-shared-cinterion.c b/src/plugins/cinterion/mm-shared-cinterion.c index 8724ad3a..4ae1f503 100644 --- a/src/plugins/cinterion/mm-shared-cinterion.c +++ b/src/plugins/cinterion/mm-shared-cinterion.c @@ -1006,6 +1006,7 @@ mm_shared_cinterion_create_call (MMIfaceModemVoice *self, if (priv->slcc_support == FEATURE_SUPPORTED) { mm_obj_dbg (self, "created new call with ^SLCC support"); return mm_base_call_new (MM_BASE_MODEM (self), + G_OBJECT (self), direction, number, /* When SLCC is supported we have support for detailed diff --git a/src/plugins/fibocom/mm-broadband-bearer-fibocom-ecm.c b/src/plugins/fibocom/mm-broadband-bearer-fibocom-ecm.c index 06f28b8a..5b5ad78c 100644 --- a/src/plugins/fibocom/mm-broadband-bearer-fibocom-ecm.c +++ b/src/plugins/fibocom/mm-broadband-bearer-fibocom-ecm.c @@ -20,6 +20,7 @@ #include "mm-base-modem-at.h" #include "mm-iface-modem-3gpp.h" #include "mm-log.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBroadbandBearerFibocomEcm, mm_broadband_bearer_fibocom_ecm, MM_TYPE_BROADBAND_BEARER) @@ -513,6 +514,7 @@ mm_broadband_bearer_fibocom_ecm_new (MMBroadbandModemFibocom *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, NULL); } diff --git a/src/plugins/huawei/mm-broadband-bearer-huawei.c b/src/plugins/huawei/mm-broadband-bearer-huawei.c index 19112af4..9c680a5c 100644 --- a/src/plugins/huawei/mm-broadband-bearer-huawei.c +++ b/src/plugins/huawei/mm-broadband-bearer-huawei.c @@ -31,6 +31,7 @@ #include "mm-modem-helpers.h" #include "mm-modem-helpers-huawei.h" #include "mm-daemon-enums-types.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBroadbandBearerHuawei, mm_broadband_bearer_huawei, MM_TYPE_BROADBAND_BEARER) @@ -841,6 +842,7 @@ mm_broadband_bearer_huawei_new (MMBroadbandModemHuawei *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, NULL); } diff --git a/src/plugins/huawei/mm-broadband-modem-huawei.c b/src/plugins/huawei/mm-broadband-modem-huawei.c index cddde30a..5a7f2afc 100644 --- a/src/plugins/huawei/mm-broadband-modem-huawei.c +++ b/src/plugins/huawei/mm-broadband-modem-huawei.c @@ -3881,6 +3881,7 @@ create_call (MMIfaceModemVoice *self, const gchar *number) { return mm_base_call_new (MM_BASE_MODEM (self), + G_OBJECT (self), direction, number, TRUE, /* skip_incoming_timeout */ diff --git a/src/plugins/huawei/mm-sim-huawei.c b/src/plugins/huawei/mm-sim-huawei.c index f937c773..bfd55b3c 100644 --- a/src/plugins/huawei/mm-sim-huawei.c +++ b/src/plugins/huawei/mm-sim-huawei.c @@ -27,6 +27,7 @@ #include #include "mm-modem-helpers.h" #include "mm-base-modem-at.h" +#include "mm-bind.h" #include "mm-sim-huawei.h" @@ -148,6 +149,7 @@ mm_sim_huawei_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } diff --git a/src/plugins/icera/mm-broadband-bearer-icera.c b/src/plugins/icera/mm-broadband-bearer-icera.c index d9c8415e..7c51bc36 100644 --- a/src/plugins/icera/mm-broadband-bearer-icera.c +++ b/src/plugins/icera/mm-broadband-bearer-icera.c @@ -34,6 +34,7 @@ #include "mm-error-helpers.h" #include "mm-daemon-enums-types.h" #include "mm-modem-helpers-icera.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBroadbandBearerIcera, mm_broadband_bearer_icera, MM_TYPE_BROADBAND_BEARER); @@ -791,6 +792,7 @@ mm_broadband_bearer_icera_new (MMBroadbandModem *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, MM_BROADBAND_BEARER_ICERA_DEFAULT_IP_METHOD, ip_method, NULL); diff --git a/src/plugins/iridium/mm-bearer-iridium.c b/src/plugins/iridium/mm-bearer-iridium.c index c9e2a058..70ea80bb 100644 --- a/src/plugins/iridium/mm-bearer-iridium.c +++ b/src/plugins/iridium/mm-bearer-iridium.c @@ -26,6 +26,7 @@ #include "mm-bearer-iridium.h" #include "mm-base-modem-at.h" +#include "mm-bind.h" /* Allow up to 200s to get a proper IP connection */ #define BEARER_IRIDIUM_IP_TIMEOUT_DEFAULT 200 @@ -234,6 +235,7 @@ mm_bearer_iridium_new (MMBroadbandModemIridium *modem, * g_object_get() here */ bearer = g_object_new (MM_TYPE_BEARER_IRIDIUM, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, "ip-timeout", BEARER_IRIDIUM_IP_TIMEOUT_DEFAULT, NULL); diff --git a/src/plugins/iridium/mm-sim-iridium.c b/src/plugins/iridium/mm-sim-iridium.c index 3495039b..001bdf03 100644 --- a/src/plugins/iridium/mm-sim-iridium.c +++ b/src/plugins/iridium/mm-sim-iridium.c @@ -25,6 +25,7 @@ #define _LIBMM_INSIDE_MM #include +#include "mm-bind.h" #include "mm-sim-iridium.h" G_DEFINE_TYPE (MMSimIridium, mm_sim_iridium, MM_TYPE_BASE_SIM) @@ -63,6 +64,7 @@ mm_sim_iridium_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } diff --git a/src/plugins/mbm/mm-broadband-bearer-mbm.c b/src/plugins/mbm/mm-broadband-bearer-mbm.c index a9a09682..5f766cb5 100644 --- a/src/plugins/mbm/mm-broadband-bearer-mbm.c +++ b/src/plugins/mbm/mm-broadband-bearer-mbm.c @@ -42,6 +42,7 @@ #include "mm-modem-helpers.h" #include "mm-modem-helpers-mbm.h" #include "mm-daemon-enums-types.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBroadbandBearerMbm, mm_broadband_bearer_mbm, MM_TYPE_BROADBAND_BEARER) @@ -871,6 +872,7 @@ mm_broadband_bearer_mbm_new (MMBroadbandModemMbm *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, NULL); } diff --git a/src/plugins/mbm/mm-sim-mbm.c b/src/plugins/mbm/mm-sim-mbm.c index d3f73954..ec06b4a4 100644 --- a/src/plugins/mbm/mm-sim-mbm.c +++ b/src/plugins/mbm/mm-sim-mbm.c @@ -27,6 +27,7 @@ #include "mm-log-object.h" #include "mm-base-modem-at.h" #include "mm-sim-mbm.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMSimMbm, mm_sim_mbm, MM_TYPE_BASE_SIM) @@ -221,6 +222,7 @@ mm_sim_mbm_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } diff --git a/src/plugins/mtk/mm-bearer-mbim-mtk-fibocom.c b/src/plugins/mtk/mm-bearer-mbim-mtk-fibocom.c index 33398bd7..29b1f8fe 100644 --- a/src/plugins/mtk/mm-bearer-mbim-mtk-fibocom.c +++ b/src/plugins/mtk/mm-bearer-mbim-mtk-fibocom.c @@ -21,6 +21,7 @@ #include "mm-log-object.h" #include "mm-bearer-mbim-mtk-fibocom.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBearerMbimMtkFibocom, mm_bearer_mbim_mtk_fibocom, MM_TYPE_BEARER_MBIM) @@ -151,6 +152,7 @@ mm_bearer_mbim_mtk_fibocom_new (MMBroadbandModemMbim *modem, * g_object_new() here */ self = g_object_new (MM_TYPE_BEARER_MBIM_MTK_FIBOCOM, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, MM_BEARER_MBIM_ASYNC_SLAAC, is_async_slaac_supported, NULL); diff --git a/src/plugins/nokia/mm-sim-nokia.c b/src/plugins/nokia/mm-sim-nokia.c index a0d7c81a..988508fd 100644 --- a/src/plugins/nokia/mm-sim-nokia.c +++ b/src/plugins/nokia/mm-sim-nokia.c @@ -25,6 +25,7 @@ #include #include "mm-sim-nokia.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMSimNokia, mm_sim_nokia, MM_TYPE_BASE_SIM) @@ -62,6 +63,7 @@ mm_sim_nokia_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } diff --git a/src/plugins/novatel/mm-broadband-bearer-novatel-lte.c b/src/plugins/novatel/mm-broadband-bearer-novatel-lte.c index 503997b3..50a93d63 100644 --- a/src/plugins/novatel/mm-broadband-bearer-novatel-lte.c +++ b/src/plugins/novatel/mm-broadband-bearer-novatel-lte.c @@ -32,6 +32,7 @@ #include "mm-broadband-bearer-novatel-lte.h" #include "mm-log-object.h" #include "mm-modem-helpers.h" +#include "mm-bind.h" #define QMISTATUS_TAG "$NWQMISTATUS:" @@ -551,6 +552,7 @@ mm_broadband_bearer_novatel_lte_new (MMBroadbandModemNovatelLte *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, NULL); } diff --git a/src/plugins/novatel/mm-sim-novatel-lte.c b/src/plugins/novatel/mm-sim-novatel-lte.c index 4d71bd80..51e4899b 100644 --- a/src/plugins/novatel/mm-sim-novatel-lte.c +++ b/src/plugins/novatel/mm-sim-novatel-lte.c @@ -25,6 +25,7 @@ #include #include "mm-modem-helpers.h" #include "mm-base-modem-at.h" +#include "mm-bind.h" #include "mm-sim-novatel-lte.h" @@ -215,6 +216,7 @@ mm_sim_novatel_lte_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } diff --git a/src/plugins/option/mm-broadband-bearer-hso.c b/src/plugins/option/mm-broadband-bearer-hso.c index c5c071b2..190ae6d7 100644 --- a/src/plugins/option/mm-broadband-bearer-hso.c +++ b/src/plugins/option/mm-broadband-bearer-hso.c @@ -33,6 +33,7 @@ #include "mm-log-object.h" #include "mm-modem-helpers.h" #include "mm-daemon-enums-types.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBroadbandBearerHso, mm_broadband_bearer_hso, MM_TYPE_BROADBAND_BEARER); @@ -779,6 +780,7 @@ mm_broadband_bearer_hso_new (MMBroadbandModemHso *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, NULL); } diff --git a/src/plugins/option/mm-sim-option.c b/src/plugins/option/mm-sim-option.c index 0871c4f2..236d79fc 100644 --- a/src/plugins/option/mm-sim-option.c +++ b/src/plugins/option/mm-sim-option.c @@ -25,6 +25,7 @@ #include #include "mm-sim-option.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMSimOption, mm_sim_option, MM_TYPE_BASE_SIM) @@ -62,6 +63,7 @@ mm_sim_option_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } diff --git a/src/plugins/pantech/mm-sim-pantech.c b/src/plugins/pantech/mm-sim-pantech.c index 33414572..d2692abb 100644 --- a/src/plugins/pantech/mm-sim-pantech.c +++ b/src/plugins/pantech/mm-sim-pantech.c @@ -25,6 +25,7 @@ #include #include "mm-sim-pantech.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMSimPantech, mm_sim_pantech, MM_TYPE_BASE_SIM) @@ -62,6 +63,7 @@ mm_sim_pantech_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } diff --git a/src/plugins/sierra/mm-broadband-bearer-sierra.c b/src/plugins/sierra/mm-broadband-bearer-sierra.c index 4f0c9358..4cbee733 100644 --- a/src/plugins/sierra/mm-broadband-bearer-sierra.c +++ b/src/plugins/sierra/mm-broadband-bearer-sierra.c @@ -32,6 +32,7 @@ #include "mm-log-object.h" #include "mm-modem-helpers.h" #include "mm-modem-helpers-sierra.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBroadbandBearerSierra, mm_broadband_bearer_sierra, MM_TYPE_BROADBAND_BEARER); @@ -599,6 +600,7 @@ mm_broadband_bearer_sierra_new (MMBroadbandModem *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, MM_BROADBAND_BEARER_SIERRA_IS_ICERA, is_icera, NULL); diff --git a/src/plugins/sierra/mm-sim-sierra.c b/src/plugins/sierra/mm-sim-sierra.c index 2f3caa48..5b141f41 100644 --- a/src/plugins/sierra/mm-sim-sierra.c +++ b/src/plugins/sierra/mm-sim-sierra.c @@ -27,6 +27,7 @@ #include #include "mm-modem-helpers.h" #include "mm-base-modem-at.h" +#include "mm-bind.h" #include "mm-sim-sierra.h" @@ -139,6 +140,7 @@ mm_sim_sierra_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } diff --git a/src/plugins/ublox/mm-broadband-bearer-ublox.c b/src/plugins/ublox/mm-broadband-bearer-ublox.c index e8eb007b..07180dde 100644 --- a/src/plugins/ublox/mm-broadband-bearer-ublox.c +++ b/src/plugins/ublox/mm-broadband-bearer-ublox.c @@ -32,6 +32,7 @@ #include "mm-ublox-enums-types.h" #include "mm-modem-helpers.h" #include "mm-modem-helpers-ublox.h" +#include "mm-bind.h" G_DEFINE_TYPE (MMBroadbandBearerUblox, mm_broadband_bearer_ublox, MM_TYPE_BROADBAND_BEARER) @@ -927,6 +928,7 @@ mm_broadband_bearer_ublox_new (MMBroadbandModem *modem, callback, user_data, MM_BASE_BEARER_MODEM, modem, + MM_BIND_TO, modem, MM_BASE_BEARER_CONFIG, config, MM_BROADBAND_BEARER_UBLOX_USB_PROFILE, profile, MM_BROADBAND_BEARER_UBLOX_NETWORKING_MODE, mode, diff --git a/src/plugins/ublox/mm-broadband-modem-ublox.c b/src/plugins/ublox/mm-broadband-modem-ublox.c index cbda1911..3c58adda 100644 --- a/src/plugins/ublox/mm-broadband-modem-ublox.c +++ b/src/plugins/ublox/mm-broadband-modem-ublox.c @@ -1506,6 +1506,7 @@ create_call (MMIfaceModemVoice *self, const gchar *number) { return mm_base_call_new (MM_BASE_MODEM (self), + G_OBJECT (self), direction, number, TRUE, /* skip_incoming_timeout */ diff --git a/src/plugins/ublox/mm-sim-ublox.c b/src/plugins/ublox/mm-sim-ublox.c index 5850767e..7650800a 100644 --- a/src/plugins/ublox/mm-sim-ublox.c +++ b/src/plugins/ublox/mm-sim-ublox.c @@ -26,6 +26,7 @@ #include "mm-log.h" #include "mm-modem-helpers.h" #include "mm-base-modem-at.h" +#include "mm-bind.h" #include "mm-sim-ublox.h" @@ -144,6 +145,7 @@ mm_sim_ublox_new (MMBaseModem *modem, callback, user_data, MM_BASE_SIM_MODEM, modem, + MM_BIND_TO, G_OBJECT (modem), "active", TRUE, /* by default always active */ NULL); } -- cgit v1.2.3-70-g09d2 From 1fa21fcc48b271a8dc2191104e35bf4e95fa2331 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 1 May 2025 07:59:38 -0500 Subject: base-cbm,cbm-list,iface-cbm: remove usage of MMBaseModem CBM isn't as complicated as SMS, and the CBM class itself doesn't need to be overridden by QMI/MBIM/etc. Now that the log parent and connection binding no longer require MMBaseModem we can flatten the CBM object creation and remove usage of MMBaseModem. Signed-off-by: Dan Williams --- src/mm-base-cbm.c | 33 +++----------------------------- src/mm-base-cbm.h | 7 ++----- src/mm-broadband-modem-qmi.c | 38 +++++++++++++------------------------ src/mm-broadband-modem.c | 30 ++++++++++++----------------- src/mm-cbm-list.c | 6 ++++-- src/mm-cbm-list.h | 1 + src/mm-iface-modem-cell-broadcast.c | 24 +++++++---------------- src/mm-iface-modem-cell-broadcast.h | 10 +++------- 8 files changed, 45 insertions(+), 104 deletions(-) diff --git a/src/mm-base-cbm.c b/src/mm-base-cbm.c index af02120e..59b9e49a 100644 --- a/src/mm-base-cbm.c +++ b/src/mm-base-cbm.c @@ -25,12 +25,7 @@ #include #include "mm-base-cbm.h" -#include "mm-broadband-modem.h" -#include "mm-iface-modem.h" -#include "mm-iface-modem-cell-broadcast.h" #include "mm-cbm-part.h" -#include "mm-base-modem-at.h" -#include "mm-base-modem.h" #include "mm-log-object.h" #include "mm-modem-helpers.h" #include "mm-error-helpers.h" @@ -48,7 +43,6 @@ enum { PROP_PATH, PROP_CONNECTION, PROP_BIND_TO, - PROP_MODEM, PROP_MAX_PARTS, PROP_SERIAL, PROP_LAST @@ -64,8 +58,6 @@ struct _MMBaseCbmPrivate { /* The object this CBM is bound to */ GObject *bind_to; - /* The modem which owns this CBM */ - MMBaseModem *modem; /* The path where the CBM object is exported */ gchar *path; @@ -330,17 +322,15 @@ mm_base_cbm_take_part (MMBaseCbm *self, } MMBaseCbm * -mm_base_cbm_new (MMBaseModem *modem, - GObject *bind_to) +mm_base_cbm_new (GObject *bind_to) { return MM_BASE_CBM (g_object_new (MM_TYPE_BASE_CBM, - MM_BASE_CBM_MODEM, modem, MM_BIND_TO, bind_to, NULL)); } MMBaseCbm * -mm_base_cbm_new_with_part (MMBaseModem *modem, +mm_base_cbm_new_with_part (GObject *bind_to, MMCbmState state, guint max_parts, MMCbmPart *first_part, @@ -348,13 +338,11 @@ mm_base_cbm_new_with_part (MMBaseModem *modem, { MMBaseCbm *self; - g_assert (MM_IS_IFACE_MODEM_CELL_BROADCAST (modem)); - if (state == MM_CBM_STATE_RECEIVED) state = MM_CBM_STATE_RECEIVING; /* Create a CBM object as defined by the interface */ - self = mm_iface_modem_cell_broadcast_create_cbm (MM_IFACE_MODEM_CELL_BROADCAST (modem)); + self = mm_base_cbm_new (bind_to); g_object_set (self, MM_BASE_CBM_MAX_PARTS, max_parts, "state", state, @@ -419,10 +407,6 @@ set_property (GObject *object, self->priv->bind_to = g_value_dup_object (value); mm_bind_to (MM_BIND (self), MM_BASE_CBM_CONNECTION, self->priv->bind_to); break; - case PROP_MODEM: - g_clear_object (&self->priv->modem); - self->priv->modem = g_value_dup_object (value); - break; case PROP_MAX_PARTS: self->priv->max_parts = g_value_get_uint (value); break; @@ -453,9 +437,6 @@ get_property (GObject *object, case PROP_BIND_TO: g_value_set_object (value, self->priv->bind_to); break; - case PROP_MODEM: - g_value_set_object (value, self->priv->modem); - break; case PROP_MAX_PARTS: g_value_set_uint (value, self->priv->max_parts); break; @@ -504,7 +485,6 @@ dispose (GObject *object) g_clear_object (&self->priv->connection); } - g_clear_object (&self->priv->modem); g_clear_object (&self->priv->bind_to); G_OBJECT_CLASS (mm_base_cbm_parent_class)->dispose (object); @@ -550,13 +530,6 @@ mm_base_cbm_class_init (MMBaseCbmClass *klass) g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); - properties[PROP_MODEM] = - g_param_spec_object (MM_BASE_CBM_MODEM, - "Modem", - "The Modem which owns this CBM", - MM_TYPE_BASE_MODEM, - G_PARAM_READWRITE); - properties[PROP_MAX_PARTS] = g_param_spec_uint (MM_BASE_CBM_MAX_PARTS, "Max parts", diff --git a/src/mm-base-cbm.h b/src/mm-base-cbm.h index 08dcd3ae..8a4b2e73 100644 --- a/src/mm-base-cbm.h +++ b/src/mm-base-cbm.h @@ -23,7 +23,6 @@ #include #include "mm-cbm-part.h" -#include "mm-base-modem.h" /*****************************************************************************/ @@ -40,7 +39,6 @@ typedef struct _MMBaseCbmPrivate MMBaseCbmPrivate; #define MM_BASE_CBM_PATH "cbm-path" #define MM_BASE_CBM_CONNECTION "cbm-connection" -#define MM_BASE_CBM_MODEM "cbm-modem" #define MM_BASE_CBM_MAX_PARTS "cbm-max-parts" #define MM_BASE_CBM_SERIAL "cbm-serial" @@ -56,12 +54,11 @@ struct _MMBaseCbmClass { GType mm_base_cbm_get_type (void); G_DEFINE_AUTOPTR_CLEANUP_FUNC (MMBaseCbm, g_object_unref) -MMBaseCbm *mm_base_cbm_new (MMBaseModem *modem, - GObject *bind_to); +MMBaseCbm *mm_base_cbm_new (GObject *bind_to); gboolean mm_base_cbm_take_part (MMBaseCbm *self, MMCbmPart *part, GError **error); -MMBaseCbm *mm_base_cbm_new_with_part (MMBaseModem *modem, +MMBaseCbm *mm_base_cbm_new_with_part (GObject *bind_to, MMCbmState state, guint max_parts, MMCbmPart *first_part, diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index bd79ceca..a2609277 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -10959,7 +10959,7 @@ add_new_read_cbm_part (MMIfaceModemCellBroadcast *self, GArray *data) { MMCbmPart *part = NULL; - GError *error = NULL; + g_autoptr(GError) error = NULL; switch (format) { /* Cell Broadcasts need to be broadcast messages */ @@ -10968,6 +10968,10 @@ add_new_read_cbm_part (MMIfaceModemCellBroadcast *self, data->len, self, &error); + if (error) { + /* Don't treat the error as critical */ + mm_obj_dbg (self, "error parsing PDU: %s", error->message); + } break; case QMI_WMS_MESSAGE_FORMAT_MWI: case QMI_WMS_MESSAGE_FORMAT_GSM_WCDMA_POINT_TO_POINT: @@ -10979,13 +10983,14 @@ add_new_read_cbm_part (MMIfaceModemCellBroadcast *self, if (part) { mm_obj_dbg (self, "correctly parsed PDU"); - mm_iface_modem_cell_broadcast_take_part (self, - part, - mm_cbm_state_from_qmi_message_tag (tag)); - } else if (error) { - /* Don't treat the error as critical */ - mm_obj_dbg (self, "error parsing PDU: %s", error->message); - g_error_free (error); + if (!mm_iface_modem_cell_broadcast_take_part (self, + G_OBJECT (self), + part, + mm_cbm_state_from_qmi_message_tag (tag), + &error)) { + /* Don't treat the error as critical */ + mm_obj_dbg (self, "error adding CBM: %s", error->message); + } } } @@ -11537,22 +11542,6 @@ cell_broadcast_set_channels (MMIfaceModemCellBroadcast *_self, g_task_new (self, NULL, callback, user_data)); } -/*****************************************************************************/ -/* Create CBM (CellBroadcast interface) */ - -static MMBaseCbm * -cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *_self) -{ - MMBroadbandModemQmi *self = MM_BROADBAND_MODEM_QMI (_self); - - /* Handle AT URC only fallback */ - if (self->priv->cell_broadcast_fallback_at_only) { - return iface_modem_cell_broadcast_parent->create_cbm (_self); - } - - return mm_base_cbm_new (MM_BASE_MODEM (self), G_OBJECT (self)); -} - /*****************************************************************************/ /* Check support (Voice interface) */ @@ -15316,7 +15305,6 @@ iface_modem_cell_broadcast_init (MMIfaceModemCellBroadcastInterface *iface) iface->cleanup_unsolicited_events_finish = cell_broadcast_cleanup_unsolicited_events_finish; iface->set_channels = cell_broadcast_set_channels; iface->set_channels_finish = cell_broadcast_set_channels_finish; - iface->create_cbm = cell_broadcast_create_cbm; } static void diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 2ccde45e..16d579c7 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -10606,7 +10606,7 @@ cbc_cbm_received (MMPortSerialAt *port, GMatchInfo *info, MMBroadbandModem *self) { - GError *error = NULL; + g_autoptr(GError) error = NULL; MMCbmPart *part; guint length; gchar *pdu; @@ -10621,15 +10621,19 @@ cbc_cbm_received (MMPortSerialAt *port, return; part = mm_cbm_part_new_from_pdu (pdu, self, &error); - if (part) { - mm_obj_dbg (self, "correctly parsed PDU"); - mm_iface_modem_cell_broadcast_take_part (MM_IFACE_MODEM_CELL_BROADCAST (self), - part, - MM_CBM_STATE_RECEIVED); - } else { + if (!part) { /* Don't treat the error as critical */ mm_obj_dbg (self, "error parsing PDU: %s", error->message); - g_error_free (error); + } else { + mm_obj_dbg (self, "correctly parsed PDU"); + if (!mm_iface_modem_cell_broadcast_take_part (MM_IFACE_MODEM_CELL_BROADCAST (self), + G_OBJECT (self), + part, + MM_CBM_STATE_RECEIVED, + &error)) { + /* Don't treat the error as critical */ + mm_obj_dbg (self, "error adding CBM: %s", error->message); + } } } @@ -10686,15 +10690,6 @@ modem_cell_broadcast_cleanup_unsolicited_events (MMIfaceModemCellBroadcast *self set_cell_broadcast_unsolicited_events_handlers (self, FALSE, callback, user_data); } -/*****************************************************************************/ -/* Create CBM (CellBroadcast interface) */ - -static MMBaseCbm * -modem_cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *self) -{ - return mm_base_cbm_new (MM_BASE_MODEM (self), G_OBJECT (self)); -} - /***********************************************************************************/ /* Get channels (CellBroadcast interface) */ @@ -14507,7 +14502,6 @@ iface_modem_cell_broadcast_init (MMIfaceModemCellBroadcastInterface *iface) iface->cleanup_unsolicited_events_finish = modem_cell_broadcast_setup_cleanup_unsolicited_events_finish; iface->set_channels = modem_cell_broadcast_set_channels; iface->set_channels_finish = modem_cell_broadcast_set_channels_finish; - iface->create_cbm = modem_cell_broadcast_create_cbm; } static void diff --git a/src/mm-cbm-list.c b/src/mm-cbm-list.c index 02d91bdc..571c6c74 100644 --- a/src/mm-cbm-list.c +++ b/src/mm-cbm-list.c @@ -179,6 +179,7 @@ cmp_cbm_by_serial_and_id (MMBaseCbm *cbm, static gboolean take_part (MMCbmList *self, + GObject *bind_to, MMCbmPart *part, MMCbmState state, GError **error) @@ -202,7 +203,7 @@ take_part (MMCbmList *self, } /* Create new cbm */ - cbm = mm_base_cbm_new_with_part (self->priv->modem, + cbm = mm_base_cbm_new_with_part (bind_to, state, mm_cbm_part_get_num_parts (part), part, @@ -256,6 +257,7 @@ mm_cbm_list_has_part (MMCbmList *self, gboolean mm_cbm_list_take_part (MMCbmList *self, + GObject *bind_to, MMCbmPart *part, MMCbmState state, GError **error) @@ -275,7 +277,7 @@ mm_cbm_list_take_part (MMCbmList *self, return FALSE; } - return take_part (self, part, state, error); + return take_part (self, bind_to, part, state, error); } /*****************************************************************************/ diff --git a/src/mm-cbm-list.h b/src/mm-cbm-list.h index 2c493659..479c3630 100644 --- a/src/mm-cbm-list.h +++ b/src/mm-cbm-list.h @@ -69,6 +69,7 @@ gboolean mm_cbm_list_has_part (MMCbmList *self, guint8 part_num); gboolean mm_cbm_list_take_part (MMCbmList *self, + GObject *bind_to, MMCbmPart *part, MMCbmState state, GError **error); diff --git a/src/mm-iface-modem-cell-broadcast.c b/src/mm-iface-modem-cell-broadcast.c index d6fdbdfe..32a77535 100644 --- a/src/mm-iface-modem-cell-broadcast.c +++ b/src/mm-iface-modem-cell-broadcast.c @@ -275,16 +275,6 @@ handle_list (MmGdbusModemCellBroadcast *skeleton, /*****************************************************************************/ -MMBaseCbm * -mm_iface_modem_cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *self) -{ - g_assert (MM_IFACE_MODEM_CELL_BROADCAST_GET_IFACE (self)->create_cbm != NULL); - - return MM_IFACE_MODEM_CELL_BROADCAST_GET_IFACE (self)->create_cbm (self); -} - -/*****************************************************************************/ - typedef struct _InitializationContext InitializationContext; static void interface_initialization_step (GTask *task); @@ -742,22 +732,22 @@ mm_iface_modem_cell_broadcast_enable (MMIfaceModemCellBroadcast *self, /*****************************************************************************/ gboolean -mm_iface_modem_cell_broadcast_take_part (MMIfaceModemCellBroadcast *self, - MMCbmPart *cbm_part, - MMCbmState state) +mm_iface_modem_cell_broadcast_take_part (MMIfaceModemCellBroadcast *self, + GObject *bind_to, + MMCbmPart *cbm_part, + MMCbmState state, + GError **error) { g_autoptr(MMCbmList) list = NULL; - g_autoptr(GError) error = NULL; gboolean added = FALSE; g_object_get (self, MM_IFACE_MODEM_CELL_BROADCAST_CBM_LIST, &list, NULL); - if (list) { - added = mm_cbm_list_take_part (list, cbm_part, state, &error); + added = mm_cbm_list_take_part (list, bind_to, cbm_part, state, error); if (!added) - mm_obj_dbg (self, "Can't take part in CBM list: %s", error->message); + g_prefix_error (error, "couldn't take part in CBM list: "); } /* If part wasn't taken, we need to free the part ourselves */ diff --git a/src/mm-iface-modem-cell-broadcast.h b/src/mm-iface-modem-cell-broadcast.h index 32170b7b..c8bfc5b6 100644 --- a/src/mm-iface-modem-cell-broadcast.h +++ b/src/mm-iface-modem-cell-broadcast.h @@ -83,9 +83,6 @@ struct _MMIfaceModemCellBroadcastInterface { GAsyncReadyCallback callback, gpointer user_data); - /* Create Cbm objects */ - MMBaseCbm * (* create_cbm) (MMIfaceModemCellBroadcast *self); - /* Set channel list */ void (* set_channels) (MMIfaceModemCellBroadcast *self, GArray *channels, @@ -129,10 +126,9 @@ void mm_iface_modem_cell_broadcast_bind_simple_status (MMIfaceModemCellBroadcast /* Report new CBM part */ gboolean mm_iface_modem_cell_broadcast_take_part (MMIfaceModemCellBroadcast *self, + GObject *bind_to, MMCbmPart *cbm_part, - MMCbmState state); - -/* CBM creation */ -MMBaseCbm *mm_iface_modem_cell_broadcast_create_cbm (MMIfaceModemCellBroadcast *self); + MMCbmState state, + GError **error); #endif /* MM_IFACE_MODEM_CELLBROADCAST_H */ -- cgit v1.2.3-70-g09d2