aboutsummaryrefslogtreecommitdiff
path: root/src/vpn
diff options
context:
space:
mode:
authorPhilipp Tölke <toelke@in.tum.de>2011-10-26 12:30:41 +0000
committerPhilipp Tölke <toelke@in.tum.de>2011-10-26 12:30:41 +0000
commita5eca485466421a58547811362961eb91f1ca20a (patch)
tree0c2d3b4b1d27f9fb843f803d998b781568fb2a83 /src/vpn
parenta7624bca11271b46efadd7c7ea989aec9c673a90 (diff)
downloadgnunet-a5eca485466421a58547811362961eb91f1ca20a.tar.gz
gnunet-a5eca485466421a58547811362961eb91f1ca20a.zip
*really* do A/AAAA
Diffstat (limited to 'src/vpn')
-rw-r--r--src/vpn/gnunet-service-dns.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/vpn/gnunet-service-dns.c b/src/vpn/gnunet-service-dns.c
index 700940904..7e649d88b 100644
--- a/src/vpn/gnunet-service-dns.c
+++ b/src/vpn/gnunet-service-dns.c
@@ -97,6 +97,7 @@ static struct
97 uint16_t local_port; 97 uint16_t local_port;
98 char *name; 98 char *name;
99 uint8_t namelen; 99 uint8_t namelen;
100 uint16_t qtype;
100} query_states[UINT16_MAX+1]; 101} query_states[UINT16_MAX+1];
101 102
102/** 103/**
@@ -529,14 +530,14 @@ receive_mesh_answer (void *cls
529 (struct dns_record_line *) (dpkt->data + 530 (struct dns_record_line *) (dpkt->data +
530 (query_states[dns->s.id].namelen) + 531 (query_states[dns->s.id].namelen) +
531 sizeof (struct dns_query_line) + 2); 532 sizeof (struct dns_query_line) + 2);
532 if (16 == answer->pkt.addrsize) 533 if (ntohs(28) == query_states[dns->s.id].qtype)
533 { 534 {
534 answer->pkt.subtype = GNUNET_DNS_ANSWER_TYPE_REMOTE_AAAA; 535 answer->pkt.subtype = GNUNET_DNS_ANSWER_TYPE_REMOTE_AAAA;
535 dque->type = htons (28); /* AAAA */ 536 dque->type = htons (28); /* AAAA */
536 drec_data->type = htons (28); /* AAAA */ 537 drec_data->type = htons (28); /* AAAA */
537 drec_data->data_len = htons (16); 538 drec_data->data_len = htons (16);
538 } 539 }
539 else if (4 == answer->pkt.addrsize) 540 if (ntohs(1) == query_states[dns->s.id].qtype)
540 { 541 {
541 answer->pkt.subtype = GNUNET_DNS_ANSWER_TYPE_REMOTE_A; 542 answer->pkt.subtype = GNUNET_DNS_ANSWER_TYPE_REMOTE_A;
542 dque->type = htons (1); /* A */ 543 dque->type = htons (1); /* A */
@@ -819,6 +820,17 @@ receive_query (void *cls
819 memcpy (query_states[dns->s.id].name, dns->data, 820 memcpy (query_states[dns->s.id].name, dns->data,
820 query_states[dns->s.id].namelen); 821 query_states[dns->s.id].namelen);
821 822
823 int i;
824 for (i= 0; i < pdns->s.qdcount; i++)
825 {
826 if (pdns->queries[i]->qtype == htons(28) ||
827 pdns->queries[i]->qtype == htons(28))
828 {
829 query_states[dns->s.id].qtype = pdns->queries[i]->qtype;
830 break;
831 }
832 }
833
822 /* The query is for a .gnunet-address */ 834 /* The query is for a .gnunet-address */
823 if (pdns->queries[0]->namelen > 9 && 835 if (pdns->queries[0]->namelen > 9 &&
824 0 == strncmp (pdns->queries[0]->name + (pdns->queries[0]->namelen - 9), 836 0 == strncmp (pdns->queries[0]->name + (pdns->queries[0]->namelen - 9),