aboutsummaryrefslogtreecommitdiff
path: root/libmm-glib/mm-bearer.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-07-01 22:31:12 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-07-01 23:38:04 +0200
commit19b3a552308443e691f6120b07d4ba06086b887a (patch)
tree240924edcfbbe3d0aa08294339d3ccbd77b5e54d /libmm-glib/mm-bearer.c
parent5012c1a3f3cb6f7d5f78f83bfbf72796758a2492 (diff)
libmm-glib,bearer: use helper macros to manage the monitored properties
Diffstat (limited to 'libmm-glib/mm-bearer.c')
-rw-r--r--libmm-glib/mm-bearer.c452
1 files changed, 42 insertions, 410 deletions
diff --git a/libmm-glib/mm-bearer.c b/libmm-glib/mm-bearer.c
index d00f1676..63c61ac0 100644
--- a/libmm-glib/mm-bearer.c
+++ b/libmm-glib/mm-bearer.c
@@ -43,25 +43,12 @@ struct _MMBearerPrivate {
/* Common mutex to sync access */
GMutex mutex;
- /* IPv4 config */
- guint ipv4_config_id;
- MMBearerIpConfig *ipv4_config;
+ PROPERTY_OBJECT_DECLARE (ipv4_config, MMBearerIpConfig)
+ PROPERTY_OBJECT_DECLARE (ipv6_config, MMBearerIpConfig)
+ PROPERTY_OBJECT_DECLARE (properties, MMBearerProperties)
+ PROPERTY_OBJECT_DECLARE (stats, MMBearerStats)
- /* IPv6 config */
- guint ipv6_config_id;
- MMBearerIpConfig *ipv6_config;
-
- /* Properties */
- guint properties_id;
- MMBearerProperties *properties;
-
- /* Stats */
- guint stats_id;
- MMBearerStats *stats;
-
- /* Connection error */
- guint connection_error_id;
- GError *connection_error;
+ PROPERTY_ERROR_DECLARE (connection_error)
};
/*****************************************************************************/
@@ -290,68 +277,6 @@ mm_bearer_get_profile_id (MMBearer *self)
}
/*****************************************************************************/
-static void
-ipv4_config_updated (MMBearer *self,
- GParamSpec *pspec)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- GVariant *dictionary;
-
- g_clear_object (&self->priv->ipv4_config);
-
- /* TODO: update existing object instead of re-creating? */
- dictionary = mm_gdbus_bearer_get_ip4_config (MM_GDBUS_BEARER (self));
- if (dictionary) {
- GError *error = NULL;
-
- self->priv->ipv4_config = mm_bearer_ip_config_new_from_dictionary (dictionary, &error);
- if (error) {
- g_warning ("Invalid IPv4 configuration update received: %s", error->message);
- g_error_free (error);
- }
- }
- }
- g_mutex_unlock (&self->priv->mutex);
-}
-
-static void
-ensure_internal_ipv4_config (MMBearer *self,
- MMBearerIpConfig **dup)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- /* If this is the first time ever asking for the object, setup the
- * update listener and the initial object, if any. */
- if (!self->priv->ipv4_config_id) {
- GVariant *dictionary;
-
- dictionary = mm_gdbus_bearer_dup_ip4_config (MM_GDBUS_BEARER (self));
- if (dictionary) {
- GError *error = NULL;
-
- self->priv->ipv4_config = mm_bearer_ip_config_new_from_dictionary (dictionary, &error);
- if (error) {
- g_warning ("Invalid initial IPv4 configuration: %s", error->message);
- g_error_free (error);
- }
- g_variant_unref (dictionary);
- }
-
- /* No need to clear this signal connection when freeing self */
- self->priv->ipv4_config_id =
- g_signal_connect (self,
- "notify::ip4-config",
- G_CALLBACK (ipv4_config_updated),
- NULL);
- }
-
- if (dup && self->priv->ipv4_config)
- *dup = g_object_ref (self->priv->ipv4_config);
- }
- g_mutex_unlock (&self->priv->mutex);
-}
-
/**
* mm_bearer_get_ipv4_config:
* @self: A #MMBearer.
@@ -369,16 +294,7 @@ ensure_internal_ipv4_config (MMBearer *self,
*
* Since: 1.0
*/
-MMBearerIpConfig *
-mm_bearer_get_ipv4_config (MMBearer *self)
-{
- MMBearerIpConfig *config = NULL;
-
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
- ensure_internal_ipv4_config (self, &config);
- return config;
-}
/**
* mm_bearer_peek_ipv4_config:
@@ -397,78 +313,16 @@ mm_bearer_get_ipv4_config (MMBearer *self)
*
* Since: 1.0
*/
-MMBearerIpConfig *
-mm_bearer_peek_ipv4_config (MMBearer *self)
-{
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
- ensure_internal_ipv4_config (self, NULL);
- return self->priv->ipv4_config;
-}
+/* helpers to match the property substring name with the one in our API */
+#define mm_gdbus_bearer_dup_ipv4_config mm_gdbus_bearer_dup_ip4_config
-/*****************************************************************************/
+PROPERTY_OBJECT_DEFINE_FAILABLE (ipv4_config,
+ Bearer, bearer, BEARER,
+ MMBearerIpConfig,
+ mm_bearer_ip_config_new_from_dictionary)
-static void
-ipv6_config_updated (MMBearer *self,
- GParamSpec *pspec)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- GVariant *dictionary;
-
- g_clear_object (&self->priv->ipv6_config);
-
- /* TODO: update existing object instead of re-creating? */
- dictionary = mm_gdbus_bearer_get_ip6_config (MM_GDBUS_BEARER (self));
- if (dictionary) {
- GError *error = NULL;
-
- self->priv->ipv6_config = mm_bearer_ip_config_new_from_dictionary (dictionary, &error);
- if (error) {
- g_warning ("Invalid IPv6 configuration update received: %s", error->message);
- g_error_free (error);
- }
- }
- }
- g_mutex_unlock (&self->priv->mutex);
-}
-
-static void
-ensure_internal_ipv6_config (MMBearer *self,
- MMBearerIpConfig **dup)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- /* If this is the first time ever asking for the object, setup the
- * update listener and the initial object, if any. */
- if (!self->priv->ipv6_config_id) {
- GVariant *dictionary;
-
- dictionary = mm_gdbus_bearer_dup_ip6_config (MM_GDBUS_BEARER (self));
- if (dictionary) {
- GError *error = NULL;
-
- self->priv->ipv6_config = mm_bearer_ip_config_new_from_dictionary (dictionary, &error);
- if (error) {
- g_warning ("Invalid initial IPv6 configuration: %s", error->message);
- g_error_free (error);
- }
- g_variant_unref (dictionary);
- }
-
- /* No need to clear this signal connection when freeing self */
- self->priv->ipv6_config_id =
- g_signal_connect (self,
- "notify::ip6-config",
- G_CALLBACK (ipv6_config_updated),
- NULL);
- }
-
- if (dup && self->priv->ipv6_config)
- *dup = g_object_ref (self->priv->ipv6_config);
- }
- g_mutex_unlock (&self->priv->mutex);
-}
+/*****************************************************************************/
/**
* mm_bearer_get_ipv6_config:
@@ -487,16 +341,6 @@ ensure_internal_ipv6_config (MMBearer *self,
*
* Since: 1.0
*/
-MMBearerIpConfig *
-mm_bearer_get_ipv6_config (MMBearer *self)
-{
- MMBearerIpConfig *config = NULL;
-
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
-
- ensure_internal_ipv6_config (self, &config);
- return config;
-}
/**
* mm_bearer_peek_ipv6_config:
@@ -515,78 +359,16 @@ mm_bearer_get_ipv6_config (MMBearer *self)
*
* Since: 1.0
*/
-MMBearerIpConfig *
-mm_bearer_peek_ipv6_config (MMBearer *self)
-{
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
- ensure_internal_ipv6_config (self, NULL);
- return self->priv->ipv6_config;
-}
+/* helpers to match the property substring name with the one in our API */
+#define mm_gdbus_bearer_dup_ipv6_config mm_gdbus_bearer_dup_ip6_config
-/*****************************************************************************/
-
-static void
-properties_updated (MMBearer *self,
- GParamSpec *pspec)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- GVariant *dictionary;
-
- g_clear_object (&self->priv->properties);
-
- /* TODO: update existing object instead of re-creating? */
- dictionary = mm_gdbus_bearer_get_properties (MM_GDBUS_BEARER (self));
- if (dictionary) {
- GError *error = NULL;
-
- self->priv->properties = mm_bearer_properties_new_from_dictionary (dictionary, &error);
- if (error) {
- g_warning ("Invalid bearer properties received: %s", error->message);
- g_error_free (error);
- }
- }
- }
- g_mutex_unlock (&self->priv->mutex);
-}
+PROPERTY_OBJECT_DEFINE_FAILABLE (ipv6_config,
+ Bearer, bearer, BEARER,
+ MMBearerIpConfig,
+ mm_bearer_ip_config_new_from_dictionary)
-static void
-ensure_internal_properties (MMBearer *self,
- MMBearerProperties **dup)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- /* If this is the first time ever asking for the object, setup the
- * update listener and the initial object, if any. */
- if (!self->priv->properties_id) {
- GVariant *dictionary;
-
- dictionary = mm_gdbus_bearer_dup_properties (MM_GDBUS_BEARER (self));
- if (dictionary) {
- GError *error = NULL;
-
- self->priv->properties = mm_bearer_properties_new_from_dictionary (dictionary, &error);
- if (error) {
- g_warning ("Invalid initial bearer properties: %s", error->message);
- g_error_free (error);
- }
- g_variant_unref (dictionary);
- }
-
- /* No need to clear this signal connection when freeing self */
- self->priv->properties_id =
- g_signal_connect (self,
- "notify::properties",
- G_CALLBACK (properties_updated),
- NULL);
- }
-
- if (dup && self->priv->properties)
- *dup = g_object_ref (self->priv->properties);
- }
- g_mutex_unlock (&self->priv->mutex);
-}
+/*****************************************************************************/
/**
* mm_bearer_get_properties:
@@ -605,16 +387,6 @@ ensure_internal_properties (MMBearer *self,
*
* Since: 1.0
*/
-MMBearerProperties *
-mm_bearer_get_properties (MMBearer *self)
-{
- MMBearerProperties *props = NULL;
-
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
-
- ensure_internal_properties (self, &props);
- return props;
-}
/**
* mm_bearer_peek_properties:
@@ -633,78 +405,14 @@ mm_bearer_get_properties (MMBearer *self)
*
* Since: 1.0
*/
-MMBearerProperties *
-mm_bearer_peek_properties (MMBearer *self)
-{
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
- ensure_internal_properties (self, NULL);
- return self->priv->properties;
-}
+PROPERTY_OBJECT_DEFINE_FAILABLE (properties,
+ Bearer, bearer, BEARER,
+ MMBearerProperties,
+ mm_bearer_properties_new_from_dictionary)
/*****************************************************************************/
-static void
-stats_updated (MMBearer *self,
- GParamSpec *pspec)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- GVariant *dictionary;
-
- g_clear_object (&self->priv->stats);
-
- dictionary = mm_gdbus_bearer_get_stats (MM_GDBUS_BEARER (self));
- if (dictionary) {
- GError *error = NULL;
-
- self->priv->stats = mm_bearer_stats_new_from_dictionary (dictionary, &error);
- if (error) {
- g_warning ("Invalid bearer stats update received: %s", error->message);
- g_error_free (error);
- }
- }
- }
- g_mutex_unlock (&self->priv->mutex);
-}
-
-static void
-ensure_internal_stats (MMBearer *self,
- MMBearerStats **dup)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- /* If this is the first time ever asking for the object, setup the
- * update listener and the initial object, if any. */
- if (!self->priv->stats_id) {
- GVariant *dictionary;
-
- dictionary = mm_gdbus_bearer_dup_stats (MM_GDBUS_BEARER (self));
- if (dictionary) {
- GError *error = NULL;
-
- self->priv->stats = mm_bearer_stats_new_from_dictionary (dictionary, &error);
- if (error) {
- g_warning ("Invalid initial bearer stats: %s", error->message);
- g_error_free (error);
- }
- g_variant_unref (dictionary);
- }
-
- /* No need to clear this signal connection when freeing self */
- self->priv->stats_id =
- g_signal_connect (self,
- "notify::stats",
- G_CALLBACK (stats_updated),
- NULL);
- }
-
- if (dup && self->priv->stats)
- *dup = g_object_ref (self->priv->stats);
- }
- g_mutex_unlock (&self->priv->mutex);
-}
-
/**
* mm_bearer_get_stats:
* @self: A #MMBearer.
@@ -722,16 +430,6 @@ ensure_internal_stats (MMBearer *self,
*
* Since: 1.6
*/
-MMBearerStats *
-mm_bearer_get_stats (MMBearer *self)
-{
- MMBearerStats *config = NULL;
-
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
-
- ensure_internal_stats (self, &config);
- return config;
-}
/**
* mm_bearer_peek_stats:
@@ -750,73 +448,14 @@ mm_bearer_get_stats (MMBearer *self)
*
* Since: 1.6
*/
-MMBearerStats *
-mm_bearer_peek_stats (MMBearer *self)
-{
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
- ensure_internal_stats (self, NULL);
- return self->priv->stats;
-}
+PROPERTY_OBJECT_DEFINE_FAILABLE (stats,
+ Bearer, bearer, BEARER,
+ MMBearerStats,
+ mm_bearer_stats_new_from_dictionary)
/*****************************************************************************/
-static void
-connection_error_updated (MMBearer *self,
- GParamSpec *pspec)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- GVariant *tuple;
-
- g_clear_error (&self->priv->connection_error);
-
- tuple = mm_gdbus_bearer_get_connection_error (MM_GDBUS_BEARER (self));
- if (tuple) {
- g_autoptr(GError) error = NULL;
-
- self->priv->connection_error = mm_common_error_from_tuple (tuple, &error);
- if (error)
- g_warning ("Invalid bearer connection error update received: %s", error->message);
- }
- }
- g_mutex_unlock (&self->priv->mutex);
-}
-
-static void
-ensure_internal_connection_error (MMBearer *self,
- GError **dup)
-{
- g_mutex_lock (&self->priv->mutex);
- {
- /* If this is the first time ever asking for the object, setup the
- * update listener and the initial object, if any. */
- if (!self->priv->connection_error_id) {
- g_autoptr(GVariant) tuple = NULL;
-
- tuple = mm_gdbus_bearer_dup_connection_error (MM_GDBUS_BEARER (self));
- if (tuple) {
- g_autoptr(GError) error = NULL;
-
- self->priv->connection_error = mm_common_error_from_tuple (tuple, &error);
- if (error)
- g_warning ("Invalid bearer connection error: %s", error->message);
- }
-
- /* No need to clear this signal connection when freeing self */
- self->priv->connection_error_id =
- g_signal_connect (self,
- "notify::connection-error",
- G_CALLBACK (connection_error_updated),
- NULL);
- }
-
- if (dup && self->priv->connection_error)
- *dup = g_error_copy (self->priv->connection_error);
- }
- g_mutex_unlock (&self->priv->mutex);
-}
-
/**
* mm_bearer_get_connection_error:
* @self: A #MMBearer.
@@ -833,16 +472,6 @@ ensure_internal_connection_error (MMBearer *self,
*
* Since: 1.18
*/
-GError *
-mm_bearer_get_connection_error (MMBearer *self)
-{
- GError *error = NULL;
-
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
-
- ensure_internal_connection_error (self, &error);
- return error;
-}
/**
* mm_bearer_peek_connection_error:
@@ -860,14 +489,10 @@ mm_bearer_get_connection_error (MMBearer *self)
*
* Since: 1.18
*/
-GError *
-mm_bearer_peek_connection_error (MMBearer *self)
-{
- g_return_val_if_fail (MM_IS_BEARER (self), NULL);
- ensure_internal_connection_error (self, NULL);
- return self->priv->connection_error;
-}
+PROPERTY_ERROR_DEFINE_FAILABLE (connection_error,
+ Bearer, bearer, BEARER,
+ mm_common_error_from_tuple)
/*****************************************************************************/
@@ -1040,6 +665,12 @@ mm_bearer_init (MMBearer *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_BEARER, MMBearerPrivate);
g_mutex_init (&self->priv->mutex);
+
+ PROPERTY_INITIALIZE (ipv4_config, "ip4-config")
+ PROPERTY_INITIALIZE (ipv6_config, "ip6-config")
+ PROPERTY_INITIALIZE (properties, "properties")
+ PROPERTY_INITIALIZE (stats, "stats")
+ PROPERTY_INITIALIZE (connection_error, "connection-error")
}
static void
@@ -1049,11 +680,12 @@ finalize (GObject *object)
g_mutex_clear (&self->priv->mutex);
- g_clear_object (&self->priv->ipv4_config);
- g_clear_object (&self->priv->ipv6_config);
- g_clear_object (&self->priv->properties);
- g_clear_object (&self->priv->stats);
- g_clear_error (&self->priv->connection_error);
+ PROPERTY_OBJECT_FINALIZE (ipv4_config)
+ PROPERTY_OBJECT_FINALIZE (ipv6_config)
+ PROPERTY_OBJECT_FINALIZE (properties)
+ PROPERTY_OBJECT_FINALIZE (stats)
+
+ PROPERTY_ERROR_FINALIZE (connection_error)
G_OBJECT_CLASS (mm_bearer_parent_class)->finalize (object);
}