aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Tölke <toelke@in.tum.de>2010-11-04 17:26:56 +0000
committerPhilipp Tölke <toelke@in.tum.de>2010-11-04 17:26:56 +0000
commitb569b667c1e5596a8588ae2aa1aa533f54658fbd (patch)
treeddb380b8f526f7b8bb692ffa63fb91e407f03506
parentcdabfd952833b891f2063601da05d1ce15b3f5d1 (diff)
downloadgnunet-b569b667c1e5596a8588ae2aa1aa533f54658fbd.tar.gz
gnunet-b569b667c1e5596a8588ae2aa1aa533f54658fbd.zip
Only start the hijack if the vpn is running
-rw-r--r--src/vpn/gnunet-daemon-vpn.c26
-rw-r--r--src/vpn/gnunet-service-dns.c22
2 files changed, 28 insertions, 20 deletions
diff --git a/src/vpn/gnunet-daemon-vpn.c b/src/vpn/gnunet-daemon-vpn.c
index 7edd3c52f..566388a66 100644
--- a/src/vpn/gnunet-daemon-vpn.c
+++ b/src/vpn/gnunet-daemon-vpn.c
@@ -136,9 +136,9 @@ send_query(void* cls, size_t size, void* buf) {
136 { 136 {
137 restart_hijack = 0; 137 restart_hijack = 0;
138 /* 138 /*
139 * The message is just a header 139 * The message is just a header
140 */ 140 */
141 GNUNET_assert(sizeof(struct GNUNET_MessageHeader) >= size); 141 GNUNET_assert(sizeof(struct GNUNET_MessageHeader) <= size);
142 struct GNUNET_MessageHeader* hdr = buf; 142 struct GNUNET_MessageHeader* hdr = buf;
143 len = sizeof(struct GNUNET_MessageHeader); 143 len = sizeof(struct GNUNET_MessageHeader);
144 hdr->size = htons(len); 144 hdr->size = htons(len);
@@ -161,10 +161,14 @@ send_query(void* cls, size_t size, void* buf) {
161 /* 161 /*
162 * Check whether more data is to be sent 162 * Check whether more data is to be sent
163 */ 163 */
164 if (head != NULL || restart_hijack == 1) 164 if (head != NULL)
165 { 165 {
166 GNUNET_CLIENT_notify_transmit_ready(dns_connection, ntohs(head->pkt.hdr.size), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL); 166 GNUNET_CLIENT_notify_transmit_ready(dns_connection, ntohs(head->pkt.hdr.size), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL);
167 } 167 }
168 else if (restart_hijack == 1)
169 {
170 GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL);
171 }
168 172
169 return len; 173 return len;
170} 174}
@@ -212,6 +216,12 @@ start_helper_and_schedule(void *cls,
212 GNUNET_DISK_pipe_close_end(helper_out, GNUNET_DISK_PIPE_END_WRITE); 216 GNUNET_DISK_pipe_close_end(helper_out, GNUNET_DISK_PIPE_END_WRITE);
213 GNUNET_DISK_pipe_close_end(helper_in, GNUNET_DISK_PIPE_END_READ); 217 GNUNET_DISK_pipe_close_end(helper_in, GNUNET_DISK_PIPE_END_READ);
214 218
219 /* Tell the dns-service to rehijack the dns-port
220 * The routing-table gets flushed if an interface disappears.
221 */
222 restart_hijack = 1;
223 GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL);
224
215 GNUNET_SCHEDULER_add_read_file (sched, GNUNET_TIME_UNIT_FOREVER_REL, fh_from_helper, &helper_read, NULL); 225 GNUNET_SCHEDULER_add_read_file (sched, GNUNET_TIME_UNIT_FOREVER_REL, fh_from_helper, &helper_read, NULL);
216} 226}
217 227
@@ -226,12 +236,6 @@ restart_helper(void* cls, const struct GNUNET_SCHEDULER_TaskContext* tskctx) {
226 GNUNET_OS_process_close (helper_proc); 236 GNUNET_OS_process_close (helper_proc);
227 helper_proc = NULL; 237 helper_proc = NULL;
228 238
229 /* Tell the dns-service to rehijack the dns-port
230 * The routing-table gets flushed if an interface disappears.
231 */
232 restart_hijack = 1;
233 GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL);
234
235 GNUNET_DISK_pipe_close(helper_in); 239 GNUNET_DISK_pipe_close(helper_in);
236 GNUNET_DISK_pipe_close(helper_out); 240 GNUNET_DISK_pipe_close(helper_out);
237 241
@@ -435,6 +439,10 @@ connect_to_service_dns (void *cls,
435 GNUNET_YES, 439 GNUNET_YES,
436 &send_query, 440 &send_query,
437 NULL); 441 NULL);
442 else if (restart_hijack == 1)
443 {
444 GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL);
445 }
438} 446}
439 447
440/** 448/**
diff --git a/src/vpn/gnunet-service-dns.c b/src/vpn/gnunet-service-dns.c
index 8dda2fffa..3e69f8660 100644
--- a/src/vpn/gnunet-service-dns.c
+++ b/src/vpn/gnunet-service-dns.c
@@ -107,17 +107,17 @@ struct receive_dht_cls {
107 * Hijack all outgoing DNS-Traffic but for traffic leaving "our" port. 107 * Hijack all outgoing DNS-Traffic but for traffic leaving "our" port.
108 */ 108 */
109static void 109static void
110hijack(unsigned short port) { 110hijack(void* cls, const struct GNUNET_SCHEDULER_TaskContext* tc) {
111 char port_s[6]; 111 char port_s[6];
112 112
113 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Hijacking, port is %d\n", port); 113 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Hijacking, port is %d\n", dnsoutport);
114 snprintf(port_s, 6, "%d", port); 114 snprintf(port_s, 6, "%d", dnsoutport);
115 GNUNET_OS_process_close (GNUNET_OS_start_process(NULL, 115 GNUNET_OS_process_close (GNUNET_OS_start_process(NULL,
116 NULL, 116 NULL,
117 "gnunet-helper-hijack-dns", 117 "gnunet-helper-hijack-dns",
118 "gnunet-hijack-dns", 118 "gnunet-hijack-dns",
119 port_s, 119 port_s,
120 NULL)); 120 NULL));
121} 121}
122 122
123/** 123/**
@@ -277,7 +277,9 @@ rehijack(void *cls,
277 struct GNUNET_SERVER_Client *client, 277 struct GNUNET_SERVER_Client *client,
278 const struct GNUNET_MessageHeader *message) { 278 const struct GNUNET_MessageHeader *message) {
279 unhijack(dnsoutport); 279 unhijack(dnsoutport);
280 hijack(dnsoutport); 280 GNUNET_SCHEDULER_add_delayed(sched, GNUNET_TIME_UNIT_SECONDS, hijack, NULL);
281
282 GNUNET_SERVER_receive_done(client, GNUNET_OK);
281} 283}
282 284
283/** 285/**
@@ -536,8 +538,6 @@ run (void *cls,
536 538
537 dnsoutport = htons(addr.sin_port); 539 dnsoutport = htons(addr.sin_port);
538 540
539 hijack(htons(addr.sin_port));
540
541 GNUNET_SCHEDULER_add_now (sched, publish_name, NULL); 541 GNUNET_SCHEDULER_add_now (sched, publish_name, NULL);
542 542
543 GNUNET_SCHEDULER_add_read_net(sched, GNUNET_TIME_UNIT_FOREVER_REL, dnsout, &read_response, NULL); 543 GNUNET_SCHEDULER_add_read_net(sched, GNUNET_TIME_UNIT_FOREVER_REL, dnsout, &read_response, NULL);