aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-01-20 11:46:52 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:14:54 +0100
commit2a5e9b46b6b27b8c0a7b26f0087f97259cbab71f (patch)
treeb8bf009c4b518da8c235f50ab2d459537a2603f1
parentf797beefacc321b680b4813b7efc734d099b5f33 (diff)
libmm-glib: use the common IP config object from libmm-common
-rw-r--r--libmm-glib/Makefile.am3
-rw-r--r--libmm-glib/mm-bearer-ip-config.c56
-rw-r--r--libmm-glib/mm-bearer-ip-config.h39
-rw-r--r--libmm-glib/mm-bearer.c222
-rw-r--r--libmm-glib/mm-bearer.h28
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