device: Combine two if statements with identical outcome
[framework/connectivity/connman.git] / tools / resolv-test.c
index e8dba36..9867a4b 100644 (file)
@@ -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
 #endif
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <signal.h>
 
-#include <gresolv/gresolv.h>
+#include <gweb/gresolv.h>
 
-static GMainLoop *main_loop = NULL;
+static GTimer *timer;
+
+static GMainLoop *main_loop;
 
 static void resolv_debug(const char *str, void *data)
 {
@@ -41,12 +44,41 @@ static void sig_term(int sig)
        g_main_loop_quit(main_loop);
 }
 
+static const char *status2str(GResolvResultStatus status)
+{
+       switch (status) {
+       case G_RESOLV_RESULT_STATUS_SUCCESS:
+               return "success";
+       case G_RESOLV_RESULT_STATUS_ERROR:
+               return "error";
+       case G_RESOLV_RESULT_STATUS_NO_RESPONSE:
+               return "no response";
+       case G_RESOLV_RESULT_STATUS_FORMAT_ERROR:
+               return "format error";
+       case G_RESOLV_RESULT_STATUS_SERVER_FAILURE:
+               return "server failure";
+       case G_RESOLV_RESULT_STATUS_NAME_ERROR:
+               return "name error";
+       case G_RESOLV_RESULT_STATUS_NOT_IMPLEMENTED:
+               return "not implemented";
+       case G_RESOLV_RESULT_STATUS_REFUSED:
+               return "refused";
+       }
+
+       return NULL;
+}
+
 static void resolv_result(GResolvResultStatus status,
                                        char **results, gpointer user_data)
 {
+       gdouble elapsed;
        int i;
 
-       g_print("status: %d\n", status);
+       elapsed = g_timer_elapsed(timer, NULL);
+
+       g_print("elapse: %f seconds\n", elapsed);
+
+       g_print("status: %s\n", status2str(status));
 
        if (results != NULL) {
                for (i = 0; results[i]; i++)
@@ -56,12 +88,36 @@ static void resolv_result(GResolvResultStatus status,
        g_main_loop_quit(main_loop);
 }
 
+static gboolean option_debug = FALSE;
+
+static GOptionEntry options[] = {
+       { "debug", 'd', 0, G_OPTION_ARG_NONE, &option_debug,
+                                       "Enable debug output" },
+       { NULL },
+};
+
 int main(int argc, char *argv[])
 {
+       GOptionContext *context;
+       GError *error = NULL;
        struct sigaction sa;
        GResolv *resolv;
        int index = 0;
 
+       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) {
+                       g_printerr("%s\n", error->message);
+                       g_error_free(error);
+               } else
+                       g_printerr("An unknown error occurred\n");
+               exit(1);
+       }
+
+       g_option_context_free(context);
+
        if (argc < 2) {
                printf("missing argument\n");
                return 1;
@@ -73,7 +129,8 @@ int main(int argc, char *argv[])
                return 1;
        }
 
-       g_resolv_set_debug(resolv, resolv_debug, "RESOLV");
+       if (option_debug == TRUE)
+               g_resolv_set_debug(resolv, resolv_debug, "RESOLV");
 
        main_loop = g_main_loop_new(NULL, FALSE);
 
@@ -82,10 +139,15 @@ int main(int argc, char *argv[])
 
                for (i = 2; i < argc; i++)
                        g_resolv_add_nameserver(resolv, argv[i], 53, 0);
-       } else
-               g_resolv_add_nameserver(resolv, "127.0.0.1", 53, 0);
+       }
 
-       g_resolv_lookup_hostname(resolv, argv[1], resolv_result, NULL);
+       timer = g_timer_new();
+
+       if (g_resolv_lookup_hostname(resolv, argv[1],
+                                       resolv_result, NULL) == 0) {
+               printf("failed to start lookup\n");
+               return 1;
+       }
 
        memset(&sa, 0, sizeof(sa));
        sa.sa_handler = sig_term;
@@ -94,6 +156,8 @@ int main(int argc, char *argv[])
 
        g_main_loop_run(main_loop);
 
+       g_timer_destroy(timer);
+
        g_resolv_unref(resolv);
 
        g_main_loop_unref(main_loop);