*really* do A/AAAA
authorPhilipp Tölke <toelke@in.tum.de>
Wed, 26 Oct 2011 12:30:41 +0000 (12:30 +0000)
committerPhilipp Tölke <toelke@in.tum.de>
Wed, 26 Oct 2011 12:30:41 +0000 (12:30 +0000)
src/vpn/gnunet-service-dns.c

index 7009409041d340ffa1aadee9e50975db6dae4dfb..7e649d88b2f532dab4ca17e7e0e54261bf8d32ff 100644 (file)
@@ -97,6 +97,7 @@ static struct
   uint16_t local_port;
   char *name;
   uint8_t namelen;
+  uint16_t qtype;
 } query_states[UINT16_MAX+1];
 
 /**
@@ -529,14 +530,14 @@ receive_mesh_answer (void *cls
       (struct dns_record_line *) (dpkt->data +
                                   (query_states[dns->s.id].namelen) +
                                   sizeof (struct dns_query_line) + 2);
-  if (16 == answer->pkt.addrsize)
+  if (ntohs(28) == query_states[dns->s.id].qtype)
   {
     answer->pkt.subtype = GNUNET_DNS_ANSWER_TYPE_REMOTE_AAAA;
     dque->type = htons (28);    /* AAAA */
     drec_data->type = htons (28);       /* AAAA */
     drec_data->data_len = htons (16);
   }
-  else if (4 == answer->pkt.addrsize)
+  if (ntohs(1) == query_states[dns->s.id].qtype)
   {
     answer->pkt.subtype = GNUNET_DNS_ANSWER_TYPE_REMOTE_A;
     dque->type = htons (1);     /* A */
@@ -819,6 +820,17 @@ receive_query (void *cls
   memcpy (query_states[dns->s.id].name, dns->data,
           query_states[dns->s.id].namelen);
 
+  int i;
+  for (i= 0; i < pdns->s.qdcount; i++)
+    {
+      if (pdns->queries[i]->qtype == htons(28) ||
+          pdns->queries[i]->qtype == htons(28))
+        {
+          query_states[dns->s.id].qtype = pdns->queries[i]->qtype;
+            break;
+        }
+    }
+
   /* The query is for a .gnunet-address */
   if (pdns->queries[0]->namelen > 9 &&
       0 == strncmp (pdns->queries[0]->name + (pdns->queries[0]->namelen - 9),