aboutsummaryrefslogtreecommitdiff
path: root/src/dns
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-06-21 13:38:31 +0000
committerChristian Grothoff <christian@grothoff.org>2012-06-21 13:38:31 +0000
commitce2b4437f0794a3ca68eddb013e801e3b95bd139 (patch)
treee8757dd9b2a42c84ea54429b2654eb4648245bef /src/dns
parent6cffc5dd6bdf02018052c1c5bf195bcef4354f6f (diff)
downloadgnunet-ce2b4437f0794a3ca68eddb013e801e3b95bd139.tar.gz
gnunet-ce2b4437f0794a3ca68eddb013e801e3b95bd139.zip
-finishing SRV implementation (#2268)
Diffstat (limited to 'src/dns')
-rw-r--r--src/dns/dnsparser.c6
-rw-r--r--src/dns/gnunet-dns-monitor.c20
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",