X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fwispr.c;h=3b203fba7c57244cfdd252a9a7da8ed3c6a74d53;hb=f2a9f93bbb2df62e3b3246ea253f8aaae29234d2;hp=330aa1d449175a7f77f37bd38baf1d0ddafb1f53;hpb=6f5ffa18c1f8cf226313d9a8c9accb8781bf4a8c;p=platform%2Fupstream%2Fconnman.git diff --git a/src/wispr.c b/src/wispr.c index 330aa1d..3b203fb 100755 --- a/src/wispr.c +++ b/src/wispr.c @@ -422,6 +422,10 @@ static void wispr_portal_error(struct connman_wispr_portal_context *wp_context) DBG("Failed to proceed wispr/portal web request"); wp_context->wispr_result = CONNMAN_WISPR_RESULT_FAILED; + +#if defined TIZEN_EXT + connman_service_set_internet_connection(wp_context->service, false); +#endif } static void portal_manage_status(GWebResult *result, @@ -555,12 +559,31 @@ static void wispr_portal_browser_reply_cb(struct connman_service *service, const char *error, void *user_data) { struct connman_wispr_portal_context *wp_context = user_data; + struct connman_wispr_portal *wispr_portal; + int index; DBG(""); if (!service || !wp_context) return; + /* + * No way to cancel this if wp_context has been freed, so we lookup + * from the service and check that this is still the right context. + */ + index = __connman_service_get_index(service); + if (index < 0) + return; + + wispr_portal = g_hash_table_lookup(wispr_portal_list, + GINT_TO_POINTER(index)); + if (!wispr_portal) + return; + + if (wp_context != wispr_portal->ipv4_context && + wp_context != wispr_portal->ipv6_context) + return; + if (!authentication_done) { wispr_portal_error(wp_context); free_wispr_routes(wp_context); @@ -568,7 +591,7 @@ static void wispr_portal_browser_reply_cb(struct connman_service *service, } /* Restarting the test */ - __connman_wispr_start(service, wp_context->type); + __connman_service_wispr_start(service, wp_context->type); } static void wispr_portal_request_wispr_login(struct connman_service *service, @@ -688,6 +711,9 @@ static bool wispr_portal_web_result(GWebResult *result, gpointer user_data) const char *str = NULL; guint16 status; gsize length; +#if defined TIZEN_MAINTAIN_ONLINE + static int retried = 0; +#endif DBG(""); @@ -719,6 +745,9 @@ static bool wispr_portal_web_result(GWebResult *result, gpointer user_data) wp_context->status_url, wp_context); break; case 200: +#if defined TIZEN_MAINTAIN_ONLINE + retried = 0; +#endif if (wp_context->wispr_msg.message_type >= 0) break; @@ -756,6 +785,19 @@ static bool wispr_portal_web_result(GWebResult *result, gpointer user_data) case 404: if (__connman_service_online_check_failed(wp_context->service, wp_context->type) == 0) { +#if defined TIZEN_MAINTAIN_ONLINE + if (wp_context->type == CONNMAN_IPCONFIG_TYPE_IPV4) { + if (retried == 0) { + connman_agent_report_error(wp_context->service, + __connman_service_get_path(wp_context->service), + "internet-unreachable", + NULL, NULL, NULL); + + retried = 1; + } + break; + } +#endif wispr_portal_error(wp_context); free_connman_wispr_portal_context(wp_context); return false; @@ -832,8 +874,8 @@ static int wispr_portal_detect(struct connman_wispr_portal_context *wp_context) int err = 0; int i; - DBG("wispr/portal context %p", wp_context); - DBG("service %p", wp_context->service); + DBG("wispr/portal context %p service %p", wp_context, + wp_context->service); service_type = connman_service_get_type(wp_context->service); @@ -849,6 +891,9 @@ static int wispr_portal_detect(struct connman_wispr_portal_context *wp_context) case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: case CONNMAN_SERVICE_TYPE_P2P: +#if defined TIZEN_EXT_WIFI_MESH + case CONNMAN_SERVICE_TYPE_MESH: +#endif return -EOPNOTSUPP; } @@ -879,7 +924,9 @@ static int wispr_portal_detect(struct connman_wispr_portal_context *wp_context) goto done; } +#if !defined TIZEN_EXT if (getenv("CONNMAN_WEB_DEBUG")) +#endif g_web_set_debug(wp_context->web, web_debug, "WEB"); if (wp_context->type == CONNMAN_IPCONFIG_TYPE_IPV4) { @@ -906,8 +953,7 @@ static int wispr_portal_detect(struct connman_wispr_portal_context *wp_context) free_connman_wispr_portal_context(wp_context); } } else if (wp_context->timeout == 0) { - wp_context->timeout = - g_timeout_add_seconds(0, no_proxy_callback, wp_context); + wp_context->timeout = g_idle_add(no_proxy_callback, wp_context); } done: