From b569b667c1e5596a8588ae2aa1aa533f54658fbd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Philipp=20T=C3=B6lke?= Date: Thu, 4 Nov 2010 17:26:56 +0000 Subject: [PATCH] Only start the hijack if the vpn is running --- src/vpn/gnunet-daemon-vpn.c | 26 +++++++++++++++++--------- src/vpn/gnunet-service-dns.c | 22 +++++++++++----------- 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) { { restart_hijack = 0; /* - * The message is just a header + * The message is just a header */ - GNUNET_assert(sizeof(struct GNUNET_MessageHeader) >= size); + GNUNET_assert(sizeof(struct GNUNET_MessageHeader) <= size); struct GNUNET_MessageHeader* hdr = buf; len = sizeof(struct GNUNET_MessageHeader); hdr->size = htons(len); @@ -161,10 +161,14 @@ send_query(void* cls, size_t size, void* buf) { /* * Check whether more data is to be sent */ - if (head != NULL || restart_hijack == 1) + if (head != NULL) { GNUNET_CLIENT_notify_transmit_ready(dns_connection, ntohs(head->pkt.hdr.size), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL); } + else if (restart_hijack == 1) + { + GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL); + } return len; } @@ -212,6 +216,12 @@ start_helper_and_schedule(void *cls, GNUNET_DISK_pipe_close_end(helper_out, GNUNET_DISK_PIPE_END_WRITE); GNUNET_DISK_pipe_close_end(helper_in, GNUNET_DISK_PIPE_END_READ); + /* Tell the dns-service to rehijack the dns-port + * The routing-table gets flushed if an interface disappears. + */ + restart_hijack = 1; + GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL); + GNUNET_SCHEDULER_add_read_file (sched, GNUNET_TIME_UNIT_FOREVER_REL, fh_from_helper, &helper_read, NULL); } @@ -226,12 +236,6 @@ restart_helper(void* cls, const struct GNUNET_SCHEDULER_TaskContext* tskctx) { GNUNET_OS_process_close (helper_proc); helper_proc = NULL; - /* Tell the dns-service to rehijack the dns-port - * The routing-table gets flushed if an interface disappears. - */ - restart_hijack = 1; - GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL); - GNUNET_DISK_pipe_close(helper_in); GNUNET_DISK_pipe_close(helper_out); @@ -435,6 +439,10 @@ connect_to_service_dns (void *cls, GNUNET_YES, &send_query, NULL); + else if (restart_hijack == 1) + { + GNUNET_CLIENT_notify_transmit_ready(dns_connection, sizeof(struct GNUNET_MessageHeader), GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, &send_query, NULL); + } } /** 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 { * Hijack all outgoing DNS-Traffic but for traffic leaving "our" port. */ static void -hijack(unsigned short port) { +hijack(void* cls, const struct GNUNET_SCHEDULER_TaskContext* tc) { char port_s[6]; - GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Hijacking, port is %d\n", port); - snprintf(port_s, 6, "%d", port); + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Hijacking, port is %d\n", dnsoutport); + snprintf(port_s, 6, "%d", dnsoutport); GNUNET_OS_process_close (GNUNET_OS_start_process(NULL, - NULL, - "gnunet-helper-hijack-dns", - "gnunet-hijack-dns", - port_s, - NULL)); + NULL, + "gnunet-helper-hijack-dns", + "gnunet-hijack-dns", + port_s, + NULL)); } /** @@ -277,7 +277,9 @@ rehijack(void *cls, struct GNUNET_SERVER_Client *client, const struct GNUNET_MessageHeader *message) { unhijack(dnsoutport); - hijack(dnsoutport); + GNUNET_SCHEDULER_add_delayed(sched, GNUNET_TIME_UNIT_SECONDS, hijack, NULL); + + GNUNET_SERVER_receive_done(client, GNUNET_OK); } /** @@ -536,8 +538,6 @@ run (void *cls, dnsoutport = htons(addr.sin_port); - hijack(htons(addr.sin_port)); - GNUNET_SCHEDULER_add_now (sched, publish_name, NULL); GNUNET_SCHEDULER_add_read_net(sched, GNUNET_TIME_UNIT_FOREVER_REL, dnsout, &read_response, NULL); -- 2.25.1