aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Tölke <toelke@in.tum.de>2010-10-05 18:20:19 +0000
committerPhilipp Tölke <toelke@in.tum.de>2010-10-05 18:20:19 +0000
commitbd4b7b43485ed8cf1817f41cd8793885a3a5b5c5 (patch)
treee6dee94ccfab6c038fa514cb435d17aead9625f0 /src
parent1ec9a4ce4e00da8e877d6af343b7fed346765392 (diff)
downloadgnunet-bd4b7b43485ed8cf1817f41cd8793885a3a5b5c5.tar.gz
gnunet-bd4b7b43485ed8cf1817f41cd8793885a3a5b5c5.zip
split the dns-datastructure
Diffstat (limited to 'src')
-rw-r--r--src/vpn/gnunet-service-dns.c18
-rw-r--r--src/vpn/gnunet-vpn-packet.h14
-rw-r--r--src/vpn/gnunet-vpn-pretty-print.c16
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
64struct dns_pkt { 64struct 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
88struct dns_pkt {
89 struct dns_static s;
86 unsigned char data[1]; 90 unsigned char data[1];
87}; 91};
88 92
93struct 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
89struct dns_query { 101struct 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
263void pkt_printf_dns(struct dns_pkt* pkt) {{{ 263void 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);