diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-09-28 01:36:32 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-09-28 01:39:17 +0200 |
commit | f79f758d3e8e459a72121fc430b5531dccb56115 (patch) | |
tree | 0b712e4141739b137f5057a5ccc82ab95aef020e /src/provider.c | |
parent | c98264bf67baa934c3855b45118cec610da184c7 (diff) | |
download | connman-f79f758d3e8e459a72121fc430b5531dccb56115.tar.gz connman-f79f758d3e8e459a72121fc430b5531dccb56115.tar.bz2 connman-f79f758d3e8e459a72121fc430b5531dccb56115.zip |
Remove providers based on their VPN service path
Diffstat (limited to 'src/provider.c')
-rw-r--r-- | src/provider.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/provider.c b/src/provider.c index b7dc9e9d..adad8dfc 100644 --- a/src/provider.c +++ b/src/provider.c @@ -216,18 +216,30 @@ int __connman_provider_connect(struct connman_provider *provider) int __connman_provider_remove(const char *path) { struct connman_provider *provider; + GHashTableIter iter; + gpointer value, key; DBG("path %s", path); - provider = g_hash_table_lookup(provider_hash, path); - if (provider == NULL) { - DBG("patch %s not found", path); - return -ENXIO; - } + g_hash_table_iter_init(&iter, provider_hash); + while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) { + const char *srv_path; + provider = value; - g_hash_table_remove(provider_hash, path); + if (provider->vpn_service == NULL) + continue; - return 0; + srv_path = __connman_service_get_path(provider->vpn_service); + + if (g_strcmp0(srv_path, path) == 0) { + DBG("Removing VPN %s", provider->identifier); + g_hash_table_remove(provider_hash, + provider->identifier); + return 0; + } + } + + return -ENXIO; } static int set_connected(struct connman_provider *provider, |