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 | |
parent | f797beefacc321b680b4813b7efc734d099b5f33 (diff) |
libmm-glib: use the common IP config object from libmm-common
-rw-r--r-- | libmm-glib/Makefile.am | 3 | ||||
-rw-r--r-- | libmm-glib/mm-bearer-ip-config.c | 56 | ||||
-rw-r--r-- | libmm-glib/mm-bearer-ip-config.h | 39 | ||||
-rw-r--r-- | libmm-glib/mm-bearer.c | 222 | ||||
-rw-r--r-- | libmm-glib/mm-bearer.h | 28 |
5 files changed, 115 insertions, 233 deletions
diff --git a/libmm-glib/Makefile.am b/libmm-glib/Makefile.am index ae890596..0ed2e8f1 100644 --- a/libmm-glib/Makefile.am +++ b/libmm-glib/Makefile.am @@ -36,6 +36,8 @@ libmm_glib_la_SOURCES = \ mm-sim.c \ mm-bearer-properties.h \ mm-bearer-properties.c \ + mm-bearer-ip-config.h \ + mm-bearer-ip-config.c \ mm-bearer.h \ mm-bearer.c @@ -55,4 +57,5 @@ include_HEADERS = \ mm-modem-simple.h \ mm-sim.h \ mm-bearer-properties.h \ + mm-bearer-ip-config.h \ mm-bearer.h diff --git a/libmm-glib/mm-bearer-ip-config.c b/libmm-glib/mm-bearer-ip-config.c new file mode 100644 index 00000000..b964e408 --- /dev/null +++ b/libmm-glib/mm-bearer-ip-config.c @@ -0,0 +1,56 @@ +/* -*- 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. + */ + +#include "mm-bearer-ip-config.h" + +MMBearerIpMethod +mm_bearer_ip_config_get_method (MMBearerIpConfig *self) +{ + g_return_val_if_fail (MM_IS_BEARER_IP_CONFIG (self), MM_BEARER_IP_METHOD_UNKNOWN); + + return mm_common_bearer_ip_config_get_method (self); +} + +const gchar * +mm_bearer_ip_config_get_address (MMBearerIpConfig *self) +{ + g_return_val_if_fail (MM_IS_BEARER_IP_CONFIG (self), NULL); + + return mm_common_bearer_ip_config_get_address (self); +} + +guint +mm_bearer_ip_config_get_prefix (MMBearerIpConfig *self) +{ + g_return_val_if_fail (MM_IS_BEARER_IP_CONFIG (self), 0); + + return mm_common_bearer_ip_config_get_prefix (self); +} + +const gchar ** +mm_bearer_ip_config_get_dns (MMBearerIpConfig *self) +{ + g_return_val_if_fail (MM_IS_BEARER_IP_CONFIG (self), NULL); + + return mm_common_bearer_ip_config_get_dns (self); +} + +const gchar * +mm_bearer_ip_config_get_gateway (MMBearerIpConfig *self) +{ + g_return_val_if_fail (MM_IS_BEARER_IP_CONFIG (self), NULL); + + return mm_common_bearer_ip_config_get_gateway (self); +} diff --git a/libmm-glib/mm-bearer-ip-config.h b/libmm-glib/mm-bearer-ip-config.h new file mode 100644 index 00000000..ff2882bc --- /dev/null +++ b/libmm-glib/mm-bearer-ip-config.h @@ -0,0 +1,39 @@ +/* -*- 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. + */ + +#ifndef MM_BEARER_IP_CONFIG_H +#define MM_BEARER_IP_CONFIG_H + +#include <ModemManager.h> +#include <glib-object.h> + +#include <libmm-common.h> + +G_BEGIN_DECLS + +typedef MMCommonBearerIpConfig MMBearerIpConfig; +#define MM_TYPE_BEARER_IP_CONFIG(o) MM_TYPE_COMMON_BEARER_IP_CONFIG (o) +#define MM_BEARER_IP_CONFIG(o) MM_COMMON_BEARER_IP_CONFIG(o) +#define MM_IS_BEARER_IP_CONFIG(o) MM_IS_COMMON_BEARER_IP_CONFIG(o) + +MMBearerIpMethod mm_bearer_ip_config_get_method (MMBearerIpConfig *self); +const gchar *mm_bearer_ip_config_get_address (MMBearerIpConfig *self); +guint mm_bearer_ip_config_get_prefix (MMBearerIpConfig *self); +const gchar **mm_bearer_ip_config_get_dns (MMBearerIpConfig *self); +const gchar *mm_bearer_ip_config_get_gateway (MMBearerIpConfig *self); + +G_END_DECLS + +#endif /* MM_BEARER_IP_CONFIG_H */ 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; diff --git a/libmm-glib/mm-bearer.h b/libmm-glib/mm-bearer.h index 0f90dde4..23d2ef46 100644 --- a/libmm-glib/mm-bearer.h +++ b/libmm-glib/mm-bearer.h @@ -27,17 +27,10 @@ #include <libmm-common.h> #include "mm-bearer-properties.h" +#include "mm-bearer-ip-config.h" G_BEGIN_DECLS -/** - * MMBearerIpConfig: - * - * Addressing details for assignment to the data interface. - * This is an opaque struct. - */ -typedef struct _MMBearerIpConfig MMBearerIpConfig; - typedef MmGdbusBearer MMBearer; #define MM_TYPE_BEARER(o) MM_GDBUS_TYPE_BEARER (o) #define MM_BEARER(o) MM_GDBUS_BEARER(o) @@ -72,22 +65,9 @@ gboolean mm_bearer_disconnect_sync (MMBearer *self, GCancellable *cancellable, GError **error); -MMBearerProperties *mm_bearer_get_properties (MMBearer *self); - -const MMBearerIpConfig *mm_bearer_get_ipv4_config (MMBearer *self); -MMBearerIpConfig *mm_bearer_dup_ipv4_config (MMBearer *self); -const MMBearerIpConfig *mm_bearer_get_ipv6_config (MMBearer *self); -MMBearerIpConfig *mm_bearer_dup_ipv6_config (MMBearer *self); - -MMBearerIpMethod mm_bearer_ip_config_get_method (const MMBearerIpConfig *config); -const gchar *mm_bearer_ip_config_get_address (const MMBearerIpConfig *config); -gchar *mm_bearer_ip_config_dup_address (const MMBearerIpConfig *config); -guint mm_bearer_ip_config_get_prefix (const MMBearerIpConfig *config); -const gchar **mm_bearer_ip_config_get_dns (const MMBearerIpConfig *config); -gchar **mm_bearer_ip_config_dup_dns (const MMBearerIpConfig *config); -const gchar *mm_bearer_ip_config_get_gateway (const MMBearerIpConfig *config); -gchar *mm_bearer_ip_config_dup_gateway (const MMBearerIpConfig *config); -void mm_bearer_ip_config_free (MMBearerIpConfig *config); +MMBearerProperties *mm_bearer_get_properties (MMBearer *self); +MMBearerIpConfig *mm_bearer_get_ipv4_config (MMBearer *self); +MMBearerIpConfig *mm_bearer_get_ipv6_config (MMBearer *self); G_END_DECLS |