gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r12718 - gnunet/src/vpn


From: gnunet
Subject: [GNUnet-SVN] r12718 - gnunet/src/vpn
Date: Mon, 23 Aug 2010 13:03:10 +0200

Author: toelke
Date: 2010-08-23 13:03:10 +0200 (Mon, 23 Aug 2010)
New Revision: 12718

Added:
   gnunet/src/vpn/gnunet-service-dns.c
Modified:
   gnunet/src/vpn/Makefile.am
Log:
The beginning of the DNS-Service. Does not work for the moment, because
GNUNET_SERVICE_run does not give me my cls...

Modified: gnunet/src/vpn/Makefile.am
===================================================================
--- gnunet/src/vpn/Makefile.am  2010-08-23 08:49:25 UTC (rev 12717)
+++ gnunet/src/vpn/Makefile.am  2010-08-23 11:03:10 UTC (rev 12718)
@@ -22,7 +22,7 @@
 
 
 bin_PROGRAMS = \
- gnunet-daemon-vpn $(VPNBIN) $(HIJACKBIN)
+  gnunet-daemon-vpn gnunet-service-dns $(VPNBIN) $(HIJACKBIN)
 
 
 gnunet_helper_vpn_SOURCES = \
@@ -41,6 +41,13 @@
   $(top_builddir)/src/util/libgnunetutil.la \
   $(GN_LIBINTL)
 
+gnunet_service_dns_SOURCES = \
+ gnunet-service-dns.c
+gnunet_service_dns_LDADD = \
+  $(top_builddir)/src/core/libgnunetcore.la \
+  $(top_builddir)/src/statistics/libgnunetstatistics.la \
+  $(top_builddir)/src/util/libgnunetutil.la \
+  $(GN_LIBINTL)
 
 #check_PROGRAMS = \
 # test_XXX

Added: gnunet/src/vpn/gnunet-service-dns.c
===================================================================
--- gnunet/src/vpn/gnunet-service-dns.c                         (rev 0)
+++ gnunet/src/vpn/gnunet-service-dns.c 2010-08-23 11:03:10 UTC (rev 12718)
@@ -0,0 +1,129 @@
+/*
+     This file is part of GNUnet.
+     (C) 2009 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 3, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file vpn/gnunet-service-dns.c
+ * @author Philipp Tölke
+ */
+#include "platform.h"
+#include "gnunet_getopt_lib.h"
+#include "gnunet_service_lib.h"
+#include "gnunet_network_lib.h"
+#include "gnunet_os_lib.h"
+
+struct dns_cls {
+       struct GNUNET_SCHEDULER_Handle *sched;
+
+       struct GNUNET_NETWORK_Handle *dnsout;
+
+       unsigned short dnsoutport;
+};
+
+void hijack(unsigned short port) {
+       char* port_s = "12345";
+
+       snprintf(port_s, 6, "%d", port);
+       GNUNET_OS_start_process(NULL, NULL, "gnunet-helper-hijack-dns", 
"gnunet-hijack-dns", port_s, NULL);
+}
+
+void unhijack(unsigned short port) {
+       char* port_s = "12345";
+
+       snprintf(port_s, 6, "%d", port);
+       GNUNET_OS_start_process(NULL, NULL, "gnunet-helper-hijack-dns", 
"gnunet-hijack-dns", "-d", port_s, NULL);
+}
+
+/**
+ * Task run during shutdown.
+ *
+ * @param cls unused
+ * @param tc unused
+ */
+static void
+cleanup_task (void *cls,
+             const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+       unhijack(((struct dns_cls*)cls)->dnsoutport);
+}
+
+/**
+ * @param cls closure
+ * @param sched scheduler to use
+ * @param server the initialized server
+ * @param cfg configuration to use
+ */
+static void
+run (void *cls,
+     struct GNUNET_SCHEDULER_Handle *sched,
+     struct GNUNET_SERVER_Handle *server,
+     const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+  static const struct GNUNET_SERVER_MessageHandler handlers[] = {
+    {NULL, NULL, 0, 0}
+  };
+
+       fprintf(stderr, "%x\n", cls);
+
+  struct dns_cls* mycls = (struct dns_cls*)cls;
+
+  mycls->sched = sched;
+
+  mycls->dnsout = GNUNET_NETWORK_socket_create (AF_INET, SOCK_DGRAM, 0);
+
+  struct sockaddr_in * addr = alloca(sizeof(struct sockaddr_in));
+  memset(addr, 0, sizeof(struct sockaddr_in));
+
+  int err = GNUNET_NETWORK_socket_bind (mycls->dnsout, addr, sizeof(struct 
sockaddr_in));
+  err = getsockname(GNUNET_NETWORK_get_fd(mycls->dnsout), addr, (unsigned 
int[]){sizeof(struct sockaddr_in)});
+
+  mycls->dnsoutport = htons(addr->sin_port);
+
+  hijack(htons(addr->sin_port));
+
+  GNUNET_SERVER_add_handlers (server, handlers);
+  GNUNET_SCHEDULER_add_delayed (sched,
+                 GNUNET_TIME_UNIT_FOREVER_REL,
+                 &cleanup_task,
+                 NULL);
+}
+
+/**
+ * The main function for the dns service.
+ *
+ * @param argc number of arguments from the command line
+ * @param argv command line arguments
+ * @return 0 ok, 1 on error
+ */
+int
+main (int argc, char *const *argv)
+{
+  struct dns_cls* cls = GNUNET_malloc(sizeof(struct dns_cls));
+
+  fprintf(stderr, "%x\n", cls);
+
+  return (GNUNET_OK ==
+          GNUNET_SERVICE_run (argc,
+                              argv,
+                              "gnunet-service-dns",
+                             GNUNET_SERVICE_OPTION_NONE,
+                             &run, cls)) ? 0 : 1;
+
+  GNUNET_free(cls); // Make clang happy
+}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]