From ce2b4437f0794a3ca68eddb013e801e3b95bd139 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 21 Jun 2012 13:38:31 +0000 Subject: [PATCH] -finishing SRV implementation (#2268) --- src/dns/dnsparser.c | 6 +++--- src/dns/gnunet-dns-monitor.c | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/dns/dnsparser.c b/src/dns/dnsparser.c index c6a60cd44..8b8cd22fd 100644 --- a/src/dns/dnsparser.c +++ b/src/dns/dnsparser.c @@ -397,9 +397,9 @@ parse_record (const char *udp_payload, return GNUNET_SYSERR; return GNUNET_OK; case GNUNET_DNSPARSER_TYPE_SRV: - if ('_' != *r->data.hostname) + if ('_' != *r->name) return GNUNET_SYSERR; /* all valid srv names must start with "_" */ - if (NULL == strstr (r->data.hostname, "._")) + if (NULL == strstr (r->name, "._")) return GNUNET_SYSERR; /* necessary string from "._$PROTO" not present */ old_off = *off; if (*off + sizeof (struct srv_data) > udp_payload_length) @@ -412,7 +412,7 @@ parse_record (const char *udp_payload, r->data.srv->port = ntohs (srv.port); /* parse 'data.hostname' into components, which are "_$SERVICE._$PROTO.$DOMAIN_NAME" */ - ndup = GNUNET_strdup (r->data.hostname); + ndup = GNUNET_strdup (r->name); tok = strtok (ndup, "."); GNUNET_assert ('_' == *tok); r->data.srv->service = GNUNET_strdup (&tok[1]); diff --git a/src/dns/gnunet-dns-monitor.c b/src/dns/gnunet-dns-monitor.c index 2a05efdee..8f05403fb 100644 --- a/src/dns/gnunet-dns-monitor.c +++ b/src/dns/gnunet-dns-monitor.c @@ -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; @@ -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 { @@ -179,6 +180,23 @@ 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, + "service: %s, protocol: %s, domain_name = %s, priority %u, weight = %s, port = %u, target = %s", + record->data.srv->service, + record->data.srv->proto, + record->data.srv->domain_name, + (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", -- 2.25.1