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 | |
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.
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | include/provision.h | 52 | ||||
-rw-r--r-- | src/config.c | 81 |
3 files changed, 134 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index 9d713aec..ca0cf0bb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,7 +7,7 @@ include_HEADERS = include/types.h include/log.h include/plugin.h \ include/notifier.h include/service.h \ include/resolver.h include/ipconfig.h \ include/device.h include/network.h include/inet.h \ - include/storage.h + include/storage.h include/provision.h nodist_include_HEADERS = include/version.h diff --git a/include/provision.h b/include/provision.h new file mode 100644 index 00000000..f154d4fb --- /dev/null +++ b/include/provision.h @@ -0,0 +1,52 @@ +/* + * + * Connection Manager + * + * Copyright (C) 2012 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __CONNMAN_PROVISION_H +#define __CONNMAN_PROVISION_H + +#include <connman/types.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * SECTION:provision + * @title: Provisioned configuration premitives + * @short_description: Functions for provision configuration handling + */ + +struct connman_config_entry { + char *ident; + char *name; + void *ssid; + unsigned int ssid_len; + connman_bool_t hidden; +}; + +struct connman_config_entry **connman_config_get_entries(void); +void connman_config_free_entries(struct connman_config_entry **entries); + +#ifdef __cplusplus +} +#endif + +#endif /* __CONNMAN_PROVISION_H */ 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; +} |