diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-01-20 11:46:52 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-15 14:14:54 +0100 |
commit | 2a5e9b46b6b27b8c0a7b26f0087f97259cbab71f (patch) | |
tree | b8bf009c4b518da8c235f50ab2d459537a2603f1 /libmm-glib/mm-bearer.c | |
parent | f797beefacc321b680b4813b7efc734d099b5f33 (diff) |
libmm-glib: use the common IP config object from libmm-common
Diffstat (limited to 'libmm-glib/mm-bearer.c')
-rw-r--r-- | libmm-glib/mm-bearer.c | 222 |
1 files changed, 13 insertions, 209 deletions
diff --git a/libmm-glib/mm-bearer.c b/libmm-glib/mm-bearer.c index bd9887cc..58ae5f9e 100644 --- a/libmm-glib/mm-bearer.c +++ b/libmm-glib/mm-bearer.c @@ -137,237 +137,41 @@ mm_bearer_get_suspended (MMBearer *self) return mm_gdbus_bearer_get_suspended (self); } -struct _MMBearerIpConfig { - MMBearerIpMethod method; - gchar *address; - guint32 prefix; - gchar *dns[4]; - gchar *gateway; -}; - -void -mm_bearer_ip_config_free (MMBearerIpConfig *config) -{ - if (!config) - return; - - g_free (config->address); - g_free (config->gateway); - g_free (config->dns[0]); - g_free (config->dns[1]); - g_free (config->dns[2]); - g_slice_free (MMBearerIpConfig, config); -} - -MMBearerIpMethod -mm_bearer_ip_config_get_method (const MMBearerIpConfig *config) -{ - g_return_val_if_fail (config != NULL, MM_BEARER_IP_METHOD_UNKNOWN); - - return config->method; -} - -const gchar * -mm_bearer_ip_config_get_address (const MMBearerIpConfig *config) -{ - g_return_val_if_fail (config != NULL, NULL); - - return config->address; -} - -gchar * -mm_bearer_ip_config_dup_address (const MMBearerIpConfig *config) -{ - g_return_val_if_fail (config != NULL, NULL); - - return g_strdup (config->address); -} - -guint -mm_bearer_ip_config_get_prefix (const MMBearerIpConfig *config) -{ - g_return_val_if_fail (config != NULL, 0); - - return config->prefix; -} - -const gchar ** -mm_bearer_ip_config_get_dns (const MMBearerIpConfig *config) -{ - g_return_val_if_fail (config != NULL, NULL); - - return (const gchar **)config->dns; -} - -gchar ** -mm_bearer_ip_config_dup_dns (const MMBearerIpConfig *config) -{ - g_return_val_if_fail (config != NULL, NULL); - - return g_strdupv ((gchar **)config->dns); -} - -const gchar * -mm_bearer_ip_config_get_gateway (const MMBearerIpConfig *config) -{ - g_return_val_if_fail (config != NULL, NULL); - - return config->gateway; -} - -gchar * -mm_bearer_ip_config_dup_gateway (const MMBearerIpConfig *config) -{ - g_return_val_if_fail (config != NULL, NULL); - - return g_strdup (config->gateway); -} - -static MMBearerIpConfig * -create_ip_config_struct (GVariant *variant) -{ - GVariantIter iter; - const gchar *key; - GVariant *value; - MMBearerIpConfig *c; - - c = g_slice_new0 (MMBearerIpConfig); - - g_variant_iter_init (&iter, variant); - while (g_variant_iter_loop (&iter, "{sv}", &key, &value)) { - if (g_str_equal (key, "method")) { - g_warn_if_fail (c->method == 0); - c->method = (MMBearerIpMethod) g_variant_get_uint32 (value); - } else if (g_str_equal (key, "address")) { - g_warn_if_fail (c->address == NULL); - c->address = g_variant_dup_string (value, NULL); - } else if (g_str_equal (key, "prefix")) { - g_warn_if_fail (c->prefix == 0); - c->prefix = g_variant_get_uint32 (value); - } else if (g_str_equal (key, "dns1")) { - g_warn_if_fail (c->dns[0] == NULL); - c->dns[0] = g_variant_dup_string (value, NULL); - } else if (g_str_equal (key, "dns2")) { - g_warn_if_fail (c->dns[1] == NULL); - c->dns[1] = g_variant_dup_string (value, NULL); - } else if (g_str_equal (key, "dns3")) { - g_warn_if_fail (c->dns[2] == NULL); - c->dns[2] = g_variant_dup_string (value, NULL); - } else if (g_str_equal (key, "gateway")) { - g_warn_if_fail (c->gateway == NULL); - c->gateway = g_variant_dup_string (value, NULL); - } else - g_warning ("Unexpected property '%s' found in Bearer IP configuration", key); - } - - /* If no method is set, don't build the config struct */ - if (!c->method) { - mm_bearer_ip_config_free (c); - return NULL; - } - - return c; -} - -#define MM_BEARER_IPV4_CONFIG_DATA "bearer-ipv4" - -static void -ipv4_config_changed (MMBearer *self) -{ - g_object_set_data (G_OBJECT (self), MM_BEARER_IPV4_CONFIG_DATA, NULL); -} - -const MMBearerIpConfig * -mm_bearer_get_ipv4_config (MMBearer *self) -{ - MMBearerIpConfig *config; - - g_return_val_if_fail (MM_IS_BEARER (self), NULL); - - config = g_object_get_data (G_OBJECT (self), - MM_BEARER_IPV4_CONFIG_DATA); - if (!config) { - config = create_ip_config_struct ( - mm_gdbus_bearer_get_ip4_config (MM_GDBUS_BEARER (self))); - - /* Note: if no specific method set, config struct will not be created */ - if (config) { - g_object_set_data_full (G_OBJECT (self), - MM_BEARER_IPV4_CONFIG_DATA, - config, - (GDestroyNotify)mm_bearer_ip_config_free); - g_signal_connect (self, - "notify::ipv4-config", - G_CALLBACK (ipv4_config_changed), - NULL); - } - } - - return config; -} - MMBearerIpConfig * -mm_bearer_dup_ipv4_config (MMBearer *self) +mm_bearer_get_ipv4_config (MMBearer *self) { MMBearerIpConfig *config; GVariant *variant; + GError *error = NULL; g_return_val_if_fail (MM_IS_BEARER (self), NULL); variant = mm_gdbus_bearer_dup_ip4_config (MM_GDBUS_BEARER (self)); - config = create_ip_config_struct (variant); - g_variant_unref (variant); - - return config; -} - -#define MM_BEARER_IPV6_CONFIG_DATA "bearer-ipv6" - -static void -ipv6_config_changed (MMBearer *self) -{ - g_object_set_data (G_OBJECT (self), MM_BEARER_IPV6_CONFIG_DATA, NULL); -} - -const MMBearerIpConfig * -mm_bearer_get_ipv6_config (MMBearer *self) -{ - MMBearerIpConfig *config; - - g_return_val_if_fail (MM_IS_BEARER (self), NULL); - - config = g_object_get_data (G_OBJECT (self), - MM_BEARER_IPV6_CONFIG_DATA); + config = mm_common_bearer_ip_config_new_from_dictionary (variant, &error); if (!config) { - config = create_ip_config_struct ( - mm_gdbus_bearer_get_ip6_config (MM_GDBUS_BEARER (self))); - - /* Note: if no specific method set, config struct will not be created */ - if (config) { - g_object_set_data_full (G_OBJECT (self), - MM_BEARER_IPV6_CONFIG_DATA, - config, - (GDestroyNotify)mm_bearer_ip_config_free); - g_signal_connect (self, - "notify::ipv6-config", - G_CALLBACK (ipv6_config_changed), - NULL); - } + g_warning ("Couldn't create IP config: '%s'", error->message); + g_error_free (error); } + g_variant_unref (variant); return config; } MMBearerIpConfig * -mm_bearer_dup_ipv6_config (MMBearer *self) +mm_bearer_get_ipv6_config (MMBearer *self) { MMBearerIpConfig *config; GVariant *variant; + GError *error = NULL; g_return_val_if_fail (MM_IS_BEARER (self), NULL); variant = mm_gdbus_bearer_dup_ip6_config (MM_GDBUS_BEARER (self)); - config = create_ip_config_struct (variant); + config = mm_common_bearer_ip_config_new_from_dictionary (variant, &error); + if (!config) { + g_warning ("Couldn't create IP config: '%s'", error->message); + g_error_free (error); + } g_variant_unref (variant); return config; |