-finishing SRV implementation (#2268)
authorChristian Grothoff <christian@grothoff.org>
Thu, 21 Jun 2012 13:38:31 +0000 (13:38 +0000)
committerChristian Grothoff <christian@grothoff.org>
Thu, 21 Jun 2012 13:38:31 +0000 (13:38 +0000)
src/dns/dnsparser.c
src/dns/gnunet-dns-monitor.c

index c6a60cd44bc31c645c6cd96ea058c2dab7af9099..8b8cd22fd3b6bcc2fb683c8ac955fb8f4934fe3c 100644 (file)
@@ -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]);
index 2a05efdeeddab4822b93177145109b1d7f7c2a8b..8f05403fbd2f4fb403d349214f03869d439ac65a 100644 (file)
@@ -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 = "<invalid>";
     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 = "<invalid>";
+    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",