wispr: Managing the case when user wants to login through the browser himself
authorTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Wed, 2 May 2012 13:46:10 +0000 (16:46 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 4 May 2012 08:10:21 +0000 (11:10 +0300)
src/wispr.c

index 7a99034..53e33e3 100644 (file)
@@ -520,6 +520,27 @@ static gboolean wispr_input(const guint8 **data, gsize *length,
        return FALSE;
 }
 
+static void wispr_portal_browser_reply_cb(struct connman_service *service,
+                                       connman_bool_t authentication_done,
+                                       const char *error, void *user_data)
+{
+       struct connman_wispr_portal_context *wp_context = user_data;
+
+       DBG("");
+
+       if (service == NULL || wp_context == NULL)
+               return;
+
+       if (authentication_done == FALSE) {
+               wispr_portal_error(wp_context);
+               free_wispr_routes(wp_context);
+               return;
+       }
+
+       /* Restarting the test */
+       __connman_wispr_start(service, wp_context->type);
+}
+
 static void wispr_portal_request_wispr_login(struct connman_service *service,
                                connman_bool_t success,
                                const char *ssid, int ssid_len,
@@ -531,6 +552,14 @@ static void wispr_portal_request_wispr_login(struct connman_service *service,
 
        DBG("");
 
+       if (error != NULL && g_strcmp0(error,
+                       "net.connman.Agent.Error.LaunchBrowser") == 0) {
+               __connman_agent_request_browser(service,
+                               wispr_portal_browser_reply_cb,
+                               wp_context->redirect_url, wp_context);
+               return;
+       }
+
        g_free(wp_context->wispr_username);
        wp_context->wispr_username = g_strdup(username);
 
@@ -613,27 +642,6 @@ static gboolean wispr_manage_message(GWebResult *result,
        return FALSE;
 }
 
-static void wispr_portal_browser_reply_cb(struct connman_service *service,
-                                       connman_bool_t authentication_done,
-                                       const char *error, void *user_data)
-{
-       struct connman_wispr_portal_context *wp_context = user_data;
-
-       DBG("");
-
-       if (service == NULL || wp_context == NULL)
-               return;
-
-       if (authentication_done == FALSE) {
-               wispr_portal_error(wp_context);
-               free_wispr_routes(wp_context);
-               return;
-       }
-
-       /* Restarting the test */
-       __connman_wispr_start(service, wp_context->type);
-}
-
 static gboolean wispr_portal_web_result(GWebResult *result, gpointer user_data)
 {
        struct connman_wispr_portal_context *wp_context = user_data;