libmm-glib: use the common IP config object from libmm-common
This commit is contained in:
@@ -36,6 +36,8 @@ libmm_glib_la_SOURCES = \
|
|||||||
mm-sim.c \
|
mm-sim.c \
|
||||||
mm-bearer-properties.h \
|
mm-bearer-properties.h \
|
||||||
mm-bearer-properties.c \
|
mm-bearer-properties.c \
|
||||||
|
mm-bearer-ip-config.h \
|
||||||
|
mm-bearer-ip-config.c \
|
||||||
mm-bearer.h \
|
mm-bearer.h \
|
||||||
mm-bearer.c
|
mm-bearer.c
|
||||||
|
|
||||||
@@ -55,4 +57,5 @@ include_HEADERS = \
|
|||||||
mm-modem-simple.h \
|
mm-modem-simple.h \
|
||||||
mm-sim.h \
|
mm-sim.h \
|
||||||
mm-bearer-properties.h \
|
mm-bearer-properties.h \
|
||||||
|
mm-bearer-ip-config.h \
|
||||||
mm-bearer.h
|
mm-bearer.h
|
||||||
|
56
libmm-glib/mm-bearer-ip-config.c
Normal file
56
libmm-glib/mm-bearer-ip-config.c
Normal file
@@ -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);
|
||||||
|
}
|
39
libmm-glib/mm-bearer-ip-config.h
Normal file
39
libmm-glib/mm-bearer-ip-config.h
Normal file
@@ -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 */
|
@@ -137,237 +137,41 @@ mm_bearer_get_suspended (MMBearer *self)
|
|||||||
return mm_gdbus_bearer_get_suspended (self);
|
return mm_gdbus_bearer_get_suspended (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct _MMBearerIpConfig {
|
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)
|
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)
|
|
||||||
{
|
{
|
||||||
MMBearerIpConfig *config;
|
MMBearerIpConfig *config;
|
||||||
GVariant *variant;
|
GVariant *variant;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (MM_IS_BEARER (self), NULL);
|
g_return_val_if_fail (MM_IS_BEARER (self), NULL);
|
||||||
|
|
||||||
variant = mm_gdbus_bearer_dup_ip4_config (MM_GDBUS_BEARER (self));
|
variant = mm_gdbus_bearer_dup_ip4_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);
|
g_variant_unref (variant);
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MM_BEARER_IPV6_CONFIG_DATA "bearer-ipv6"
|
MMBearerIpConfig *
|
||||||
|
|
||||||
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)
|
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);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
MMBearerIpConfig *
|
|
||||||
mm_bearer_dup_ipv6_config (MMBearer *self)
|
|
||||||
{
|
{
|
||||||
MMBearerIpConfig *config;
|
MMBearerIpConfig *config;
|
||||||
GVariant *variant;
|
GVariant *variant;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (MM_IS_BEARER (self), NULL);
|
g_return_val_if_fail (MM_IS_BEARER (self), NULL);
|
||||||
|
|
||||||
variant = mm_gdbus_bearer_dup_ip6_config (MM_GDBUS_BEARER (self));
|
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);
|
g_variant_unref (variant);
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
|
@@ -27,17 +27,10 @@
|
|||||||
#include <libmm-common.h>
|
#include <libmm-common.h>
|
||||||
|
|
||||||
#include "mm-bearer-properties.h"
|
#include "mm-bearer-properties.h"
|
||||||
|
#include "mm-bearer-ip-config.h"
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
/**
|
|
||||||
* MMBearerIpConfig:
|
|
||||||
*
|
|
||||||
* Addressing details for assignment to the data interface.
|
|
||||||
* This is an opaque struct.
|
|
||||||
*/
|
|
||||||
typedef struct _MMBearerIpConfig MMBearerIpConfig;
|
|
||||||
|
|
||||||
typedef MmGdbusBearer MMBearer;
|
typedef MmGdbusBearer MMBearer;
|
||||||
#define MM_TYPE_BEARER(o) MM_GDBUS_TYPE_BEARER (o)
|
#define MM_TYPE_BEARER(o) MM_GDBUS_TYPE_BEARER (o)
|
||||||
#define MM_BEARER(o) MM_GDBUS_BEARER(o)
|
#define MM_BEARER(o) MM_GDBUS_BEARER(o)
|
||||||
@@ -72,22 +65,9 @@ gboolean mm_bearer_disconnect_sync (MMBearer *self,
|
|||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
MMBearerProperties *mm_bearer_get_properties (MMBearer *self);
|
MMBearerProperties *mm_bearer_get_properties (MMBearer *self);
|
||||||
|
MMBearerIpConfig *mm_bearer_get_ipv4_config (MMBearer *self);
|
||||||
const MMBearerIpConfig *mm_bearer_get_ipv4_config (MMBearer *self);
|
MMBearerIpConfig *mm_bearer_get_ipv6_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);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user