diff options
Diffstat (limited to 'src/supplicant-manager/nm-supplicant-config.c')
-rw-r--r-- | src/supplicant-manager/nm-supplicant-config.c | 106 |
1 files changed, 52 insertions, 54 deletions
diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c index f4ee4c3a2c..952f7f2bbb 100644 --- a/src/supplicant-manager/nm-supplicant-config.c +++ b/src/supplicant-manager/nm-supplicant-config.c @@ -26,7 +26,6 @@ #include <string.h> #include <stdlib.h> #include <glib.h> -#include <dbus/dbus-glib.h> #include "nm-supplicant-config.h" #include "nm-supplicant-settings-verify.h" @@ -262,73 +261,72 @@ nm_supplicant_config_fast_required (NMSupplicantConfig *self) return NM_SUPPLICANT_CONFIG_GET_PRIVATE (self)->fast_required; } -static void -get_hash_cb (gpointer key, gpointer value, gpointer user_data) +GVariant * +nm_supplicant_config_get_config (NMSupplicantConfig * self) { - ConfigOption *opt = (ConfigOption *) value; - GValue *variant; - GByteArray *array; + NMSupplicantConfigPrivate *priv; + GHashTableIter iter; + GVariantBuilder builder; + const char *key; + ConfigOption *opt; - variant = g_slice_new0 (GValue); + g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), NULL); + priv = NM_SUPPLICANT_CONFIG_GET_PRIVATE (self); - switch (opt->type) { - case TYPE_INT: - g_value_init (variant, G_TYPE_INT); - g_value_set_int (variant, atoi (opt->value)); - break; - case TYPE_BYTES: - case TYPE_UTF8: - array = g_byte_array_sized_new (opt->len); - g_byte_array_append (array, (const guint8 *) opt->value, opt->len); - g_value_init (variant, DBUS_TYPE_G_UCHAR_ARRAY); - g_value_set_boxed (variant, array); - g_byte_array_free (array, TRUE); - break; - case TYPE_KEYWORD: - case TYPE_STRING: - g_value_init (variant, G_TYPE_STRING); - g_value_set_string (variant, opt->value); - break; - default: - g_slice_free (GValue, variant); - return; + g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT); + + g_hash_table_iter_init (&iter, priv->config); + while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &opt)) { + switch (opt->type) { + case TYPE_INT: + g_variant_builder_add (&builder, "{sv}", + key, + g_variant_new_int32 (atoi (opt->value))); + break; + case TYPE_BYTES: + case TYPE_UTF8: + g_variant_builder_add (&builder, "{sv}", + key, + g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, + opt->value, opt->len, 1)); + break; + case TYPE_KEYWORD: + case TYPE_STRING: + g_variant_builder_add (&builder, "{sv}", + key, + g_variant_new_string (opt->value)); + break; + default: + break; + } } - g_hash_table_insert ((GHashTable *) user_data, g_strdup (key), variant); + return g_variant_builder_end (&builder); } -static void -destroy_hash_value (gpointer data) -{ - GValue *value = (GValue *) data; - - g_value_unset (value); - g_slice_free (GValue, value); -} - -GHashTable * -nm_supplicant_config_get_hash (NMSupplicantConfig * self) +GVariant * +nm_supplicant_config_get_blobs (NMSupplicantConfig * self) { NMSupplicantConfigPrivate *priv; - GHashTable *hash; + GHashTableIter iter; + GVariantBuilder builder; + const char *key; + GByteArray *blob; g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), NULL); - - hash = g_hash_table_new_full (g_str_hash, g_str_equal, - (GDestroyNotify) g_free, - destroy_hash_value); - priv = NM_SUPPLICANT_CONFIG_GET_PRIVATE (self); - g_hash_table_foreach (priv->config, get_hash_cb, hash); - return hash; -} -GHashTable * -nm_supplicant_config_get_blobs (NMSupplicantConfig * self) -{ - g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), NULL); + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{say}")); + + g_hash_table_iter_init (&iter, priv->config); + while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &blob)) { + g_variant_builder_add (&builder, "{s@ay}", + key, + g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, + blob->data, blob->len, 1)); + } - return NM_SUPPLICANT_CONFIG_GET_PRIVATE (self)->blobs; + return g_variant_builder_end (&builder); } #define TWO_GHZ_FREQS "2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484" |