DA: Skip initializing failed_bssids list when eapol failure case
[platform/upstream/connman.git] / tools / wispr.c
old mode 100644 (file)
new mode 100755 (executable)
index 1300e40..e56dfc1
@@ -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
@@ -30,6 +30,7 @@
 #include <string.h>
 #include <signal.h>
 #include <termios.h>
+#include <netdb.h>
 
 #include <gweb/gweb.h>
 
@@ -98,7 +99,7 @@ static const char *response_code_to_string(int response_code)
 }
 
 struct wispr_msg {
-       gboolean has_error;
+       bool has_error;
        const char *current_element;
        int message_type;
        int response_code;
@@ -112,7 +113,7 @@ struct wispr_msg {
 
 static inline void wispr_msg_init(struct wispr_msg *msg)
 {
-       msg->has_error = FALSE;
+       msg->has_error = false;
        msg->current_element = NULL;
 
        msg->message_type = -1;
@@ -210,12 +211,11 @@ static void text_handler(GMarkupParseContext *context,
        struct wispr_msg *msg = user_data;
        int i;
 
-       if (msg->current_element == NULL)
+       if (!msg->current_element)
                return;
 
        for (i = 0; wispr_element_map[i].str; i++) {
-               if (g_str_equal(wispr_element_map[i].str,
-                                       msg->current_element) == FALSE)
+               if (!g_str_equal(wispr_element_map[i].str, msg->current_element))
                        continue;
 
                switch (wispr_element_map[i].element) {
@@ -264,7 +264,7 @@ static void error_handler(GMarkupParseContext *context,
 {
        struct wispr_msg *msg = user_data;
 
-       msg->has_error = TRUE;
+       msg->has_error = true;
 }
 
 static const GMarkupParser wispr_parser = {
@@ -279,7 +279,7 @@ static void parser_callback(const char *str, gpointer user_data)
 {
        struct wispr_session *wispr = user_data;
        GMarkupParseContext *context;
-       gboolean result;
+       bool result;
 
        //printf("%s\n", str);
 
@@ -287,8 +287,8 @@ static void parser_callback(const char *str, gpointer user_data)
                        G_MARKUP_TREAT_CDATA_AS_TEXT, &wispr->msg, NULL);
 
        result = g_markup_parse_context_parse(context, str, strlen(str), NULL);
-       if (result == TRUE)
-               result = g_markup_parse_context_end_parse(context, NULL);
+       if (result)
+               g_markup_parse_context_end_parse(context, NULL);
 
        g_markup_parse_context_free(context);
 }
@@ -299,7 +299,7 @@ struct user_input_data {
        GString *str;
        user_input_cb cb;
        gpointer user_data;
-       gboolean hidden;
+       bool hidden;
        int fd;
        struct termios saved_termios;
 };
@@ -308,7 +308,7 @@ static void user_callback(struct user_input_data *data)
 {
        char *value;
 
-       if (data->hidden == TRUE) {
+       if (data->hidden) {
                ssize_t len;
 
                len = write(data->fd, "\n", 1);
@@ -349,13 +349,13 @@ static gboolean keyboard_input(GIOChannel *channel, GIOCondition condition,
 
        g_string_append_c(data->str, buf[0]);
 
-       if (data->hidden == TRUE)
+       if (data->hidden)
                len = write(data->fd, "*", 1);
 
        return TRUE;
 }
 
-static gboolean user_input(const char *label, gboolean hidden,
+static bool user_input(const char *label, bool hidden,
                                user_input_cb func, gpointer user_data)
 {
        struct user_input_data *data;
@@ -365,8 +365,8 @@ static gboolean user_input(const char *label, gboolean hidden,
        ssize_t len;
 
        data = g_try_new0(struct user_input_data, 1);
-       if (data == NULL)
-               return FALSE;
+       if (!data)
+               return false;
 
        data->str = g_string_sized_new(32);
        data->cb = func;
@@ -383,7 +383,7 @@ static gboolean user_input(const char *label, gboolean hidden,
        }
 
        new_termios = data->saved_termios;
-       if (data->hidden == TRUE)
+       if (data->hidden)
                new_termios.c_lflag &= ~(ICANON|ECHO);
        else
                new_termios.c_lflag &= ~ICANON;
@@ -409,13 +409,13 @@ static gboolean user_input(const char *label, gboolean hidden,
        if (len < 0)
                goto error;
 
-       return TRUE;
+       return true;
 
 error:
        g_string_free(data->str, TRUE);
        g_free(data);
 
-       return FALSE;
+       return false;
 }
 
 static void password_callback(const char *value, gpointer user_data)
@@ -437,8 +437,8 @@ static void username_callback(const char *value, gpointer user_data)
        g_free(wispr->username);
        wispr->username = g_strdup(value);
 
-       if (wispr->password == NULL) {
-               user_input("Password", TRUE, password_callback, wispr);
+       if (!wispr->password) {
+               user_input("Password", true, password_callback, wispr);
                return;
        }
 
@@ -447,7 +447,7 @@ static void username_callback(const char *value, gpointer user_data)
        execute_login(wispr);
 }
 
-static gboolean wispr_input(const guint8 **data, gsize *length,
+static bool wispr_input(const guint8 **data, gsize *length,
                                                gpointer user_data)
 {
        struct wispr_session *wispr = user_data;
@@ -471,10 +471,28 @@ static gboolean wispr_input(const guint8 **data, gsize *length,
        *data = (guint8 *) wispr->formdata;
        *length = count;
 
-       return FALSE;
+       return false;
+}
+
+static bool wispr_route(const char *addr, int ai_family, int if_index,
+               gpointer user_data)
+{
+       char *family = "unknown";
+
+       if (ai_family == AF_INET)
+               family = "IPv4";
+       else if (ai_family == AF_INET6)
+               family = "IPv6";
+
+       printf("Route request: %s %s index %d\n", family, addr, if_index);
+
+       if (ai_family != AF_INET && ai_family != AF_INET6)
+               return false;
+
+       return true;
 }
 
-static gboolean wispr_result(GWebResult *result, gpointer user_data)
+static bool wispr_result(GWebResult *result, gpointer user_data)
 {
        struct wispr_session *wispr = user_data;
        const guint8 *chunk;
@@ -487,7 +505,7 @@ static gboolean wispr_result(GWebResult *result, gpointer user_data)
        if (length > 0) {
                //printf("%s\n", (char *) chunk);
                g_web_parser_feed_data(wispr->parser, chunk, length);
-               return TRUE;
+               return true;
        }
 
        g_web_parser_end_data(wispr->parser);
@@ -506,17 +524,16 @@ static gboolean wispr_result(GWebResult *result, gpointer user_data)
                if (status != 302)
                        goto done;
 
-               if (g_web_result_get_header(result, "Location",
-                                                       &redirect) == FALSE)
+               if (!g_web_result_get_header(result, "Location", &redirect))
                        goto done;
 
                printf("Redirect URL: %s\n", redirect);
                printf("\n");
 
                wispr->request = g_web_request_get(wispr->web, redirect,
-                                                       wispr_result, wispr);
+                               wispr_result, wispr_route, wispr);
 
-               return FALSE;
+               return false;
        }
 
        printf("Message type: %s (%d)\n",
@@ -525,17 +542,17 @@ static gboolean wispr_result(GWebResult *result, gpointer user_data)
        printf("Response code: %s (%d)\n",
                        response_code_to_string(wispr->msg.response_code),
                                                wispr->msg.response_code);
-       if (wispr->msg.access_procedure != NULL)
+       if (wispr->msg.access_procedure)
                printf("Access procedure: %s\n", wispr->msg.access_procedure);
-       if (wispr->msg.access_location != NULL)
+       if (wispr->msg.access_location)
                printf("Access location: %s\n", wispr->msg.access_location);
-       if (wispr->msg.location_name != NULL)
+       if (wispr->msg.location_name)
                printf("Location name: %s\n", wispr->msg.location_name);
-       if (wispr->msg.login_url != NULL)
+       if (wispr->msg.login_url)
                printf("Login URL: %s\n", wispr->msg.login_url);
-       if (wispr->msg.abort_login_url != NULL)
+       if (wispr->msg.abort_login_url)
                printf("Abort login URL: %s\n", wispr->msg.abort_login_url);
-       if (wispr->msg.logoff_url != NULL)
+       if (wispr->msg.logoff_url)
                printf("Logoff URL: %s\n", wispr->msg.logoff_url);
        printf("\n");
 
@@ -543,18 +560,19 @@ static gboolean wispr_result(GWebResult *result, gpointer user_data)
                goto done;
 
        if (wispr->msg.message_type == 100) {
-               if (wispr->username == NULL) {
-                       user_input("Username", FALSE, username_callback, wispr);
-                       return FALSE;
+               if (!wispr->username) {
+                       user_input("Username", false,
+                                  username_callback, wispr);
+                       return false;
                }
 
-               if (wispr->password == NULL) {
-                       user_input("Password", TRUE, password_callback, wispr);
-                       return FALSE;
+               if (!wispr->password) {
+                       user_input("Password", true, password_callback, wispr);
+                       return false;
                }
 
                g_idle_add(execute_login, wispr);
-               return FALSE;
+               return false;
        } else if (wispr->msg.message_type == 120 ||
                                        wispr->msg.message_type == 140) {
                int code = wispr->msg.response_code;
@@ -565,8 +583,7 @@ static gboolean wispr_result(GWebResult *result, gpointer user_data)
        if (status == 302) {
                const char *redirect;
 
-               if (g_web_result_get_header(result, "Location",
-                                                       &redirect) == FALSE)
+               if (!g_web_result_get_header(result, "Location", &redirect))
                        goto done;
 
                printf("\n");
@@ -574,15 +591,15 @@ static gboolean wispr_result(GWebResult *result, gpointer user_data)
                printf("\n");
 
                wispr->request = g_web_request_get(wispr->web, redirect,
-                                                       wispr_result, wispr);
+                               wispr_result, NULL, wispr);
 
-               return FALSE;
+               return false;
        }
 
 done:
        g_main_loop_quit(main_loop);
 
-       return FALSE;
+       return false;
 }
 
 static gboolean execute_login(gpointer user_data)
@@ -598,7 +615,7 @@ static gboolean execute_login(gpointer user_data)
        return FALSE;
 }
 
-static gboolean option_debug = FALSE;
+static bool option_debug = false;
 static gchar *option_nameserver = NULL;
 static gchar *option_username = NULL;
 static gchar *option_password = NULL;
@@ -629,8 +646,8 @@ int main(int argc, char *argv[])
        context = g_option_context_new(NULL);
        g_option_context_add_main_entries(context, options, NULL);
 
-       if (g_option_context_parse(context, &argc, &argv, &error) == FALSE) {
-               if (error != NULL) {
+       if (!g_option_context_parse(context, &argc, &argv, &error)) {
+               if (error) {
                        g_printerr("%s\n", error->message);
                        g_error_free(error);
                } else
@@ -644,17 +661,17 @@ int main(int argc, char *argv[])
        wispr_msg_init(&wispr.msg);
 
        wispr.web = g_web_new(index);
-       if (wispr.web == NULL) {
+       if (!wispr.web) {
                fprintf(stderr, "Failed to create web service\n");
                return 1;
        }
 
-       if (option_debug == TRUE)
+       if (option_debug)
                g_web_set_debug(wispr.web, web_debug, "WEB");
 
        main_loop = g_main_loop_new(NULL, FALSE);
 
-       if (option_nameserver != NULL) {
+       if (option_nameserver) {
                g_web_add_nameserver(wispr.web, option_nameserver);
                g_free(option_nameserver);
        }
@@ -663,7 +680,7 @@ int main(int argc, char *argv[])
        g_web_set_user_agent(wispr.web, "SmartClient/%s wispr", VERSION);
        g_web_set_close_connection(wispr.web, TRUE);
 
-       if (option_url == NULL)
+       if (!option_url)
                option_url = g_strdup(DEFAULT_URL);
 
        wispr.username = option_username;
@@ -677,7 +694,7 @@ int main(int argc, char *argv[])
                                                parser_callback, &wispr);
 
        wispr.request = g_web_request_get(wispr.web, option_url,
-                                                       wispr_result, &wispr);
+                       wispr_result, wispr_route, &wispr);
 
        if (wispr.request == 0) {
                fprintf(stderr, "Failed to start request\n");