diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-06-21 13:38:31 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-06-21 13:38:31 +0000 |
commit | ce2b4437f0794a3ca68eddb013e801e3b95bd139 (patch) | |
tree | e8757dd9b2a42c84ea54429b2654eb4648245bef /src/dns | |
parent | 6cffc5dd6bdf02018052c1c5bf195bcef4354f6f (diff) | |
download | gnunet-ce2b4437f0794a3ca68eddb013e801e3b95bd139.tar.gz gnunet-ce2b4437f0794a3ca68eddb013e801e3b95bd139.zip |
-finishing SRV implementation (#2268)
Diffstat (limited to 'src/dns')
-rw-r--r-- | src/dns/dnsparser.c | 6 | ||||
-rw-r--r-- | 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, | |||
397 | return GNUNET_SYSERR; | 397 | return GNUNET_SYSERR; |
398 | return GNUNET_OK; | 398 | return GNUNET_OK; |
399 | case GNUNET_DNSPARSER_TYPE_SRV: | 399 | case GNUNET_DNSPARSER_TYPE_SRV: |
400 | if ('_' != *r->data.hostname) | 400 | if ('_' != *r->name) |
401 | return GNUNET_SYSERR; /* all valid srv names must start with "_" */ | 401 | return GNUNET_SYSERR; /* all valid srv names must start with "_" */ |
402 | if (NULL == strstr (r->data.hostname, "._")) | 402 | if (NULL == strstr (r->name, "._")) |
403 | return GNUNET_SYSERR; /* necessary string from "._$PROTO" not present */ | 403 | return GNUNET_SYSERR; /* necessary string from "._$PROTO" not present */ |
404 | old_off = *off; | 404 | old_off = *off; |
405 | if (*off + sizeof (struct srv_data) > udp_payload_length) | 405 | if (*off + sizeof (struct srv_data) > udp_payload_length) |
@@ -412,7 +412,7 @@ parse_record (const char *udp_payload, | |||
412 | r->data.srv->port = ntohs (srv.port); | 412 | r->data.srv->port = ntohs (srv.port); |
413 | /* parse 'data.hostname' into components, which are | 413 | /* parse 'data.hostname' into components, which are |
414 | "_$SERVICE._$PROTO.$DOMAIN_NAME" */ | 414 | "_$SERVICE._$PROTO.$DOMAIN_NAME" */ |
415 | ndup = GNUNET_strdup (r->data.hostname); | 415 | ndup = GNUNET_strdup (r->name); |
416 | tok = strtok (ndup, "."); | 416 | tok = strtok (ndup, "."); |
417 | GNUNET_assert ('_' == *tok); | 417 | GNUNET_assert ('_' == *tok); |
418 | r->data.srv->service = GNUNET_strdup (&tok[1]); | 418 | 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) | |||
75 | case GNUNET_DNSPARSER_TYPE_MX: return "MX"; | 75 | case GNUNET_DNSPARSER_TYPE_MX: return "MX"; |
76 | case GNUNET_DNSPARSER_TYPE_TXT: return "TXT"; | 76 | case GNUNET_DNSPARSER_TYPE_TXT: return "TXT"; |
77 | case GNUNET_DNSPARSER_TYPE_AAAA: return "AAAA"; | 77 | case GNUNET_DNSPARSER_TYPE_AAAA: return "AAAA"; |
78 | case GNUNET_DNSPARSER_TYPE_SRV: return "SRV"; | ||
78 | } | 79 | } |
79 | GNUNET_snprintf (buf, sizeof (buf), "%u", (unsigned int) type); | 80 | GNUNET_snprintf (buf, sizeof (buf), "%u", (unsigned int) type); |
80 | return buf; | 81 | return buf; |
@@ -151,7 +152,7 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) | |||
151 | format = record->data.hostname; | 152 | format = record->data.hostname; |
152 | break; | 153 | break; |
153 | case GNUNET_DNSPARSER_TYPE_SOA: | 154 | case GNUNET_DNSPARSER_TYPE_SOA: |
154 | if (record->data.soa == NULL) | 155 | if (NULL == record->data.soa) |
155 | format = "<invalid>"; | 156 | format = "<invalid>"; |
156 | else | 157 | else |
157 | { | 158 | { |
@@ -179,6 +180,23 @@ display_record (const struct GNUNET_DNSPARSER_Record *record) | |||
179 | format = tmp; | 180 | format = tmp; |
180 | } | 181 | } |
181 | break; | 182 | break; |
183 | case GNUNET_DNSPARSER_TYPE_SRV: | ||
184 | if (NULL == record->data.srv) | ||
185 | format = "<invalid>"; | ||
186 | else | ||
187 | { | ||
188 | GNUNET_asprintf (&tmp, | ||
189 | "service: %s, protocol: %s, domain_name = %s, priority %u, weight = %s, port = %u, target = %s", | ||
190 | record->data.srv->service, | ||
191 | record->data.srv->proto, | ||
192 | record->data.srv->domain_name, | ||
193 | (unsigned int) record->data.srv->priority, | ||
194 | (unsigned int) record->data.srv->weight, | ||
195 | (unsigned int) record->data.srv->port, | ||
196 | record->data.srv->target); | ||
197 | format = tmp; | ||
198 | } | ||
199 | break; | ||
182 | case GNUNET_DNSPARSER_TYPE_TXT: | 200 | case GNUNET_DNSPARSER_TYPE_TXT: |
183 | GNUNET_asprintf (&tmp, | 201 | GNUNET_asprintf (&tmp, |
184 | "%.*s", | 202 | "%.*s", |