diff options
author | Philipp Tölke <toelke@in.tum.de> | 2011-09-21 08:06:55 +0000 |
---|---|---|
committer | Philipp Tölke <toelke@in.tum.de> | 2011-09-21 08:06:55 +0000 |
commit | cfdf6645607118d33149a8b7a3b66fab4cae6ff3 (patch) | |
tree | 4f395d279d98f75f7edf6ed1fa7caae25fb7bf61 /src/vpn/gnunet-service-dns.c | |
parent | 4810b4cceb07ca6a325376bfcc4e5abdb1586685 (diff) | |
download | gnunet-cfdf6645607118d33149a8b7a3b66fab4cae6ff3.tar.gz gnunet-cfdf6645607118d33149a8b7a3b66fab4cae6ff3.zip |
do not notify more than one transmit at a time
Diffstat (limited to 'src/vpn/gnunet-service-dns.c')
-rw-r--r-- | src/vpn/gnunet-service-dns.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/vpn/gnunet-service-dns.c b/src/vpn/gnunet-service-dns.c index ac81526e0..d87086ea7 100644 --- a/src/vpn/gnunet-service-dns.c +++ b/src/vpn/gnunet-service-dns.c | |||
@@ -43,6 +43,8 @@ | |||
43 | 43 | ||
44 | struct GNUNET_MESH_Handle *mesh_handle; | 44 | struct GNUNET_MESH_Handle *mesh_handle; |
45 | 45 | ||
46 | struct GNUNET_CONNECTION_TransmitHandle *server_notify; | ||
47 | |||
46 | /** | 48 | /** |
47 | * The UDP-Socket through which DNS-Resolves will be sent if they are not to be | 49 | * The UDP-Socket through which DNS-Resolves will be sent if they are not to be |
48 | * sent through gnunet. The port of this socket will not be hijacked. | 50 | * sent through gnunet. The port of this socket will not be hijacked. |
@@ -193,6 +195,7 @@ unhijack (unsigned short port) | |||
193 | static size_t | 195 | static size_t |
194 | send_answer (void *cls, size_t size, void *buf) | 196 | send_answer (void *cls, size_t size, void *buf) |
195 | { | 197 | { |
198 | server_notify = NULL; | ||
196 | struct answer_packet_list *query = head; | 199 | struct answer_packet_list *query = head; |
197 | size_t len = ntohs (query->pkt.hdr.size); | 200 | size_t len = ntohs (query->pkt.hdr.size); |
198 | 201 | ||
@@ -206,9 +209,9 @@ send_answer (void *cls, size_t size, void *buf) | |||
206 | 209 | ||
207 | /* When more data is to be sent, reschedule */ | 210 | /* When more data is to be sent, reschedule */ |
208 | if (head != NULL) | 211 | if (head != NULL) |
209 | GNUNET_SERVER_notify_transmit_ready (cls, ntohs (head->pkt.hdr.size), | 212 | server_notify = GNUNET_SERVER_notify_transmit_ready (cls, ntohs (head->pkt.hdr.size), |
210 | GNUNET_TIME_UNIT_FOREVER_REL, | 213 | GNUNET_TIME_UNIT_FOREVER_REL, |
211 | &send_answer, cls); | 214 | &send_answer, cls); |
212 | 215 | ||
213 | return len; | 216 | return len; |
214 | } | 217 | } |
@@ -231,6 +234,8 @@ mesh_send_response (void *cls, size_t size, void *buf) | |||
231 | struct GNUNET_MESH_Tunnel **tunnel = (struct GNUNET_MESH_Tunnel **) (sz + 1); | 234 | struct GNUNET_MESH_Tunnel **tunnel = (struct GNUNET_MESH_Tunnel **) (sz + 1); |
232 | struct dns_pkt *dns = (struct dns_pkt *) (tunnel + 1); | 235 | struct dns_pkt *dns = (struct dns_pkt *) (tunnel + 1); |
233 | 236 | ||
237 | GNUNET_MESH_tunnel_set_data (*tunnel, NULL); | ||
238 | |||
234 | hdr->type = htons (GNUNET_MESSAGE_TYPE_VPN_REMOTE_ANSWER_DNS); | 239 | hdr->type = htons (GNUNET_MESSAGE_TYPE_VPN_REMOTE_ANSWER_DNS); |
235 | hdr->size = htons (*sz + sizeof (struct GNUNET_MessageHeader)); | 240 | hdr->size = htons (*sz + sizeof (struct GNUNET_MessageHeader)); |
236 | 241 | ||
@@ -530,10 +535,11 @@ receive_mesh_answer (void *cls | |||
530 | 535 | ||
531 | GNUNET_CONTAINER_DLL_insert_after (head, tail, tail, answer); | 536 | GNUNET_CONTAINER_DLL_insert_after (head, tail, tail, answer); |
532 | 537 | ||
533 | GNUNET_SERVER_notify_transmit_ready (query_states[dns->s.id].client, len, | 538 | if (server_notify == NULL) |
534 | GNUNET_TIME_UNIT_FOREVER_REL, | 539 | server_notify = GNUNET_SERVER_notify_transmit_ready (query_states[dns->s.id].client, len, |
535 | &send_answer, | 540 | GNUNET_TIME_UNIT_FOREVER_REL, |
536 | query_states[dns->s.id].client); | 541 | &send_answer, |
542 | query_states[dns->s.id].client); | ||
537 | 543 | ||
538 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 544 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
539 | "Sent answer of length %d on to client, addroffset = %d\n", len, | 545 | "Sent answer of length %d on to client, addroffset = %d\n", len, |
@@ -622,9 +628,10 @@ send_rev_query (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
622 | 628 | ||
623 | GNUNET_CONTAINER_DLL_insert_after (head, tail, tail, answer); | 629 | GNUNET_CONTAINER_DLL_insert_after (head, tail, tail, answer); |
624 | 630 | ||
625 | GNUNET_SERVER_notify_transmit_ready (query_states[id].client, len, | 631 | if (server_notify == NULL) |
626 | GNUNET_TIME_UNIT_FOREVER_REL, | 632 | server_notify = GNUNET_SERVER_notify_transmit_ready (query_states[id].client, len, |
627 | &send_answer, query_states[id].client); | 633 | GNUNET_TIME_UNIT_FOREVER_REL, |
634 | &send_answer, query_states[id].client); | ||
628 | } | 635 | } |
629 | 636 | ||
630 | /** | 637 | /** |
@@ -731,9 +738,10 @@ receive_dht (void *cls, struct GNUNET_TIME_Absolute exp | |||
731 | 738 | ||
732 | GNUNET_CONTAINER_DLL_insert_after (head, tail, tail, answer); | 739 | GNUNET_CONTAINER_DLL_insert_after (head, tail, tail, answer); |
733 | 740 | ||
734 | GNUNET_SERVER_notify_transmit_ready (query_states[id].client, len, | 741 | if (server_notify == NULL) |
735 | GNUNET_TIME_UNIT_FOREVER_REL, | 742 | server_notify = GNUNET_SERVER_notify_transmit_ready (query_states[id].client, len, |
736 | &send_answer, query_states[id].client); | 743 | GNUNET_TIME_UNIT_FOREVER_REL, |
744 | &send_answer, query_states[id].client); | ||
737 | 745 | ||
738 | GNUNET_DHT_get_stop (handle); | 746 | GNUNET_DHT_get_stop (handle); |
739 | } | 747 | } |
@@ -1088,10 +1096,11 @@ read_response (void *cls | |||
1088 | 1096 | ||
1089 | GNUNET_CONTAINER_DLL_insert_after (head, tail, tail, answer); | 1097 | GNUNET_CONTAINER_DLL_insert_after (head, tail, tail, answer); |
1090 | 1098 | ||
1091 | GNUNET_SERVER_notify_transmit_ready (query_states[dns->s.id].client, | 1099 | if (server_notify == NULL) |
1092 | len, GNUNET_TIME_UNIT_FOREVER_REL, | 1100 | server_notify = GNUNET_SERVER_notify_transmit_ready (query_states[dns->s.id].client, |
1093 | &send_answer, | 1101 | len, GNUNET_TIME_UNIT_FOREVER_REL, |
1094 | query_states[dns->s.id].client); | 1102 | &send_answer, |
1103 | query_states[dns->s.id].client); | ||
1095 | } | 1104 | } |
1096 | } | 1105 | } |
1097 | } | 1106 | } |