[Top][All Lists]
[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r8560 - gnunet/src/hostlist,
gnunet <=