aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Williams <dan@ioncontrol.co>2025-05-08 20:10:48 -0500
committerDan Williams <dan@ioncontrol.co>2025-05-08 20:10:48 -0500
commitefcc960b130356e6b05d05a915ff0f9646b00d5f (patch)
treecf209fc07098e68c65dca219fee38a826dbcbf1a /src
parent02942a04f95f64cda36360c72961fe0e20459ad4 (diff)
parent1fa21fcc48b271a8dc2191104e35bf4e95fa2331 (diff)
Merge request !1344 from 'cbm-remove-modem'
Begin removing usage of MMBaseModem from leaf classes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/merge_requests/1344
Diffstat (limited to 'src')
-rw-r--r--src/meson.build38
-rw-r--r--src/mm-auth-provider.c45
-rw-r--r--src/mm-auth-provider.h35
-rw-r--r--src/mm-base-bearer.c83
-rw-r--r--src/mm-base-call.c187
-rw-r--r--src/mm-base-call.h1
-rw-r--r--src/mm-base-cbm.c61
-rw-r--r--src/mm-base-cbm.h6
-rw-r--r--src/mm-base-manager.c6
-rw-r--r--src/mm-base-modem.c185
-rw-r--r--src/mm-base-modem.h115
-rw-r--r--src/mm-base-sim.c119
-rw-r--r--src/mm-base-sim.h2
-rw-r--r--src/mm-base-sms.c88
-rw-r--r--src/mm-bearer-mbim.c2
-rw-r--r--src/mm-bearer-qmi.c2
-rw-r--r--src/mm-bind.c62
-rw-r--r--src/mm-bind.h42
-rw-r--r--src/mm-broadband-bearer.c2
-rw-r--r--src/mm-broadband-modem-qmi.c38
-rw-r--r--src/mm-broadband-modem.c34
-rw-r--r--src/mm-call-qmi.c2
-rw-r--r--src/mm-cbm-list.c38
-rw-r--r--src/mm-cbm-list.h4
-rw-r--r--src/mm-device.c11
-rw-r--r--src/mm-iface-modem-3gpp-profile-manager.c18
-rw-r--r--src/mm-iface-modem-3gpp-ussd.c18
-rw-r--r--src/mm-iface-modem-3gpp.c91
-rw-r--r--src/mm-iface-modem-cdma.c14
-rw-r--r--src/mm-iface-modem-cell-broadcast.c41
-rw-r--r--src/mm-iface-modem-cell-broadcast.h10
-rw-r--r--src/mm-iface-modem-firmware.c14
-rw-r--r--src/mm-iface-modem-location.c35
-rw-r--r--src/mm-iface-modem-messaging.c27
-rw-r--r--src/mm-iface-modem-oma.c28
-rw-r--r--src/mm-iface-modem-sar.c14
-rw-r--r--src/mm-iface-modem-signal.c12
-rw-r--r--src/mm-iface-modem-simple.c16
-rw-r--r--src/mm-iface-modem-time.c11
-rw-r--r--src/mm-iface-modem-voice.c56
-rw-r--r--src/mm-iface-modem.c200
-rw-r--r--src/mm-iface-op-lock.c71
-rw-r--r--src/mm-iface-op-lock.h79
-rw-r--r--src/mm-sim-mbim.c3
-rw-r--r--src/mm-sim-qmi.c3
-rw-r--r--src/mm-sms-list.c31
-rw-r--r--src/mm-sms-list.h3
-rw-r--r--src/mm-sms-mbim.c2
-rw-r--r--src/mm-sms-qmi.c2
-rw-r--r--src/plugins/altair/mm-broadband-bearer-altair-lte.c2
-rw-r--r--src/plugins/cinterion/mm-broadband-bearer-cinterion.c2
-rw-r--r--src/plugins/cinterion/mm-broadband-modem-cinterion.c8
-rw-r--r--src/plugins/cinterion/mm-shared-cinterion.c1
-rw-r--r--src/plugins/fibocom/mm-broadband-bearer-fibocom-ecm.c2
-rw-r--r--src/plugins/huawei/mm-broadband-bearer-huawei.c2
-rw-r--r--src/plugins/huawei/mm-broadband-modem-huawei.c1
-rw-r--r--src/plugins/huawei/mm-sim-huawei.c2
-rw-r--r--src/plugins/icera/mm-broadband-bearer-icera.c2
-rw-r--r--src/plugins/iridium/mm-bearer-iridium.c2
-rw-r--r--src/plugins/iridium/mm-sim-iridium.c2
-rw-r--r--src/plugins/mbm/mm-broadband-bearer-mbm.c2
-rw-r--r--src/plugins/mbm/mm-sim-mbm.c2
-rw-r--r--src/plugins/mtk/mm-bearer-mbim-mtk-fibocom.c2
-rw-r--r--src/plugins/nokia/mm-sim-nokia.c2
-rw-r--r--src/plugins/novatel/mm-broadband-bearer-novatel-lte.c2
-rw-r--r--src/plugins/novatel/mm-sim-novatel-lte.c2
-rw-r--r--src/plugins/option/mm-broadband-bearer-hso.c2
-rw-r--r--src/plugins/option/mm-sim-option.c2
-rw-r--r--src/plugins/pantech/mm-sim-pantech.c2
-rw-r--r--src/plugins/sierra/mm-broadband-bearer-sierra.c2
-rw-r--r--src/plugins/sierra/mm-sim-sierra.c2
-rw-r--r--src/plugins/ublox/mm-broadband-bearer-ublox.c2
-rw-r--r--src/plugins/ublox/mm-broadband-modem-ublox.c1
-rw-r--r--src/plugins/ublox/mm-sim-ublox.c2
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);
}