Make sure we cancel proxy request if we got disconnected and still
waiting for proxy request. Also make sure we set/clear token correctly
---
 plugins/portal.c |   25 ++++++++++++++++---------
 1 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/plugins/portal.c b/plugins/portal.c
index 043caaf..f315114 100644
--- a/plugins/portal.c
+++ b/plugins/portal.c
@@ -39,6 +39,7 @@
 #define STATUS_URL  "http://www.connman.net/online/status.html";
 
 struct server_data {
+       unsigned int token;
        GWeb *web;
        guint request_id;
 };
@@ -105,18 +106,20 @@ static void proxy_callback(const char *proxy, void 
*user_data)
                proxy = getenv("http_proxy");
 
        if (data != NULL) {
-               g_web_set_proxy(data->web, proxy);
+               if (proxy != NULL && g_strcmp0(proxy, "DIRECT") != 0)
+                       g_web_set_proxy(data->web, proxy);
 
                data->request_id = g_web_request_get(data->web, STATUS_URL,
                                                        web_result, location);
-       }
 
-       connman_location_unref(location);
+               data->token = 0;
+       }
 }
 
 static int location_detect(struct connman_location *location)
 {
        struct server_data *data;
+       struct connman_service *service;
        enum connman_service_type service_type;
        char *interface;
        int err;
@@ -168,13 +171,14 @@ static int location_detect(struct connman_location 
*location)
        g_web_set_user_agent(data->web, "ConnMan/%s", VERSION);
        g_web_set_close_connection(data->web, TRUE);
 
-       err = connman_proxy_lookup(interface, STATUS_URL,
-                                       proxy_callback, location);
-       if (err < 0)
-               goto done;
+       service = connman_location_get_service(location);
+       data->token = connman_proxy_lookup(interface, STATUS_URL,
+                                       service, proxy_callback, location);
 
-       connman_location_ref(location);
-       err = 0;
+       if (data->token == 0)
+               err = -EINVAL;
+       else
+               err = 0;
 
 done:
        g_free(interface);
@@ -192,6 +196,9 @@ static int location_finish(struct connman_location 
*location)
        if (data->request_id > 0)
                g_web_cancel_request(data->web, data->request_id);
 
+       if (data->token > 0)
+               connman_proxy_lookup_cancel(data->token);
+
        g_web_unref(data->web);
 
        g_free(data);
-- 
1.7.3.4

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to