gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r8560 - gnunet/src/hostlist


From: gnunet
Subject: [GNUnet-SVN] r8560 - gnunet/src/hostlist
Date: Sat, 13 Jun 2009 00:19:33 -0600

Author: grothoff
Date: 2009-06-13 00:19:33 -0600 (Sat, 13 Jun 2009)
New Revision: 8560

Modified:
   gnunet/src/hostlist/gnunet-daemon-hostlist.c
   gnunet/src/hostlist/hostlist-server.c
Log:
use external select


Modified: gnunet/src/hostlist/gnunet-daemon-hostlist.c
===================================================================
--- gnunet/src/hostlist/gnunet-daemon-hostlist.c        2009-06-13 06:10:10 UTC 
(rev 8559)
+++ gnunet/src/hostlist/gnunet-daemon-hostlist.c        2009-06-13 06:19:33 UTC 
(rev 8560)
@@ -69,13 +69,17 @@
  * gnunet-daemon-hostlist command line options.
  */
 static struct GNUNET_GETOPT_CommandLineOption options[] = {
-  { 'a', "advertise", NULL, gettext_noop ("advertise our hostlist to other 
peers"),
+  { 'a', "advertise", NULL, 
+    gettext_noop ("advertise our hostlist to other peers"),
     GNUNET_NO, &GNUNET_GETOPT_set_one, &advertising },
-  { 'b', "bootstrap", NULL, gettext_noop ("bootstrap using hostlists (it is 
highly recommended that you always use this option)"),
+  { 'b', "bootstrap", NULL, 
+    gettext_noop ("bootstrap using hostlists (it is highly recommended that 
you always use this option)"),
     GNUNET_NO, &GNUNET_GETOPT_set_one, &bootstrapping },
-  { 'e', "enable-learning", NULL, gettext_noop ("enable learning about 
hostlist servers from other peers"),
+  { 'e', "enable-learning", NULL,
+    gettext_noop ("enable learning about hostlist servers from other peers"),
     GNUNET_NO, &GNUNET_GETOPT_set_one, &learning},
-  { 'p', "provide-hostlist", NULL, gettext_noop ("provide a hostlist server"),
+  { 'p', "provide-hostlist", NULL, 
+    gettext_noop ("provide a hostlist server"),
     GNUNET_NO, &GNUNET_GETOPT_set_one, &provide_hostlist},
   GNUNET_GETOPT_OPTION_END
 };

Modified: gnunet/src/hostlist/hostlist-server.c
===================================================================
--- gnunet/src/hostlist/hostlist-server.c       2009-06-13 06:10:10 UTC (rev 
8559)
+++ gnunet/src/hostlist/hostlist-server.c       2009-06-13 06:19:33 UTC (rev 
8560)
@@ -142,7 +142,9 @@
 }
 
 
-
+/**
+ * Hostlist access policy (very permissive, allows everything).
+ */
 static int
 accept_policy_callback (void *cls,
                         const struct sockaddr *addr, socklen_t addrlen)
@@ -151,6 +153,9 @@
 }
 
 
+/**
+ * Main request handler.
+ */
 static int
 access_handler_callback (void *cls,
                          struct MHD_Connection *connection,
@@ -178,6 +183,67 @@
 
 
 /**
+ * Function that queries MHD's select sets and
+ * starts the task waiting for them.
+ */
+static void 
+prepare_daemon (void);
+
+
+static void
+run_daemon (void *cls,
+           const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  GNUNET_assert (MHD_YES == MHD_run (daemon_handle));
+  prepare_daemon ();
+}
+
+
+/**
+ * Function that queries MHD's select sets and
+ * starts the task waiting for them.
+ */
+static void 
+prepare_daemon ()
+{
+  fd_set rs;
+  fd_set ws;
+  fd_set es;
+  int max;
+  unsigned long long timeout;
+  int haveto;
+  struct GNUNET_TIME_Relative tv;
+  
+  FD_ZERO(&rs);
+  FD_ZERO(&ws);
+  FD_ZERO(&es);
+  max = -1;
+  GNUNET_assert (MHD_YES ==
+                MHD_get_fdset (daemon_handle,
+                               &rs,
+                               &ws,
+                               &es,
+                               &max));
+  haveto = MHD_get_timeout (daemon_handle, &timeout);
+  if (haveto == MHD_YES)
+    tv.value = (uint64_t) timeout;
+  else
+    tv = GNUNET_TIME_UNIT_FOREVER_REL;
+  GNUNET_SCHEDULER_add_select (sched,
+                              GNUNET_NO,
+                              GNUNET_SCHEDULER_PRIORITY_HIGH,
+                              GNUNET_SCHEDULER_NO_PREREQUISITE_TASK,
+                              tv,
+                              max,
+                              &rs,
+                              &ws,
+                              &run_daemon,
+                              NULL);
+}
+
+
+
+/**
  * Start server offering our hostlist.
  *
  * @return GNUNET_OK on success
@@ -196,9 +262,7 @@
                                                   "PORT", 
                                                   &port))
     return GNUNET_SYSERR;
-  /* FIXME: must use *external* SELECT mode since our
-     code is NOT thread safe!  Integrate with scheduler! */
-  daemon_handle = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_IPv6,
+  daemon_handle = MHD_start_daemon (MHD_USE_IPv6,
                                     (unsigned short) port,
                                     &accept_policy_callback,
                                     NULL,
@@ -216,6 +280,7 @@
                  (unsigned short) port);
       return GNUNET_SYSERR;    
     }
+  prepare_daemon ();
   return GNUNET_OK;
 }
 





reply via email to

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