X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fwpad.c;h=4e5834e548862b5a2a5baac93d85d831a2cf459f;hb=0bfab55f1a737afedaffeff652fc3e75ee80f2b4;hp=1102dad3ebf250fd670e9a02e1da49ce445ee547;hpb=3243f3966e4f05801a443e3893ac8551a47ec4b1;p=framework%2Fconnectivity%2Fconnman.git diff --git a/src/wpad.c b/src/wpad.c index 1102dad..4e5834e 100644 --- a/src/wpad.c +++ b/src/wpad.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2010 Intel Corporation. All rights reserved. + * Copyright (C) 2007-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 @@ -23,6 +23,7 @@ #include #endif +#include #include #include @@ -84,6 +85,9 @@ static void wpad_result(GResolvResultStatus status, g_free(url); + __connman_wispr_start(wpad->service, + CONNMAN_IPCONFIG_TYPE_IPV4); + return; } @@ -112,46 +116,57 @@ static void wpad_result(GResolvResultStatus status, failed: connman_service_set_proxy_method(wpad->service, CONNMAN_SERVICE_PROXY_METHOD_DIRECT); + + __connman_wispr_start(wpad->service, + CONNMAN_IPCONFIG_TYPE_IPV4); } -void __connman_wpad_start(struct connman_service *service) +int __connman_wpad_start(struct connman_service *service) { struct connman_wpad *wpad; - const char *domainname, *nameserver; + const char *domainname; + char **nameservers; int index; + int i; DBG("service %p", service); if (wpad_list == NULL) - return; + return -EINVAL; index = __connman_service_get_index(service); if (index < 0) - return; + return -EINVAL; domainname = connman_service_get_domainname(service); if (domainname == NULL) - return; + return -EINVAL; - nameserver = connman_service_get_nameserver(service); - if (nameserver == NULL) - return; + nameservers = connman_service_get_nameservers(service); + if (nameservers == NULL) + return -EINVAL; wpad = g_try_new0(struct connman_wpad, 1); - if (wpad == NULL) - return; + if (wpad == NULL) { + g_strfreev(nameservers); + return -ENOMEM; + } wpad->service = service; wpad->resolv = g_resolv_new(index); if (wpad->resolv == NULL) { + g_strfreev(nameservers); g_free(wpad); - return; + return -ENOMEM; } if (getenv("CONNMAN_RESOLV_DEBUG")) g_resolv_set_debug(wpad->resolv, resolv_debug, "RESOLV"); - g_resolv_add_nameserver(wpad->resolv, nameserver, 53, 0); + for (i = 0; nameservers[i] != NULL; i++) + g_resolv_add_nameserver(wpad->resolv, nameservers[i], 53, 0); + + g_strfreev(nameservers); wpad->hostname = g_strdup_printf("wpad.%s", domainname); @@ -160,7 +175,10 @@ void __connman_wpad_start(struct connman_service *service) g_resolv_lookup_hostname(wpad->resolv, wpad->hostname, wpad_result, wpad); + connman_service_ref(service); g_hash_table_replace(wpad_list, GINT_TO_POINTER(index), wpad); + + return 0; } void __connman_wpad_stop(struct connman_service *service) @@ -176,7 +194,8 @@ void __connman_wpad_stop(struct connman_service *service) if (index < 0) return; - g_hash_table_remove(wpad_list, GINT_TO_POINTER(index)); + if (g_hash_table_remove(wpad_list, GINT_TO_POINTER(index)) == TRUE) + connman_service_unref(service); } int __connman_wpad_init(void)