diff options
author | Philipp Tölke <toelke@in.tum.de> | 2010-10-05 18:20:19 +0000 |
---|---|---|
committer | Philipp Tölke <toelke@in.tum.de> | 2010-10-05 18:20:19 +0000 |
commit | bd4b7b43485ed8cf1817f41cd8793885a3a5b5c5 (patch) | |
tree | e6dee94ccfab6c038fa514cb435d17aead9625f0 /src | |
parent | 1ec9a4ce4e00da8e877d6af343b7fed346765392 (diff) | |
download | gnunet-bd4b7b43485ed8cf1817f41cd8793885a3a5b5c5.tar.gz gnunet-bd4b7b43485ed8cf1817f41cd8793885a3a5b5c5.zip |
split the dns-datastructure
Diffstat (limited to 'src')
-rw-r--r-- | src/vpn/gnunet-service-dns.c | 18 | ||||
-rw-r--r-- | src/vpn/gnunet-vpn-packet.h | 14 | ||||
-rw-r--r-- | src/vpn/gnunet-vpn-pretty-print.c | 16 |
3 files changed, 30 insertions, 18 deletions
diff --git a/src/vpn/gnunet-service-dns.c b/src/vpn/gnunet-service-dns.c index e40b2c5c4..a3322f7ea 100644 --- a/src/vpn/gnunet-service-dns.c +++ b/src/vpn/gnunet-service-dns.c | |||
@@ -79,10 +79,10 @@ void receive_query(void *cls, struct GNUNET_SERVER_Client *client, const struct | |||
79 | dest.sin_port = htons(53); | 79 | dest.sin_port = htons(53); |
80 | dest.sin_addr.s_addr = pkt->orig_to; | 80 | dest.sin_addr.s_addr = pkt->orig_to; |
81 | 81 | ||
82 | query_states[dns->id].valid = 1; | 82 | query_states[dns->s.id].valid = 1; |
83 | query_states[dns->id].client = client; | 83 | query_states[dns->s.id].client = client; |
84 | query_states[dns->id].local_ip = pkt->orig_from; | 84 | query_states[dns->s.id].local_ip = pkt->orig_from; |
85 | query_states[dns->id].local_port = pkt->src_port; | 85 | query_states[dns->s.id].local_port = pkt->src_port; |
86 | 86 | ||
87 | /* int r = */ GNUNET_NETWORK_socket_sendto(mycls.dnsout, dns, ntohs(pkt->hdr.size) - sizeof(struct query_packet) + 1, (struct sockaddr*) &dest, sizeof dest); | 87 | /* int r = */ GNUNET_NETWORK_socket_sendto(mycls.dnsout, dns, ntohs(pkt->hdr.size) - sizeof(struct query_packet) + 1, (struct sockaddr*) &dest, sizeof dest); |
88 | 88 | ||
@@ -124,21 +124,21 @@ static void read_response (void *cls, const struct GNUNET_SCHEDULER_TaskContext | |||
124 | 124 | ||
125 | /* if (r < 0) TODO */ | 125 | /* if (r < 0) TODO */ |
126 | 126 | ||
127 | if (query_states[dns->id].valid == 1) { | 127 | if (query_states[dns->s.id].valid == 1) { |
128 | query_states[dns->id].valid = 0; | 128 | query_states[dns->s.id].valid = 0; |
129 | 129 | ||
130 | size_t len = sizeof(struct answer_packet) + r - 1; /* 1 for the unsigned char data[1]; */ | 130 | size_t len = sizeof(struct answer_packet) + r - 1; /* 1 for the unsigned char data[1]; */ |
131 | struct answer_packet_list* answer = GNUNET_malloc(len + 2*sizeof(struct answer_packet_list*)); | 131 | struct answer_packet_list* answer = GNUNET_malloc(len + 2*sizeof(struct answer_packet_list*)); |
132 | answer->pkt.hdr.type = htons(GNUNET_MESSAGE_TYPE_LOCAL_RESPONSE_DNS); | 132 | answer->pkt.hdr.type = htons(GNUNET_MESSAGE_TYPE_LOCAL_RESPONSE_DNS); |
133 | answer->pkt.hdr.size = htons(len); | 133 | answer->pkt.hdr.size = htons(len); |
134 | answer->pkt.from = addr.sin_addr.s_addr; | 134 | answer->pkt.from = addr.sin_addr.s_addr; |
135 | answer->pkt.to = query_states[dns->id].local_ip; | 135 | answer->pkt.to = query_states[dns->s.id].local_ip; |
136 | answer->pkt.dst_port = query_states[dns->id].local_port; | 136 | answer->pkt.dst_port = query_states[dns->s.id].local_port; |
137 | memcpy(answer->pkt.data, buf, r); | 137 | memcpy(answer->pkt.data, buf, r); |
138 | 138 | ||
139 | GNUNET_CONTAINER_DLL_insert_after(mycls.head, mycls.tail, mycls.tail, answer); | 139 | GNUNET_CONTAINER_DLL_insert_after(mycls.head, mycls.tail, mycls.tail, answer); |
140 | 140 | ||
141 | /* struct GNUNET_CONNECTION_TransmitHandle* th = */ GNUNET_SERVER_notify_transmit_ready(query_states[dns->id].client, len, GNUNET_TIME_UNIT_FOREVER_REL, &send_answer, query_states[dns->id].client); | 141 | /* struct GNUNET_CONNECTION_TransmitHandle* th = */ GNUNET_SERVER_notify_transmit_ready(query_states[dns->s.id].client, len, GNUNET_TIME_UNIT_FOREVER_REL, &send_answer, query_states[dns->s.id].client); |
142 | } | 142 | } |
143 | 143 | ||
144 | GNUNET_SCHEDULER_add_read_net(mycls.sched, GNUNET_TIME_UNIT_FOREVER_REL, mycls.dnsout, &read_response, NULL); | 144 | GNUNET_SCHEDULER_add_read_net(mycls.sched, GNUNET_TIME_UNIT_FOREVER_REL, mycls.dnsout, &read_response, NULL); |
diff --git a/src/vpn/gnunet-vpn-packet.h b/src/vpn/gnunet-vpn-packet.h index 7eb1afe8c..0659215cb 100644 --- a/src/vpn/gnunet-vpn-packet.h +++ b/src/vpn/gnunet-vpn-packet.h | |||
@@ -61,7 +61,7 @@ struct udp_pkt { | |||
61 | }; | 61 | }; |
62 | 62 | ||
63 | // DNS-Stuff | 63 | // DNS-Stuff |
64 | struct dns_pkt { | 64 | struct dns_static { |
65 | unsigned short id GNUNET_PACKED; | 65 | unsigned short id GNUNET_PACKED; |
66 | 66 | ||
67 | unsigned rd:1 GNUNET_PACKED; // recursion desired (client -> server) | 67 | unsigned rd:1 GNUNET_PACKED; // recursion desired (client -> server) |
@@ -83,9 +83,21 @@ struct dns_pkt { | |||
83 | unsigned short ancount GNUNET_PACKED; // number of answers | 83 | unsigned short ancount GNUNET_PACKED; // number of answers |
84 | unsigned short nscount GNUNET_PACKED; // number of authority-records | 84 | unsigned short nscount GNUNET_PACKED; // number of authority-records |
85 | unsigned short arcount GNUNET_PACKED; // number of additional records | 85 | unsigned short arcount GNUNET_PACKED; // number of additional records |
86 | }; | ||
87 | |||
88 | struct dns_pkt { | ||
89 | struct dns_static s; | ||
86 | unsigned char data[1]; | 90 | unsigned char data[1]; |
87 | }; | 91 | }; |
88 | 92 | ||
93 | struct dns_pkt_parsed { | ||
94 | struct dns_static s; | ||
95 | struct dns_query* queries; | ||
96 | struct dns_record* answers; | ||
97 | struct dns_record* nameservers; | ||
98 | struct dns_record* additional; | ||
99 | }; | ||
100 | |||
89 | struct dns_query { | 101 | struct dns_query { |
90 | unsigned char* name; | 102 | unsigned char* name; |
91 | unsigned short qtype; | 103 | unsigned short qtype; |
diff --git a/src/vpn/gnunet-vpn-pretty-print.c b/src/vpn/gnunet-vpn-pretty-print.c index f620e84fa..e8fe4c722 100644 --- a/src/vpn/gnunet-vpn-pretty-print.c +++ b/src/vpn/gnunet-vpn-pretty-print.c | |||
@@ -262,14 +262,14 @@ static char* dns_classes(short class) { /* {{{ */ | |||
262 | 262 | ||
263 | void pkt_printf_dns(struct dns_pkt* pkt) {{{ | 263 | void pkt_printf_dns(struct dns_pkt* pkt) {{{ |
264 | printf("DNS-Packet:\n"); | 264 | printf("DNS-Packet:\n"); |
265 | printf("\tid: %d\n", ntohs(pkt->id)); | 265 | printf("\tid: %d\n", ntohs(pkt->s.id)); |
266 | printf("\t%d: %s\n", pkt->qr, pkt->qr == 0 ? "query" : "response"); | 266 | printf("\t%d: %s\n", pkt->s.qr, pkt->s.qr == 0 ? "query" : "response"); |
267 | printf("\top: %s\n", (char*[]){"query", "inverse q.", "status", "inval"}[pkt->op]); | 267 | printf("\top: %s\n", (char*[]){"query", "inverse q.", "status", "inval"}[pkt->s.op]); |
268 | printf("\trecursion is%s desired\n", pkt->rd == 0 ? " not" : ""); | 268 | printf("\trecursion is%s desired\n", pkt->s.rd == 0 ? " not" : ""); |
269 | unsigned short qdcount = ntohs(pkt->qdcount); | 269 | unsigned short qdcount = ntohs(pkt->s.qdcount); |
270 | unsigned short ancount = ntohs(pkt->ancount); | 270 | unsigned short ancount = ntohs(pkt->s.ancount); |
271 | unsigned short nscount = ntohs(pkt->nscount); | 271 | unsigned short nscount = ntohs(pkt->s.nscount); |
272 | unsigned short arcount = ntohs(pkt->arcount); | 272 | unsigned short arcount = ntohs(pkt->s.arcount); |
273 | printf("\t#qd: %d\n", qdcount); | 273 | printf("\t#qd: %d\n", qdcount); |
274 | printf("\t#an: %d\n", ancount); | 274 | printf("\t#an: %d\n", ancount); |
275 | printf("\t#ns: %d\n", nscount); | 275 | printf("\t#ns: %d\n", nscount); |