diff options
author | Philipp Tölke <toelke@in.tum.de> | 2011-10-26 12:30:41 +0000 |
---|---|---|
committer | Philipp Tölke <toelke@in.tum.de> | 2011-10-26 12:30:41 +0000 |
commit | a5eca485466421a58547811362961eb91f1ca20a (patch) | |
tree | 0c2d3b4b1d27f9fb843f803d998b781568fb2a83 /src/vpn | |
parent | a7624bca11271b46efadd7c7ea989aec9c673a90 (diff) | |
download | gnunet-a5eca485466421a58547811362961eb91f1ca20a.tar.gz gnunet-a5eca485466421a58547811362961eb91f1ca20a.zip |
*really* do A/AAAA
Diffstat (limited to 'src/vpn')
-rw-r--r-- | src/vpn/gnunet-service-dns.c | 16 |
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), |