diff options
74 files changed, 1293 insertions, 767 deletions
diff --git a/src/meson.build b/src/meson.build index f2a53625..c3242953 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', ) @@ -265,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', @@ -292,6 +326,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 +343,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 5b4b13f3..2455da30 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 <polkit/polkit.h> @@ -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; @@ -218,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..7dadfff0 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -41,6 +41,8 @@ #include "mm-error-helpers.h" #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 @@ -54,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, @@ -70,6 +74,7 @@ enum { PROP_0, PROP_PATH, PROP_CONNECTION, + PROP_BIND_TO, PROP_MODEM, PROP_STATUS, PROP_CONFIG, @@ -83,6 +88,13 @@ struct _MMBaseBearerPrivate { GDBusConnection *connection; guint dbus_id; + /* The authorization provider */ + 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 */ @@ -1118,7 +1130,6 @@ mm_base_bearer_connect (MMBaseBearer *self, typedef struct { MMBaseBearer *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleConnectContext; @@ -1126,7 +1137,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 +1157,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 +1184,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 +1315,6 @@ mm_base_bearer_disconnect (MMBaseBearer *self, typedef struct { MMBaseBearer *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleDisconnectContext; @@ -1315,7 +1322,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 +1342,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 +1369,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; } @@ -1747,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. */ @@ -1807,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; @@ -1835,6 +1840,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; @@ -1885,7 +1894,10 @@ 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); G_OBJECT_CLASS (mm_base_bearer_parent_class)->dispose (object); } @@ -1897,6 +1909,11 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +bind_iface_init (MMBindInterface *iface) +{ +} + +static void mm_base_bearer_class_init (MMBaseBearerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -1927,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 ab77a564..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, @@ -59,6 +63,13 @@ struct _MMBaseCallPrivate { GDBusConnection *connection; guint dbus_id; + /* The authorization provider */ + 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 */ @@ -139,7 +150,6 @@ mm_base_call_change_audio_settings (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleStartContext; @@ -147,7 +157,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 +212,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 +239,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 +277,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 +292,6 @@ handle_start (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleAcceptContext; @@ -293,7 +299,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 +329,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 +377,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 +392,6 @@ handle_accept (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; gchar *number; } HandleDeflectContext; @@ -399,7 +401,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 +426,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 +476,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 +491,6 @@ handle_deflect (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleJoinMultipartyContext; @@ -500,7 +498,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 +517,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 +534,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 +549,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 +564,6 @@ handle_join_multiparty (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleLeaveMultipartyContext; @@ -577,7 +571,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 +591,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 +608,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 +623,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 +638,6 @@ handle_leave_multiparty (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleHangupContext; @@ -655,7 +645,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 +670,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 +717,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 +732,6 @@ handle_hangup (MMBaseCall *self, typedef struct { MMBaseCall *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; gchar *dtmf; } HandleSendDtmfContext; @@ -754,7 +740,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 +762,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 +810,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; } @@ -1329,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, @@ -1337,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, @@ -1376,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); @@ -1419,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; @@ -1447,6 +1430,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 +1467,9 @@ 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); G_OBJECT_CLASS (mm_base_call_parent_class)->dispose (object); } @@ -1491,6 +1481,11 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +bind_iface_init (MMBindInterface *iface) +{ +} + +static void mm_base_call_class_init (MMBaseCallClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -1530,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..59b9e49a 100644 --- a/src/mm-base-cbm.c +++ b/src/mm-base-cbm.c @@ -25,26 +25,24 @@ #include <libmm-glib.h> #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" +#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_MODEM, + PROP_BIND_TO, PROP_MAX_PARTS, PROP_SERIAL, PROP_LAST @@ -57,8 +55,9 @@ struct _MMBaseCbmPrivate { GDBusConnection *connection; guint dbus_id; - /* The modem which owns this CBM */ - MMBaseModem *modem; + /* The object this CBM is bound to */ + GObject *bind_to; + /* The path where the CBM object is exported */ gchar *path; @@ -323,15 +322,15 @@ mm_base_cbm_take_part (MMBaseCbm *self, } MMBaseCbm * -mm_base_cbm_new (MMBaseModem *modem) +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, @@ -339,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, @@ -405,18 +402,10 @@ set_property (GObject *object, else if (self->priv->path) cbm_dbus_export (self); 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); - } + 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_MAX_PARTS: self->priv->max_parts = g_value_get_uint (value); @@ -445,8 +434,8 @@ get_property (GObject *object, case PROP_CONNECTION: g_value_set_object (value, self->priv->connection); break; - case PROP_MODEM: - g_value_set_object (value, self->priv->modem); + case PROP_BIND_TO: + g_value_set_object (value, self->priv->bind_to); break; case PROP_MAX_PARTS: g_value_set_uint (value, self->priv->max_parts); @@ -496,7 +485,7 @@ 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); } @@ -508,6 +497,11 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +bind_iface_init (MMBindInterface *iface) +{ +} + +static void mm_base_cbm_class_init (MMBaseCbmClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -534,12 +528,7 @@ mm_base_cbm_class_init (MMBaseCbmClass *klass) NULL, G_PARAM_READWRITE); - 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); + g_object_class_override_property (object_class, PROP_BIND_TO, MM_BIND_TO); properties[PROP_MAX_PARTS] = g_param_spec_uint (MM_BASE_CBM_MAX_PARTS, diff --git a/src/mm-base-cbm.h b/src/mm-base-cbm.h index 538cd9d1..8a4b2e73 100644 --- a/src/mm-base-cbm.h +++ b/src/mm-base-cbm.h @@ -23,7 +23,6 @@ #include <libmm-glib.h> #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,11 +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); +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-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 7e142327..eb7c04ca 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -39,11 +39,16 @@ #include "mm-daemon-enums-types.h" #include "mm-serial-parsers.h" #include "mm-modem-helpers.h" +#include "mm-bind.h" static void log_object_iface_init (MMLogObjectInterface *iface); +static void auth_iface_init (MMIfaceAuthInterface *iface); +static void op_lock_iface_init (MMIfaceOpLockInterface *iface); G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MMBaseModem, mm_base_modem, MM_GDBUS_TYPE_OBJECT_SKELETON, - G_IMPLEMENT_INTERFACE (MM_TYPE_LOG_OBJECT, log_object_iface_init)) + G_IMPLEMENT_INTERFACE (MM_TYPE_LOG_OBJECT, log_object_iface_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_AUTH, auth_iface_init) + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_OP_LOCK, op_lock_iface_init)) /* If we get 10 consecutive timeouts in a serial port, we consider the modem * invalid and we request re-probing. */ @@ -150,6 +155,16 @@ struct _MMBaseModemPrivate { gboolean scheduled_operations_forbidden_forever; }; +static void mm_base_modem_operation_lock (MMBaseModem *self, + MMOperationPriority priority, + const gchar *description, + GAsyncReadyCallback callback, + gpointer user_data); +static gssize mm_base_modem_operation_lock_finish (MMBaseModem *self, + GAsyncResult *res, + GError **error); + + guint mm_base_modem_get_dbus_id (MMBaseModem *self) { @@ -774,7 +789,7 @@ state_operation_ready (MMBaseModem *self, ctx = g_task_get_task_data (task); if (ctx->operation_id >= 0) { - mm_base_modem_operation_unlock (self, ctx->operation_id); + mm_iface_op_lock_unlock (MM_IFACE_OP_LOCK (self), ctx->operation_id); ctx->operation_id = (gssize) -1; } @@ -821,12 +836,12 @@ lock_before_state_operation_ready (MMBaseModem *self, } static void -state_operation (MMBaseModem *self, - StateOperationType operation_type, - MMBaseModemOperationLock operation_lock, - MMBaseModemOperationPriority operation_priority, - GAsyncReadyCallback callback, - gpointer user_data) +state_operation (MMBaseModem *self, + StateOperationType operation_type, + MMOperationLock operation_lock, + MMOperationPriority operation_priority, + GAsyncReadyCallback callback, + gpointer user_data) { GTask *task; StateOperationContext *ctx; @@ -878,12 +893,12 @@ state_operation (MMBaseModem *self, } g_assert (ctx->operation && ctx->operation_finish); - if (operation_lock == MM_BASE_MODEM_OPERATION_LOCK_ALREADY_ACQUIRED) { + if (operation_lock == MM_OPERATION_LOCK_ALREADY_ACQUIRED) { state_operation_run (task); return; } - g_assert (operation_lock == MM_BASE_MODEM_OPERATION_LOCK_REQUIRED); + g_assert (operation_lock == MM_OPERATION_LOCK_REQUIRED); mm_base_modem_operation_lock (self, operation_priority, operation_description, @@ -905,14 +920,14 @@ mm_base_modem_sync_finish (MMBaseModem *self, void mm_base_modem_sync (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data) + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data) { state_operation (self, STATE_OPERATION_TYPE_SYNC, operation_lock, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, + MM_OPERATION_PRIORITY_DEFAULT, callback, user_data); } @@ -930,11 +945,11 @@ mm_base_modem_disable_finish (MMBaseModem *self, } void -mm_base_modem_disable (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - MMBaseModemOperationPriority operation_priority, - GAsyncReadyCallback callback, - gpointer user_data) +mm_base_modem_disable (MMBaseModem *self, + MMOperationLock operation_lock, + MMOperationPriority operation_priority, + GAsyncReadyCallback callback, + gpointer user_data) { state_operation (self, STATE_OPERATION_TYPE_DISABLE, @@ -955,15 +970,15 @@ mm_base_modem_enable_finish (MMBaseModem *self, } void -mm_base_modem_enable (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data) +mm_base_modem_enable (MMBaseModem *self, + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data) { state_operation (self, STATE_OPERATION_TYPE_ENABLE, operation_lock, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, + MM_OPERATION_PRIORITY_DEFAULT, callback, user_data); } @@ -979,15 +994,15 @@ mm_base_modem_initialize_finish (MMBaseModem *self, } void -mm_base_modem_initialize (MMBaseModem *self, - MMBaseModemOperationLock operation_lock, - GAsyncReadyCallback callback, - gpointer user_data) +mm_base_modem_initialize (MMBaseModem *self, + MMOperationLock operation_lock, + GAsyncReadyCallback callback, + gpointer user_data) { state_operation (self, STATE_OPERATION_TYPE_INITIALIZE, operation_lock, - MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT, + MM_OPERATION_PRIORITY_DEFAULT, callback, user_data); } @@ -1775,8 +1790,8 @@ mm_base_modem_organize_ports (MMBaseModem *self, /*****************************************************************************/ /* Authorization */ -gboolean -mm_base_modem_authorize_finish (MMBaseModem *self, +static gboolean +mm_base_modem_authorize_finish (MMIfaceAuth *auth, GAsyncResult *res, GError **error) { @@ -1798,24 +1813,18 @@ authorize_ready (MMAuthProvider *authp, g_object_unref (task); } -void -mm_base_modem_authorize (MMBaseModem *self, +static void +mm_base_modem_authorize (MMIfaceAuth *auth, GDBusMethodInvocation *invocation, const gchar *authorization, GAsyncReadyCallback callback, gpointer user_data) { - GTask *task; + MMBaseModem *self = MM_BASE_MODEM (auth); + GTask *task; task = g_task_new (self, self->priv->authp_cancellable, callback, user_data); - /* When running in the session bus for tests, default to always allow */ - if (mm_context_get_test_session ()) { - g_task_return_boolean (task, TRUE); - g_object_unref (task); - return; - } - mm_auth_provider_authorize (self->priv->authp, invocation, authorization, @@ -1828,10 +1837,10 @@ mm_base_modem_authorize (MMBaseModem *self, /* Exclusive operation */ typedef struct { - gssize id; - MMBaseModemOperationPriority priority; - gchar *description; - GTask *wait_task; + gssize id; + MMOperationPriority priority; + gchar *description; + GTask *wait_task; } OperationInfo; static void @@ -1844,7 +1853,7 @@ operation_info_free (OperationInfo *info) /* Exclusive operation lock */ -gssize +static gssize mm_base_modem_operation_lock_finish (MMBaseModem *self, GAsyncResult *res, GError **error) @@ -1869,7 +1878,7 @@ base_modem_operation_run (MMBaseModem *self) /* Run the operation in head of the list */ mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: lock acquired", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); task = g_steal_pointer (&info->wait_task); g_task_return_int (task, info->id); @@ -1912,7 +1921,7 @@ abort_pending_operations (MMBaseModem *self) g_assert (info->wait_task); mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: aborted early", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); task = g_steal_pointer (&info->wait_task); @@ -1925,12 +1934,12 @@ abort_pending_operations (MMBaseModem *self) self->priv->scheduled_operations = head; } -void -mm_base_modem_operation_lock (MMBaseModem *self, - MMBaseModemOperationPriority priority, - const gchar *description, - GAsyncReadyCallback callback, - gpointer user_data) +static void +mm_base_modem_operation_lock (MMBaseModem *self, + MMOperationPriority priority, + const gchar *description, + GAsyncReadyCallback callback, + gpointer user_data) { GTask *task; OperationInfo *info; @@ -1957,19 +1966,19 @@ mm_base_modem_operation_lock (MMBaseModem *self, } else operation_id++; - if (info->priority == MM_BASE_MODEM_OPERATION_PRIORITY_OVERRIDE) { + if (info->priority == MM_OPERATION_PRIORITY_OVERRIDE) { mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: override requested - no new operations will be allowed", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); g_assert (!self->priv->scheduled_operations_forbidden_forever); self->priv->scheduled_operations_forbidden_forever = TRUE; abort_pending_operations (self); self->priv->scheduled_operations = g_list_append (self->priv->scheduled_operations, info); - } else if (info->priority == MM_BASE_MODEM_OPERATION_PRIORITY_DEFAULT) { + } else if (info->priority == MM_OPERATION_PRIORITY_DEFAULT) { mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: scheduled", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); self->priv->scheduled_operations = g_list_append (self->priv->scheduled_operations, info); } else @@ -1980,10 +1989,11 @@ mm_base_modem_operation_lock (MMBaseModem *self, /* Exclusive operation unlock */ -void -mm_base_modem_operation_unlock (MMBaseModem *self, - gssize operation_id) +static void +mm_base_modem_operation_unlock (MMIfaceOpLock *_self, + gssize operation_id) { + MMBaseModem *self = MM_BASE_MODEM (_self); OperationInfo *info; g_assert (self->priv->scheduled_operations); @@ -1994,7 +2004,7 @@ mm_base_modem_operation_unlock (MMBaseModem *self, mm_obj_dbg (self, "[operation %" G_GSSIZE_FORMAT "] %s - %s: lock released", info->id, - mm_base_modem_operation_priority_get_string (info->priority), + mm_operation_priority_get_string (info->priority), info->description); /* Remove head list item and free its contents */ @@ -2009,9 +2019,9 @@ mm_base_modem_operation_unlock (MMBaseModem *self, /*****************************************************************************/ typedef struct { - GDBusMethodInvocation *invocation; - MMBaseModemOperationPriority operation_priority; - gchar *operation_description; + GDBusMethodInvocation *invocation; + MMOperationPriority operation_priority; + gchar *operation_description; } AuthorizeAndOperationLockContext; static void @@ -2022,8 +2032,8 @@ authorize_and_operation_lock_context_free (AuthorizeAndOperationLockContext *ctx g_slice_free (AuthorizeAndOperationLockContext, ctx); } -gssize -mm_base_modem_authorize_and_operation_lock_finish (MMBaseModem *self, +static gssize +mm_base_modem_authorize_and_operation_lock_finish (MMIfaceOpLock *self, GAsyncResult *res, GError **error) { @@ -2047,35 +2057,35 @@ lock_after_authorize_ready (MMBaseModem *self, } static void -authorize_before_lock_ready (MMBaseModem *self, +authorize_before_lock_ready (MMIfaceAuth *auth, GAsyncResult *res, GTask *task) { GError *error = NULL; AuthorizeAndOperationLockContext *ctx; - if (!mm_base_modem_authorize_finish (self, res, &error)) { + if (!mm_iface_auth_authorize_finish (auth, res, &error)) { g_task_return_error (task, error); g_object_unref (task); return; } ctx = g_task_get_task_data (task); - mm_base_modem_operation_lock (self, + mm_base_modem_operation_lock (MM_BASE_MODEM (auth), ctx->operation_priority, ctx->operation_description, (GAsyncReadyCallback) lock_after_authorize_ready, task); } -void -mm_base_modem_authorize_and_operation_lock (MMBaseModem *self, - GDBusMethodInvocation *invocation, - const gchar *authorization, - MMBaseModemOperationPriority operation_priority, - const gchar *operation_description, - GAsyncReadyCallback callback, - gpointer user_data) +static void +mm_base_modem_authorize_and_operation_lock (MMIfaceOpLock *self, + GDBusMethodInvocation *invocation, + const gchar *authorization, + MMOperationPriority operation_priority, + const gchar *operation_description, + GAsyncReadyCallback callback, + gpointer user_data) { GTask *task; AuthorizeAndOperationLockContext *ctx; @@ -2088,7 +2098,7 @@ mm_base_modem_authorize_and_operation_lock (MMBaseModem *self, ctx->operation_description = g_strdup (operation_description); g_task_set_task_data (task, ctx, (GDestroyNotify)authorize_and_operation_lock_context_free); - mm_base_modem_authorize (self, + mm_iface_auth_authorize (MM_IFACE_AUTH (self), invocation, authorization, (GAsyncReadyCallback)authorize_before_lock_ready, @@ -2631,6 +2641,21 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +auth_iface_init (MMIfaceAuthInterface *iface) +{ + iface->authorize = mm_base_modem_authorize; + iface->authorize_finish = mm_base_modem_authorize_finish; +} + +static void +op_lock_iface_init (MMIfaceOpLockInterface *iface) +{ + iface->authorize_and_lock = mm_base_modem_authorize_and_operation_lock; + iface->authorize_and_lock_finish = mm_base_modem_authorize_and_operation_lock_finish; + iface->unlock = mm_base_modem_operation_unlock; +} + +static void mm_base_modem_class_init (MMBaseModemClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -2728,7 +2753,7 @@ mm_base_modem_class_init (MMBaseModemClass *klass) g_object_class_install_property (object_class, PROP_SUBSYSTEM_DEVICE_ID, properties[PROP_SUBSYSTEM_DEVICE_ID]); properties[PROP_CONNECTION] = - g_param_spec_object (MM_BASE_MODEM_CONNECTION, + g_param_spec_object (MM_BINDABLE_CONNECTION, "Connection", "GDBus connection to the system bus.", G_TYPE_DBUS_CONNECTION, diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h index 0bcd974a..1f35b913 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" @@ -56,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" @@ -220,94 +220,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..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 @@ -63,6 +67,13 @@ struct _MMBaseSimPrivate { GDBusConnection *connection; guint dbus_id; + /* The authorization provider */ + 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 */ @@ -238,13 +249,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 +307,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 +433,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 +490,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 +857,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 +902,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 +962,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 +1010,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 +1519,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 +1573,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; } @@ -2286,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, @@ -2299,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, @@ -2888,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) @@ -2898,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); } @@ -2963,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); @@ -3000,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; @@ -3047,6 +3066,9 @@ 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); G_OBJECT_CLASS (mm_base_sim_parent_class)->dispose (object); } @@ -3065,6 +3087,11 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +bind_iface_init (MMBindInterface *iface) +{ +} + +static void mm_base_sim_class_init (MMBaseSimClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -3128,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 202b178f..0e7c7527 100644 --- a/src/mm-base-sms.c +++ b/src/mm-base-sms.c @@ -36,16 +36,21 @@ #include "mm-log-object.h" #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, @@ -60,6 +65,13 @@ struct _MMBaseSmsPrivate { GDBusConnection *connection; guint dbus_id; + /* The authorization provider */ + 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 */ @@ -324,7 +336,6 @@ generate_submit_pdus (MMBaseSms *self, typedef struct { MMBaseSms *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; MMSmsStorage storage; } HandleStoreContext; @@ -333,7 +344,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 +416,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 +452,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 +495,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 +505,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 +519,6 @@ handle_store (MMBaseSms *self, typedef struct { MMBaseSms *self; - MMBaseModem *modem; GDBusMethodInvocation *invocation; } HandleSendContext; @@ -519,7 +526,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 +592,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 +656,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; } @@ -1801,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)); } @@ -1998,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); @@ -2041,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; @@ -2071,6 +2075,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 +2105,9 @@ 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); G_OBJECT_CLASS (mm_base_sms_parent_class)->dispose (object); } @@ -2108,6 +2119,11 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +bind_iface_init (MMBindInterface *iface) +{ +} + +static void mm_base_sms_class_init (MMBaseSmsClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -2143,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 <dan@ioncontrol.co> + */ + +#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 <dan@ioncontrol.co> + */ + +#ifndef MM_CHILD_H +#define MM_CHILD_H + +#include <glib.h> +#include <glib-object.h> + +/* 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..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); + } } } @@ -11538,22 +11543,6 @@ cell_broadcast_set_channels (MMIfaceModemCellBroadcast *_self, } /*****************************************************************************/ -/* 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)); -} - -/*****************************************************************************/ /* Check support (Voice interface) */ static gboolean @@ -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 6eb04fe2..16d579c7 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. @@ -10602,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; @@ -10617,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); + } } } @@ -10682,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)); -} - /***********************************************************************************/ /* Get channels (CellBroadcast interface) */ @@ -14503,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-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..571c6c74 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 */ @@ -173,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) @@ -196,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, @@ -250,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) @@ -269,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); } /*****************************************************************************/ @@ -283,11 +291,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 +309,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 +333,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 +360,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; @@ -361,6 +374,11 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +bind_iface_init (MMBindInterface *iface) +{ +} + +static void mm_cbm_list_class_init (MMCbmListClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -381,6 +399,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..479c3630 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); @@ -68,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-device.c b/src/mm-device.c index 96b7d874..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, @@ -436,7 +437,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 +869,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..32a77535 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, @@ -272,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); @@ -637,7 +630,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); @@ -739,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 */ 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..581843c5 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, @@ -1005,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-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 <dan@ioncontrol.co> + */ + +#include <ModemManager.h> +#define _LIBMM_INSIDE_MM +#include <libmm-glib.h> + +#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 <dan@ioncontrol.co> + */ + +#ifndef MM_IFACE_OP_LOCK_H +#define MM_IFACE_OP_LOCK_H + +#include <glib-object.h> +#include <gio/gio.h> + +#define _LIBMM_INSIDE_MM +#include <libmm-glib.h> + +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 */ 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; @@ -474,6 +486,11 @@ log_object_iface_init (MMLogObjectInterface *iface) } static void +bind_iface_init (MMBindInterface *iface) +{ +} + +static void mm_sms_list_class_init (MMSmsListClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (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 <libmm-glib.h> #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 <libmm-glib.h> +#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 <libmm-glib.h> #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 <libmm-glib.h> #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 <libmm-glib.h> #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 <libmm-glib.h> #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 <libmm-glib.h> #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); } |