X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdns%2Fgnunet-dns-monitor.c;h=fb5c768ac2a8ab37a43a6b4b1d3a12599a8d57aa;hb=f9d80e03e9eb5d7956d60b8b7db2c36fd0be7b9e;hp=9e86f9c2dac35dafa6d58143b65ef92693cfc174;hpb=2f26ab4c1a43a754fbb1d2cc3e27e82db272f81e;p=oweals%2Fgnunet.git diff --git a/src/dns/gnunet-dns-monitor.c b/src/dns/gnunet-dns-monitor.c index 9e86f9c2d..fb5c768ac 100644 --- a/src/dns/gnunet-dns-monitor.c +++ b/src/dns/gnunet-dns-monitor.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2011 Christian Grothoff (and other contributing authors) + Copyright (C) 2011 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -26,7 +26,7 @@ #include "platform.h" #include "gnunet_util_lib.h" -#include "gnunet_dns_service-new.h" +#include "gnunet_dns_service.h" #include "gnunet_dnsparser_lib.h" /** @@ -52,7 +52,7 @@ static int ret; /** * Selected level of verbosity. */ -static int verbosity; +static unsigned int verbosity; /** @@ -75,6 +75,7 @@ get_type (uint16_t type) case GNUNET_DNSPARSER_TYPE_MX: return "MX"; case GNUNET_DNSPARSER_TYPE_TXT: return "TXT"; case GNUNET_DNSPARSER_TYPE_AAAA: return "AAAA"; + case GNUNET_DNSPARSER_TYPE_SRV: return "SRV"; } GNUNET_snprintf (buf, sizeof (buf), "%u", (unsigned int) type); return buf; @@ -93,9 +94,9 @@ get_class (uint16_t class) static char buf[6]; switch (class) { - case GNUNET_DNSPARSER_CLASS_INTERNET: return "IN"; - case GNUNET_DNSPARSER_CLASS_CHAOS: return "CHAOS"; - case GNUNET_DNSPARSER_CLASS_HESIOD: return "HESIOD"; + case GNUNET_TUN_DNS_CLASS_INTERNET: return "IN"; + case GNUNET_TUN_DNS_CLASS_CHAOS: return "CHAOS"; + case GNUNET_TUN_DNS_CLASS_HESIOD: return "HESIOD"; } GNUNET_snprintf (buf, sizeof (buf), "%u", (unsigned int) class); return buf; @@ -112,16 +113,16 @@ display_query (const struct GNUNET_DNSPARSER_Query *query) { fprintf (stdout, "\t\t%s %s: %s\n", - get_class (query->class), + get_class (query->dns_traffic_class), get_type (query->type), query->name); } /** - * Output the given DNS query to stdout. + * Output the given DNS record to stdout. * - * @param query query to display. + * @param record record to display. */ static void display_record (const struct GNUNET_DNSPARSER_Record *record) @@ -129,7 +130,7 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) const char *format; char buf[INET6_ADDRSTRLEN]; char *tmp; - + tmp = NULL; switch (record->type) { @@ -151,7 +152,7 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) format = record->data.hostname; break; case GNUNET_DNSPARSER_TYPE_SOA: - if (record->data.soa == NULL) + if (NULL == record->data.soa) format = ""; else { @@ -163,7 +164,7 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) (unsigned int) record->data.soa->refresh, (unsigned int) record->data.soa->retry, (unsigned int) record->data.soa->expire, - (unsigned int) record->data.soa->minimum_ttl); + (unsigned int) record->data.soa->minimum_ttl); format = tmp; } break; @@ -179,6 +180,20 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) format = tmp; } break; + case GNUNET_DNSPARSER_TYPE_SRV: + if (NULL == record->data.srv) + format = ""; + else + { + GNUNET_asprintf (&tmp, + "priority %u, weight = %s, port = %u, target = %s", + (unsigned int) record->data.srv->priority, + (unsigned int) record->data.srv->weight, + (unsigned int) record->data.srv->port, + record->data.srv->target); + format = tmp; + } + break; case GNUNET_DNSPARSER_TYPE_TXT: GNUNET_asprintf (&tmp, "%.*s", @@ -192,11 +207,11 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) } fprintf (stdout, "\t\t%s %s: %s = %s (%u s)\n", - get_class (record->class), + get_class (record->dns_traffic_class), get_type (record->type), record->name, format, - (unsigned int) (GNUNET_TIME_absolute_get_remaining (record->expiration_time).rel_value / 1000)); + (unsigned int) (GNUNET_TIME_absolute_get_remaining (record->expiration_time).rel_value_us / 1000LL / 1000LL)); GNUNET_free_non_null (tmp); } @@ -224,7 +239,7 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) * @param request_length number of bytes in request * @param request udp payload of the DNS request */ -static void +static void display_request (void *cls, struct GNUNET_DNS_RequestHandle *rh, size_t request_length, @@ -266,13 +281,13 @@ display_request (void *cls, p->flags.authenticated_data ? "AD " : "", p->flags.recursion_available ? "RA " : "", return_codes[p->flags.return_code & 15], - op_codes[p->flags.opcode & 15]); + op_codes[p->flags.opcode & 15]); if (p->num_queries > 0) fprintf (stdout, "\tQueries:\n"); for (i=0;inum_queries;i++) display_query (&p->queries[i]); - + if (p->num_answers > 0) fprintf (stdout, "\tAnswers:\n"); @@ -288,7 +303,7 @@ display_request (void *cls, * Shutdown. */ static void -do_disconnect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +do_disconnect (void *cls) { if (NULL != handle) { @@ -320,33 +335,42 @@ run (void *cls, char *const *args, const char *cfgfile, if (outbound_only) flags |= GNUNET_DNS_FLAG_RESPONSE_MONITOR; handle = - GNUNET_DNS_connect (cfg, + GNUNET_DNS_connect (cfg, flags, &display_request, NULL); - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, - &do_disconnect, NULL); + GNUNET_SCHEDULER_add_shutdown (&do_disconnect, NULL); } int main (int argc, char *const *argv) { - static const struct GNUNET_GETOPT_CommandLineOption options[] = { - {'i', "inbound-only", NULL, - gettext_noop ("only monitor DNS queries"), - 0, &GNUNET_GETOPT_set_one, &inbound_only}, - {'o', "outbound-only", NULL, - gettext_noop ("only monitor DNS replies"), - 0, &GNUNET_GETOPT_set_one, &outbound_only}, - GNUNET_GETOPT_OPTION_VERBOSE (&verbosity), + struct GNUNET_GETOPT_CommandLineOption options[] = { + + GNUNET_GETOPT_option_flag ('i', + "inbound-only", + gettext_noop ("only monitor DNS queries"), + &inbound_only), + + GNUNET_GETOPT_option_flag ('o', + "outbound-only", + gettext_noop ("only monitor DNS queries"), + &outbound_only), + + GNUNET_GETOPT_option_verbose (&verbosity), GNUNET_GETOPT_OPTION_END }; - return (GNUNET_OK == - GNUNET_PROGRAM_run (argc, argv, "gnunet-dns-monitor", - gettext_noop - ("Monitor DNS queries."), options, - &run, NULL)) ? ret : 1; + + if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) + return 2; + ret = (GNUNET_OK == + GNUNET_PROGRAM_run (argc, argv, "gnunet-dns-monitor", + gettext_noop + ("Monitor DNS queries."), options, + &run, NULL)) ? ret : 1; + GNUNET_free ((void*) argv); + return ret; }