diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-07-30 16:08:44 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-08-02 19:16:11 +0200 |
commit | d885703619a775d053e0170eb2acb080fa205841 (patch) | |
tree | 21a6ad89488e289e2c5fb7a0bfdeaa9998091c06 /src/service.c | |
parent | de41f828cf9decef412165c2895cb6ddc73be455 (diff) | |
download | connman-d885703619a775d053e0170eb2acb080fa205841.tar.gz connman-d885703619a775d053e0170eb2acb080fa205841.tar.bz2 connman-d885703619a775d053e0170eb2acb080fa205841.zip |
Link providers with services
With each provider we now have a VPN type service.
Diffstat (limited to 'src/service.c')
-rw-r--r-- | src/service.c | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/src/service.c b/src/service.c index 2ddda9fd..4ad14326 100644 --- a/src/service.c +++ b/src/service.c @@ -90,6 +90,7 @@ struct connman_service { connman_bool_t login_required; struct connman_ipconfig *ipconfig; struct connman_network *network; + struct connman_provider *provider; char **nameservers; char *nameserver; char **domains; @@ -3275,7 +3276,7 @@ static void update_from_network(struct connman_service *service, * * Look up service by network and if not found, create one */ -struct connman_service *__connman_service_create_from_network(struct connman_network *network) +struct connman_service * __connman_service_create_from_network(struct connman_network *network) { struct connman_service *service; const char *ident, *group; @@ -3416,6 +3417,68 @@ void __connman_service_remove_from_network(struct connman_network *network) __connman_service_put(service); } +/** + * __connman_service_create_from_provider: + * @provider: provider structure + * + * Look up service by provider and if not found, create one + */ +struct connman_service * +__connman_service_create_from_provider(struct connman_provider *provider) +{ + struct connman_service *service; + const char *ident, *str; + char *name; + int index = connman_provider_get_index(provider); + + DBG("provider %p", provider); + + ident = __connman_provider_get_ident(provider); + if (ident == NULL) + return NULL; + + name = g_strdup_printf("vpn_%s", ident); + service = __connman_service_get(name); + g_free(name); + + if (service == NULL) + return NULL; + + service->type = CONNMAN_SERVICE_TYPE_VPN; + service->provider = provider; + service->autoconnect = FALSE; + + service->state = CONNMAN_SERVICE_STATE_IDLE; + + str = connman_provider_get_string(provider, "Name"); + if (str != NULL) { + g_free(service->name); + service->name = g_strdup(str); + service->hidden = FALSE; + } else { + g_free(service->name); + service->name = NULL; + service->hidden = TRUE; + } + + service->strength = 0; + + service->ipconfig = connman_ipconfig_create(index); + if (service->ipconfig == NULL) + return service; + + connman_ipconfig_set_method(service->ipconfig, + CONNMAN_IPCONFIG_METHOD_MANUAL); + + connman_ipconfig_set_data(service->ipconfig, service); + + connman_ipconfig_set_ops(service->ipconfig, &service_ops); + + service_register(service); + + return service; +} + void __connman_service_stats_update(struct connman_service *service, unsigned int rx_packets, unsigned int tx_packets, unsigned int rx_bytes, unsigned int tx_bytes, |