tools: Add WISPr route request debug printouts
[platform/upstream/connman.git] / tools / wispr.c
index a0002ba..b140506 100644 (file)
@@ -23,6 +23,7 @@
 #include <config.h>
 #endif
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <fcntl.h>
 #include <unistd.h>
@@ -30,6 +31,7 @@
 #include <string.h>
 #include <signal.h>
 #include <termios.h>
+#include <netdb.h>
 
 #include <gweb/gweb.h>
 
@@ -307,10 +309,14 @@ struct user_input_data {
 static void user_callback(struct user_input_data *data)
 {
        char *value;
-       int len;
 
-       if (data->hidden == TRUE)
+       if (data->hidden == TRUE) {
+               ssize_t len;
+
                len = write(data->fd, "\n", 1);
+               if (len < 0)
+                       return;
+       }
 
        tcsetattr(data->fd, TCSADRAIN, &data->saved_termios);
 
@@ -358,7 +364,7 @@ static gboolean user_input(const char *label, gboolean hidden,
        struct termios new_termios;
        GIOChannel *channel;
        guint watch;
-       int len;
+       ssize_t len;
 
        data = g_try_new0(struct user_input_data, 1);
        if (data == NULL)
@@ -369,7 +375,7 @@ static gboolean user_input(const char *label, gboolean hidden,
        data->user_data = user_data;
        data->hidden = hidden;
 
-       data->fd = open("/dev/tty", O_RDWR | O_NOCTTY);
+       data->fd = open("/dev/tty", O_RDWR | O_NOCTTY | O_CLOEXEC);
        if (data->fd < 0)
                goto error;
 
@@ -398,7 +404,12 @@ static gboolean user_input(const char *label, gboolean hidden,
                goto error;
 
        len = write(data->fd, label, strlen(label));
+       if (len < 0)
+               goto error;
+
        len = write(data->fd, ": ", 2);
+       if (len < 0)
+               goto error;
 
        return TRUE;
 
@@ -465,6 +476,24 @@ static gboolean wispr_input(const guint8 **data, gsize *length,
        return FALSE;
 }
 
+static gboolean 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)
 {
        struct wispr_session *wispr = user_data;
@@ -505,7 +534,7 @@ 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, wispr_route, wispr);
 
                return FALSE;
        }
@@ -565,7 +594,7 @@ 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;
        }
@@ -668,7 +697,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");