static void wpad_result(GResolvResultStatus status, char **results, gpointer user_data) { struct connman_wpad *wpad = user_data; const char *ptr; char *hostname; DBG("status %d", status); if (status == G_RESOLV_RESULT_STATUS_SUCCESS) { char *url; if (!results || g_strv_length(results) == 0) goto failed; url = g_strdup_printf("http://%s/wpad.dat", wpad->hostname); __connman_service_set_proxy_autoconfig(wpad->service, url); wpad->addrlist = g_strdupv(results); if (wpad->addrlist) download_pac(wpad, "wpad.dat"); g_free(url); __connman_wispr_start(wpad->service, CONNMAN_IPCONFIG_TYPE_IPV4); return; } hostname = wpad->hostname; if (strlen(hostname) < 6) goto failed; ptr = strchr(hostname + 5, '.'); if (!ptr || strlen(ptr) < 2) goto failed; if (!strchr(ptr + 1, '.')) goto failed; wpad->hostname = g_strdup_printf("wpad.%s", ptr + 1); g_free(hostname); DBG("hostname %s", wpad->hostname); g_resolv_lookup_hostname(wpad->resolv, wpad->hostname, wpad_result, wpad); return; failed: connman_service_set_proxy_method(wpad->service, CONNMAN_SERVICE_PROXY_METHOD_DIRECT); __connman_wispr_start(wpad->service, CONNMAN_IPCONFIG_TYPE_IPV4); }
static void wispr_portal_browser_reply_cb(struct connman_service *service, bool authentication_done, const char *error, void *user_data) { struct connman_wispr_portal_context *wp_context = user_data; DBG("authentication_done %d", authentication_done); if (!service || !wp_context || !authentication_done) return; /* Restarting the test */ __connman_wispr_start(service, wp_context->type); }