diff options
author | Jukka Rissanen <jukka.rissanen@linux.intel.com> | 2012-07-10 18:13:47 +0300 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-07-13 06:38:48 -0300 |
commit | 4deb966b9c91999688809ae8f0377ad5196126b5 (patch) | |
tree | e5c75a7f6c3b29f494b7ebe52fbc2d24874c24c3 /src/config.c | |
parent | 065b492c30fec0890d74d9868a1a8c41de867d82 (diff) | |
download | connman-4deb966b9c91999688809ae8f0377ad5196126b5.tar.gz connman-4deb966b9c91999688809ae8f0377ad5196126b5.tar.bz2 connman-4deb966b9c91999688809ae8f0377ad5196126b5.zip |
config: Get configurations that are provisioned
We need the list of provisioned services so that
all the hidden ones can be scanned.
Diffstat (limited to 'src/config.c')
-rw-r--r-- | src/config.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c index de43933c..c7ab1d60 100644 --- a/src/config.c +++ b/src/config.c @@ -31,6 +31,7 @@ #include <sys/inotify.h> #include <glib.h> +#include <connman/provision.h> #include "connman.h" struct connman_config_service { @@ -947,3 +948,83 @@ int __connman_config_provision_service_ident(struct connman_service *service, return ret; } + +struct connman_config_entry **connman_config_get_entries(void) +{ + GHashTableIter iter_file, iter_config; + gpointer value, key; + struct connman_config_entry **entries = NULL; + int i = 0, count; + + g_hash_table_iter_init(&iter_file, config_table); + while (g_hash_table_iter_next(&iter_file, &key, &value) == TRUE) { + struct connman_config *config_file = value; + + count = g_hash_table_size(config_file->service_table); + + entries = g_try_realloc(entries, (i + count + 1) * + sizeof(struct connman_config_entry *)); + if (entries == NULL) + return NULL; + + g_hash_table_iter_init(&iter_config, + config_file->service_table); + while (g_hash_table_iter_next(&iter_config, &key, + &value) == TRUE) { + struct connman_config_service *config = value; + + entries[i] = g_try_new0(struct connman_config_entry, + 1); + if (entries[i] == NULL) + goto cleanup; + + entries[i]->ident = g_strdup(config->ident); + entries[i]->name = g_strdup(config->name); + entries[i]->ssid = g_try_malloc0(config->ssid_len + 1); + if (entries[i]->ssid == NULL) + goto cleanup; + + memcpy(entries[i]->ssid, config->ssid, + config->ssid_len); + entries[i]->ssid_len = config->ssid_len; + entries[i]->hidden = config->hidden; + + i++; + } + } + + if (entries != NULL) { + entries = g_try_realloc(entries, (i + 1) * + sizeof(struct connman_config_entry *)); + if (entries == NULL) + return NULL; + + entries[i] = NULL; + + DBG("%d provisioned AP found", i); + } + + return entries; + +cleanup: + connman_config_free_entries(entries); + return NULL; +} + +void connman_config_free_entries(struct connman_config_entry **entries) +{ + int i; + + if (entries == NULL) + return; + + for (i = 0; entries[i]; i++) { + g_free(entries[i]->ident); + g_free(entries[i]->name); + g_free(entries[i]->ssid); + g_free(entries[i]); + } + + g_free(entries); + return; +} |