summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@redhat.com>2015-04-15 14:53:30 -0400
committerDan Winship <danw@redhat.com>2015-08-10 09:41:26 -0400
commit6c8f860820a9d7a29e629b8d3d7f97145d385d33 (patch)
tree5d2068284a16055b3b3160de15a9954266813904
parent7f6e39ec6ecc8c417603b39e6cc557bf79e593cf (diff)
downloadNetworkManager-6c8f860820a9d7a29e629b8d3d7f97145d385d33.tar.gz
core: port IP/DHCP config to gdbus
-rw-r--r--introspection/nm-ip6-config.xml4
-rw-r--r--src/NetworkManagerUtils.c21
-rw-r--r--src/NetworkManagerUtils.h1
-rw-r--r--src/nm-dhcp4-config.c22
-rw-r--r--src/nm-dhcp6-config.c22
-rw-r--r--src/nm-ip4-config.c231
-rw-r--r--src/nm-ip6-config.c266
7 files changed, 263 insertions, 304 deletions
diff --git a/introspection/nm-ip6-config.xml b/introspection/nm-ip6-config.xml
index f2ef386ba1..1a107bf29f 100644
--- a/introspection/nm-ip6-config.xml
+++ b/introspection/nm-ip6-config.xml
@@ -35,6 +35,10 @@
</tp:docstring>
</property>
<property name="Nameservers" type="aay" access="read">
+ <!-- gdbus-codegen assumes that "aay" means "array of non-UTF-8
+ string" and so would make this a char **.
+ -->
+ <annotation name="org.gtk.GDBus.C.ForceGVariant" value="1"/>
<tp:docstring>The nameservers in use.</tp:docstring>
</property>
<property name="Domains" type="as" access="read">
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index 8f24ee0489..bab2755743 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -2991,3 +2991,24 @@ nm_utils_g_value_set_object_path_array (GValue *value, GSList *objects)
}
g_value_take_boxed (value, paths);
}
+
+/**
+ * nm_utils_g_value_set_strv:
+ * @value: a #GValue, initialized to store a #G_TYPE_STRV
+ * @strings: a #GPtrArray of strings
+ *
+ * Converts @strings to a #GStrv and stores it in @value.
+ */
+void
+nm_utils_g_value_set_strv (GValue *value, GPtrArray *strings)
+{
+ char **strv;
+ int i;
+
+ strv = g_new (char *, strings->len + 1);
+ for (i = 0; i < strings->len; i++)
+ strv[i] = g_strdup (strings->pdata[i]);
+ strv[i] = NULL;
+
+ g_value_take_boxed (value, strv);
+}
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index 8eb4edf28c..a5a0563ba6 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -253,5 +253,6 @@ void _nm_utils_set_testing (NMUtilsTestFlags flags);
void nm_utils_g_value_set_object_path (GValue *value, gpointer object);
void nm_utils_g_value_set_object_path_array (GValue *value, GSList *objects);
+void nm_utils_g_value_set_strv (GValue *value, GPtrArray *strings);
#endif /* __NETWORKMANAGER_UTILS_H__ */
diff --git a/src/nm-dhcp4-config.c b/src/nm-dhcp4-config.c
index 5b1345ceee..1aed32d9b6 100644
--- a/src/nm-dhcp4-config.c
+++ b/src/nm-dhcp4-config.c
@@ -25,10 +25,10 @@
#include "nm-default.h"
#include "nm-dbus-interface.h"
#include "nm-dhcp4-config.h"
-#include "nm-dhcp4-config-glue.h"
-#include "nm-dbus-glib-types.h"
#include "nm-utils.h"
+#include "nmdbus-dhcp4-config.h"
+
G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_DHCP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigPrivate))
@@ -128,11 +128,7 @@ get_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_OPTIONS:
- /* dbus_g_value_parse_g_variant() will call g_value_init(), but
- * @value is already inited.
- */
- g_value_unset (value);
- dbus_g_value_parse_g_variant (priv->options, value);
+ g_value_set_variant (value, priv->options);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -157,11 +153,13 @@ nm_dhcp4_config_class_init (NMDhcp4ConfigClass *config_class)
/* properties */
g_object_class_install_property
(object_class, PROP_OPTIONS,
- g_param_spec_boxed (NM_DHCP4_CONFIG_OPTIONS, "", "",
- DBUS_TYPE_G_MAP_OF_VARIANT,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
+ g_param_spec_variant (NM_DHCP4_CONFIG_OPTIONS, "", "",
+ G_VARIANT_TYPE ("a{sv}"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (config_class),
- &dbus_glib_nm_dhcp4_config_object_info);
+ NMDBUS_TYPE_DHCP4_CONFIG_SKELETON,
+ NULL);
}
diff --git a/src/nm-dhcp6-config.c b/src/nm-dhcp6-config.c
index db7147a6a4..4855839275 100644
--- a/src/nm-dhcp6-config.c
+++ b/src/nm-dhcp6-config.c
@@ -25,10 +25,10 @@
#include "nm-default.h"
#include "nm-dbus-interface.h"
#include "nm-dhcp6-config.h"
-#include "nm-dhcp6-config-glue.h"
-#include "nm-dbus-glib-types.h"
#include "nm-utils.h"
+#include "nmdbus-dhcp6-config.h"
+
G_DEFINE_TYPE (NMDhcp6Config, nm_dhcp6_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_DHCP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigPrivate))
@@ -128,11 +128,7 @@ get_property (GObject *object, guint prop_id,
switch (prop_id) {
case PROP_OPTIONS:
- /* dbus_g_value_parse_g_variant() will call g_value_init(), but
- * @value is already inited.
- */
- g_value_unset (value);
- dbus_g_value_parse_g_variant (priv->options, value);
+ g_value_set_variant (value, priv->options);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -157,11 +153,13 @@ nm_dhcp6_config_class_init (NMDhcp6ConfigClass *config_class)
/* properties */
g_object_class_install_property
(object_class, PROP_OPTIONS,
- g_param_spec_boxed (NM_DHCP6_CONFIG_OPTIONS, "", "",
- DBUS_TYPE_G_MAP_OF_VARIANT,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
+ g_param_spec_variant (NM_DHCP6_CONFIG_OPTIONS, "", "",
+ G_VARIANT_TYPE ("a{sv}"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (config_class),
- &dbus_glib_nm_dhcp6_config_object_info);
+ NMDBUS_TYPE_DHCP6_CONFIG_SKELETON,
+ NULL);
}
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index f660407e39..02257d8c31 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -29,14 +29,14 @@
#include "nm-default.h"
#include "nm-utils.h"
#include "nm-platform.h"
-#include "nm-dbus-glib-types.h"
-#include "nm-ip4-config-glue.h"
#include "NetworkManagerUtils.h"
#include "nm-core-internal.h"
#include "nm-route-manager.h"
#include "nm-core-internal.h"
#include "nm-macros-internal.h"
+#include "nmdbus-ip4-config.h"
+
G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_IP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IP4_CONFIG, NMIP4ConfigPrivate))
@@ -2140,15 +2140,6 @@ finalize (GObject *object)
}
static void
-gvalue_destroy (gpointer data)
-{
- GValue *value = (GValue *) data;
-
- g_value_unset (value);
- g_slice_free (GValue, value);
-}
-
-static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
@@ -2161,127 +2152,116 @@ get_property (GObject *object, guint prop_id,
break;
case PROP_ADDRESS_DATA:
{
- GPtrArray *addresses = g_ptr_array_new ();
+ GVariantBuilder array_builder, addr_builder;
int naddr = nm_ip4_config_get_num_addresses (config);
int i;
+ g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aa{sv}"));
for (i = 0; i < naddr; i++) {
const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, i);
- GHashTable *addr_hash;
- GValue *val;
-
- addr_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
-
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_STRING);
- g_value_set_string (val, nm_utils_inet4_ntop (address->address, NULL));
- g_hash_table_insert (addr_hash, "address", val);
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_UINT);
- g_value_set_uint (val, address->plen);
- g_hash_table_insert (addr_hash, "prefix", val);
+ g_variant_builder_init (&addr_builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&addr_builder, "{sv}",
+ "address",
+ g_variant_new_string (nm_utils_inet4_ntop (address->address, NULL)));
+ g_variant_builder_add (&addr_builder, "{sv}",
+ "prefix",
+ g_variant_new_uint32 (address->plen));
if (*address->label) {
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_STRING);
- g_value_set_string (val, address->label);
- g_hash_table_insert (addr_hash, "label", val);
+ g_variant_builder_add (&addr_builder, "{sv}",
+ "label",
+ g_variant_new_string (address->label));
}
- g_ptr_array_add (addresses, addr_hash);
+ g_variant_builder_add (&array_builder, "a{sv}", &addr_builder);
}
- g_value_take_boxed (value, addresses);
+ g_value_take_variant (value, g_variant_builder_end (&array_builder));
}
break;
case PROP_ADDRESSES:
{
- GPtrArray *addresses = g_ptr_array_new ();
+ GVariantBuilder array_builder;
int naddr = nm_ip4_config_get_num_addresses (config);
int i;
+ g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aau"));
for (i = 0; i < naddr; i++) {
const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, i);
- GArray *array = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 3);
- guint32 gateway = i == 0 ? priv->gateway : 0;
+ guint32 dbus_addr[3];
- g_array_append_val (array, address->address);
- g_array_append_val (array, address->plen);
- g_array_append_val (array, gateway);
+ dbus_addr[0] = address->address;
+ dbus_addr[1] = address->plen;
+ dbus_addr[2] = i == 0 ? priv->gateway : 0;
- g_ptr_array_add (addresses, array);
+ g_variant_builder_add (&array_builder, "@au",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ dbus_addr, 3, sizeof (guint32)));
}
- g_value_take_boxed (value, addresses);
+ g_value_take_variant (value, g_variant_builder_end (&array_builder));
}
break;
case PROP_ROUTE_DATA:
{
- GPtrArray *routes = g_ptr_array_new ();
+ GVariantBuilder array_builder, route_builder;
guint nroutes = nm_ip4_config_get_num_routes (config);
int i;
+ g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aa{sv}"));
for (i = 0; i < nroutes; i++) {
const NMPlatformIP4Route *route = nm_ip4_config_get_route (config, i);
- GHashTable *route_hash;
- GValue *val;
-
- route_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
-
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_STRING);
- g_value_set_string (val, nm_utils_inet4_ntop (route->network, NULL));
- g_hash_table_insert (route_hash, "dest", val);
-
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_UINT);
- g_value_set_uint (val, route->plen);
- g_hash_table_insert (route_hash, "prefix", val);
+ g_variant_builder_init (&route_builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&route_builder, "{sv}",
+ "dest",
+ g_variant_new_string (nm_utils_inet4_ntop (route->network, NULL)));
+ g_variant_builder_add (&route_builder, "{sv}",
+ "prefix",
+ g_variant_new_uint32 (route->plen));
if (route->gateway) {
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_STRING);
- g_value_set_string (val, nm_utils_inet4_ntop (route->gateway, NULL));
- g_hash_table_insert (route_hash, "next-hop", val);
+ g_variant_builder_add (&route_builder, "{sv}",
+ "next-hop",
+ g_variant_new_string (nm_utils_inet4_ntop (route->gateway, NULL)));
}
+ g_variant_builder_add (&route_builder, "{sv}",
+ "metric",
+ g_variant_new_uint32 (route->metric));
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_UINT);
- g_value_set_uint (val, route->metric);
- g_hash_table_insert (route_hash, "metric", val);
-
- g_ptr_array_add (routes, route_hash);
+ g_variant_builder_add (&array_builder, "a{sv}", &route_builder);
}
- g_value_take_boxed (value, routes);
+ g_value_take_variant (value, g_variant_builder_end (&array_builder));
}
break;
case PROP_ROUTES:
{
- GPtrArray *routes = g_ptr_array_new ();
+ GVariantBuilder array_builder;
guint nroutes = nm_ip4_config_get_num_routes (config);
int i;
+ g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aau"));
for (i = 0; i < nroutes; i++) {
const NMPlatformIP4Route *route = nm_ip4_config_get_route (config, i);
- GArray *array;
+ guint32 dbus_route[4];
/* legacy versions of nm_ip4_route_set_prefix() in libnm-util assert that the
* plen is positive. Skip the default routes not to break older clients. */
if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route))
continue;
- array = g_array_sized_new (FALSE, TRUE, sizeof (guint32), 4);
- g_array_append_val (array, route->network);
- g_array_append_val (array, route->plen);
- g_array_append_val (array, route->gateway);
- g_array_append_val (array, route->metric);
+ dbus_route[0] = route->network;
+ dbus_route[1] = route->plen;
+ dbus_route[2] = route->gateway;
+ dbus_route[3] = route->metric;
- g_ptr_array_add (routes, array);
+ g_variant_builder_add (&array_builder, "@au",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ dbus_route, 4, sizeof (guint32)));
}
- g_value_take_boxed (value, routes);
+ g_value_take_variant (value, g_variant_builder_end (&array_builder));
}
break;
case PROP_GATEWAY:
@@ -2291,19 +2271,27 @@ get_property (GObject *object, guint prop_id,
g_value_set_string (value, NULL);
break;
case PROP_NAMESERVERS:
- g_value_set_boxed (value, priv->nameservers);
+ g_value_take_variant (value,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ priv->nameservers->data,
+ priv->nameservers->len,
+ sizeof (guint32)));
break;
case PROP_DOMAINS:
- g_value_set_boxed (value, priv->domains);
+ nm_utils_g_value_set_strv (value, priv->domains);
break;
case PROP_SEARCHES:
- g_value_set_boxed (value, priv->searches);
+ nm_utils_g_value_set_strv (value, priv->searches);
break;
case PROP_DNS_OPTIONS:
- g_value_set_boxed (value, priv->dns_options);
+ nm_utils_g_value_set_strv (value, priv->dns_options);
break;
case PROP_WINS_SERVERS:
- g_value_set_boxed (value, priv->wins);
+ g_value_take_variant (value,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_UINT32,
+ priv->wins->data,
+ priv->wins->len,
+ sizeof (guint32)));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -2344,65 +2332,72 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
object_class->finalize = finalize;
obj_properties[PROP_IFINDEX] =
- g_param_spec_int (NM_IP4_CONFIG_IFINDEX, "", "",
- -1, G_MAXINT, -1,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_int (NM_IP4_CONFIG_IFINDEX, "", "",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ADDRESS_DATA] =
- g_param_spec_boxed (NM_IP4_CONFIG_ADDRESS_DATA, "", "",
- DBUS_TYPE_NM_IP_ADDRESSES,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP4_CONFIG_ADDRESS_DATA, "", "",
+ G_VARIANT_TYPE ("aa{sv}"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ADDRESSES] =
- g_param_spec_boxed (NM_IP4_CONFIG_ADDRESSES, "", "",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP4_CONFIG_ADDRESSES, "", "",
+ G_VARIANT_TYPE ("aau"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ROUTE_DATA] =
- g_param_spec_boxed (NM_IP4_CONFIG_ROUTE_DATA, "", "",
- DBUS_TYPE_NM_IP_ROUTES,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP4_CONFIG_ROUTE_DATA, "", "",
+ G_VARIANT_TYPE ("aa{sv}"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ROUTES] =
- g_param_spec_boxed (NM_IP4_CONFIG_ROUTES, "", "",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UINT,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP4_CONFIG_ROUTES, "", "",
+ G_VARIANT_TYPE ("aau"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_GATEWAY] =
g_param_spec_string (NM_IP4_CONFIG_GATEWAY, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
obj_properties[PROP_NAMESERVERS] =
- g_param_spec_boxed (NM_IP4_CONFIG_NAMESERVERS, "", "",
- DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP4_CONFIG_NAMESERVERS, "", "",
+ G_VARIANT_TYPE ("au"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_DOMAINS] =
- g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS, "", "",
- DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_boxed (NM_IP4_CONFIG_DOMAINS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_SEARCHES] =
- g_param_spec_boxed (NM_IP4_CONFIG_SEARCHES, "", "",
- DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_boxed (NM_IP4_CONFIG_SEARCHES, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_DNS_OPTIONS] =
g_param_spec_boxed (NM_IP4_CONFIG_DNS_OPTIONS, "", "",
- DBUS_TYPE_G_ARRAY_OF_STRING,
+ G_TYPE_STRV,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
obj_properties[PROP_WINS_SERVERS] =
- g_param_spec_boxed (NM_IP4_CONFIG_WINS_SERVERS, "", "",
- DBUS_TYPE_G_UINT_ARRAY,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP4_CONFIG_WINS_SERVERS, "", "",
+ G_VARIANT_TYPE ("au"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (config_class),
- &dbus_glib_nm_ip4_config_object_info);
+ NMDBUS_TYPE_IP4_CONFIG_SKELETON,
+ NULL);
}
diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c
index 4e37a73b17..20bc3fed80 100644
--- a/src/nm-ip6-config.c
+++ b/src/nm-ip6-config.c
@@ -29,13 +29,13 @@
#include "nm-utils.h"
#include "nm-platform.h"
-#include "nm-dbus-glib-types.h"
-#include "nm-ip6-config-glue.h"
#include "nm-route-manager.h"
#include "nm-core-internal.h"
#include "NetworkManagerUtils.h"
#include "nm-macros-internal.h"
+#include "nmdbus-ip6-config.h"
+
G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_EXPORTED_OBJECT)
#define NM_IP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IP6_CONFIG, NMIP6ConfigPrivate))
@@ -1891,31 +1891,21 @@ finalize (GObject *object)
static void
nameservers_to_gvalue (GArray *array, GValue *value)
{
- GPtrArray *dns;
+ GVariantBuilder builder;
guint i = 0;
- dns = g_ptr_array_new ();
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("aay"));
while (array && (i < array->len)) {
struct in6_addr *addr;
- GByteArray *bytearray;
- addr = &g_array_index (array, struct in6_addr, i++);
- bytearray = g_byte_array_sized_new (16);
- g_byte_array_append (bytearray, (guint8 *) addr->s6_addr, 16);
- g_ptr_array_add (dns, bytearray);
+ addr = &g_array_index (array, struct in6_addr, i++);
+ g_variant_builder_add (&builder, "@ay",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ &addr, 16, 1));
}
- g_value_take_boxed (value, dns);
-}
-
-static void
-gvalue_destroy (gpointer data)
-{
- GValue *value = (GValue *) data;
-
- g_value_unset (value);
- g_slice_free (GValue, value);
+ g_value_take_variant (value, g_variant_builder_end (&builder));
}
static void
@@ -1931,163 +1921,109 @@ get_property (GObject *object, guint prop_id,
break;
case PROP_ADDRESS_DATA:
{
- GPtrArray *addresses = g_ptr_array_new ();
+ GVariantBuilder array_builder, addr_builder;
int naddr = nm_ip6_config_get_num_addresses (config);
int i;
+ g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aa{sv}"));
for (i = 0; i < naddr; i++) {
const NMPlatformIP6Address *address = nm_ip6_config_get_address (config, i);
- GHashTable *addr_hash;
- GValue *val;
-
- addr_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_STRING);
- g_value_set_string (val, nm_utils_inet6_ntop (&address->address, NULL));
- g_hash_table_insert (addr_hash, "address", val);
+ g_variant_builder_init (&addr_builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&addr_builder, "{sv}",
+ "address",
+ g_variant_new_string (nm_utils_inet6_ntop (&address->address, NULL)));
+ g_variant_builder_add (&addr_builder, "{sv}",
+ "prefix",
+ g_variant_new_uint32 (address->plen));
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_UINT);
- g_value_set_uint (val, address->plen);
- g_hash_table_insert (addr_hash, "prefix", val);
-
- g_ptr_array_add (addresses, addr_hash);
+ g_variant_builder_add (&array_builder, "a{sv}", &addr_builder);
}
- g_value_take_boxed (value, addresses);
+ g_value_take_variant (value, g_variant_builder_end (&array_builder));
}
break;
case PROP_ADDRESSES:
{
- GPtrArray *addresses = g_ptr_array_new ();
+ GVariantBuilder array_builder;
const struct in6_addr *gateway = nm_ip6_config_get_gateway (config);
int naddr = nm_ip6_config_get_num_addresses (config);
int i;
+ g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("a(ayuay)"));
for (i = 0; i < naddr; i++) {
const NMPlatformIP6Address *address = nm_ip6_config_get_address (config, i);
- GValueArray *array = g_value_array_new (3);
- GValue element = G_VALUE_INIT;
- GByteArray *ba;
-
- /* IP address */
- g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
- ba = g_byte_array_new ();
- g_byte_array_append (ba, (guint8 *) &address->address, 16);
- g_value_take_boxed (&element, ba);
- g_value_array_append (array, &element);
- g_value_unset (&element);
-
- /* Prefix */
- g_value_init (&element, G_TYPE_UINT);
- g_value_set_uint (&element, address->plen);
- g_value_array_append (array, &element);
- g_value_unset (&element);
-
- /* Gateway */
- g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
- ba = g_byte_array_new ();
- g_byte_array_append (ba, (guint8 *) (i == 0 && gateway ? gateway : &in6addr_any), sizeof (*gateway));
- g_value_take_boxed (&element, ba);
- g_value_array_append (array, &element);
- g_value_unset (&element);
-
- g_ptr_array_add (addresses, array);
+ g_variant_builder_add (&array_builder, "(@ayu@ay)",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ &address->address, 16, 1),
+ address->plen,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ (i == 0 && gateway ? gateway : &in6addr_any),
+ 16, 1));
}
- g_value_take_boxed (value, addresses);
+ g_value_take_variant (value, g_variant_builder_end (&array_builder));
}
break;
case PROP_ROUTE_DATA:
{
- GPtrArray *routes = g_ptr_array_new ();
+ GVariantBuilder array_builder, route_builder;
guint nroutes = nm_ip6_config_get_num_routes (config);
int i;
+ g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("aa{sv}"));
for (i = 0; i < nroutes; i++) {
const NMPlatformIP6Route *route = nm_ip6_config_get_route (config, i);
- GHashTable *route_hash;
- GValue *val;
-
- route_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gvalue_destroy);
-
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_STRING);
- g_value_set_string (val, nm_utils_inet6_ntop (&route->network, NULL));
- g_hash_table_insert (route_hash, "dest", val);
-
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_UINT);
- g_value_set_uint (val, route->plen);
- g_hash_table_insert (route_hash, "prefix", val);
+ g_variant_builder_init (&route_builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&route_builder, "{sv}",
+ "dest",
+ g_variant_new_string (nm_utils_inet6_ntop (&route->network, NULL)));
+ g_variant_builder_add (&route_builder, "{sv}",
+ "prefix",
+ g_variant_new_uint32 (route->plen));
if (!IN6_IS_ADDR_UNSPECIFIED (&route->gateway)) {
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_STRING);
- g_value_set_string (val, nm_utils_inet6_ntop (&route->gateway, NULL));
- g_hash_table_insert (route_hash, "next-hop", val);
+ g_variant_builder_add (&route_builder, "{sv}",
+ "next-hop",
+ g_variant_new_string (nm_utils_inet6_ntop (&route->gateway, NULL)));
}
- val = g_slice_new0 (GValue);
- g_value_init (val, G_TYPE_UINT);
- g_value_set_uint (val, route->metric);
- g_hash_table_insert (route_hash, "metric", val);
+ g_variant_builder_add (&route_builder, "{sv}",
+ "metric",
+ g_variant_new_uint32 (route->metric));
- g_ptr_array_add (routes, route_hash);
+ g_variant_builder_add (&array_builder, "a{sv}", &route_builder);
}
- g_value_take_boxed (value, routes);
+ g_value_take_variant (value, g_variant_builder_end (&array_builder));
}
break;
case PROP_ROUTES:
{
- GPtrArray *routes = g_ptr_array_new ();
+ GVariantBuilder array_builder;
int nroutes = nm_ip6_config_get_num_routes (config);
int i;
+ g_variant_builder_init (&array_builder, G_VARIANT_TYPE ("a(ayuayu)"));
for (i = 0; i < nroutes; i++) {
- GValueArray *array;
const NMPlatformIP6Route *route = nm_ip6_config_get_route (config, i);
- GByteArray *ba;
- GValue element = G_VALUE_INIT;
/* legacy versions of nm_ip6_route_set_prefix() in libnm-util assert that the
* plen is positive. Skip the default routes not to break older clients. */
if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route))
continue;
- array = g_value_array_new (4);
-
- g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
- ba = g_byte_array_new ();
- g_byte_array_append (ba, (guint8 *) &route->network, sizeof (route->network));
- g_value_take_boxed (&element, ba);
- g_value_array_append (array, &element);
- g_value_unset (&element);
-
- g_value_init (&element, G_TYPE_UINT);
- g_value_set_uint (&element, route->plen);
- g_value_array_append (array, &element);
- g_value_unset (&element);
-
- g_value_init (&element, DBUS_TYPE_G_UCHAR_ARRAY);
- ba = g_byte_array_new ();
- g_byte_array_append (ba, (guint8 *) &route->gateway, sizeof (route->gateway));
- g_value_take_boxed (&element, ba);
- g_value_array_append (array, &element);
- g_value_unset (&element);
-
- g_value_init (&element, G_TYPE_UINT);
- g_value_set_uint (&element, route->metric);
- g_value_array_append (array, &element);
- g_value_unset (&element);
-
- g_ptr_array_add (routes, array);
+ g_variant_builder_add (&array_builder, "(@ayu@ayu)",
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ &route->network, 16, 1),
+ g_variant_new_uint32 (route->plen),
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ &route->gateway, 16, 1),
+ g_variant_new_uint32 (route->metric));
}
- g_value_take_boxed (value, routes);
+ g_value_take_variant (value, g_variant_builder_end (&array_builder));
}
break;
case PROP_GATEWAY:
@@ -2100,13 +2036,13 @@ get_property (GObject *object, guint prop_id,
nameservers_to_gvalue (priv->nameservers, value);
break;
case PROP_DOMAINS:
- g_value_set_boxed (value, priv->domains);
+ nm_utils_g_value_set_strv (value, priv->domains);
break;
case PROP_SEARCHES:
- g_value_set_boxed (value, priv->searches);
+ nm_utils_g_value_set_strv (value, priv->searches);
break;
case PROP_DNS_OPTIONS:
- g_value_set_boxed (value, priv->dns_options);
+ nm_utils_g_value_set_strv (value, priv->dns_options);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -2149,59 +2085,65 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
/* properties */
obj_properties[PROP_IFINDEX] =
- g_param_spec_int (NM_IP6_CONFIG_IFINDEX, "", "",
- -1, G_MAXINT, -1,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_int (NM_IP6_CONFIG_IFINDEX, "", "",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ADDRESS_DATA] =
- g_param_spec_boxed (NM_IP6_CONFIG_ADDRESS_DATA, "", "",
- DBUS_TYPE_NM_IP_ADDRESSES,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP6_CONFIG_ADDRESS_DATA, "", "",
+ G_VARIANT_TYPE ("aa{sv}"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ADDRESSES] =
- g_param_spec_boxed (NM_IP6_CONFIG_ADDRESSES, "", "",
- DBUS_TYPE_G_ARRAY_OF_IP6_ADDRESS,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP6_CONFIG_ADDRESSES, "", "",
+ G_VARIANT_TYPE ("a(ayuay)"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ROUTE_DATA] =
- g_param_spec_boxed (NM_IP6_CONFIG_ROUTE_DATA, "", "",
- DBUS_TYPE_NM_IP_ROUTES,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP6_CONFIG_ROUTE_DATA, "", "",
+ G_VARIANT_TYPE ("aa{sv}"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_ROUTES] =
- g_param_spec_boxed (NM_IP6_CONFIG_ROUTES, "", "",
- DBUS_TYPE_G_ARRAY_OF_IP6_ROUTE,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP6_CONFIG_ROUTES, "", "",
+ G_VARIANT_TYPE ("a(ayuayu)"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_GATEWAY] =
g_param_spec_string (NM_IP6_CONFIG_GATEWAY, "", "",
NULL,
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
obj_properties[PROP_NAMESERVERS] =
- g_param_spec_boxed (NM_IP6_CONFIG_NAMESERVERS, "", "",
- DBUS_TYPE_G_ARRAY_OF_ARRAY_OF_UCHAR,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_variant (NM_IP6_CONFIG_NAMESERVERS, "", "",
+ G_VARIANT_TYPE ("aay"),
+ NULL,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_DOMAINS] =
- g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS, "", "",
- DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_boxed (NM_IP6_CONFIG_DOMAINS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_SEARCHES] =
- g_param_spec_boxed (NM_IP6_CONFIG_SEARCHES, "", "",
- DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_boxed (NM_IP6_CONFIG_SEARCHES, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_DNS_OPTIONS] =
- g_param_spec_boxed (NM_IP6_CONFIG_DNS_OPTIONS, "", "",
- DBUS_TYPE_G_ARRAY_OF_STRING,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
+ g_param_spec_boxed (NM_IP6_CONFIG_DNS_OPTIONS, "", "",
+ G_TYPE_STRV,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (config_class),
- &dbus_glib_nm_ip6_config_object_info);
+ NMDBUS_TYPE_IP6_CONFIG_SKELETON,
+ NULL);
}