From 808e125f5a5a08b41fc4b4234f29008fc5fb8c81 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 22 Apr 2010 08:29:36 +0000 Subject: [PATCH] create hostlist client if we have no MHD --- src/Makefile.am | 7 +-- src/hostlist/Makefile.am | 13 ++++-- src/hostlist/gnunet-daemon-hostlist.c | 65 ++++++++++++++++----------- 3 files changed, 50 insertions(+), 35 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index a01288078..94092e1a8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,11 +2,6 @@ # INTLEMU_SUBDIRS = intlemu #endif - -if HAVE_MHD - HOSTLIST_DIR = hostlist -endif - if !MINGW NAT_DIR = nat endif @@ -25,7 +20,7 @@ SUBDIRS = \ peerinfo-tool \ core \ testing \ - $(HOSTLIST_DIR) \ + hostlist \ topology \ $(NAT_DIR) \ fs diff --git a/src/hostlist/Makefile.am b/src/hostlist/Makefile.am index 7bc9ffd3a..5e67d034c 100644 --- a/src/hostlist/Makefile.am +++ b/src/hostlist/Makefile.am @@ -4,6 +4,10 @@ if USE_COVERAGE AM_CFLAGS = --coverage -O0 endif +if HAVE_MHD + HOSTLIST_SERVER_SOURCES = hostlist-server.c hostlist-server.h + GN_LIBMHD = -lmicrohttpd +endif bin_PROGRAMS = \ gnunet-daemon-hostlist @@ -11,7 +15,7 @@ bin_PROGRAMS = \ gnunet_daemon_hostlist_SOURCES = \ gnunet-daemon-hostlist.c gnunet-daemon-hostlist.h \ hostlist-client.c hostlist-client.h \ - hostlist-server.c hostlist-server.h + $(HOSTLIST_SERVER_SOURCES) gnunet_daemon_hostlist_LDADD = \ $(top_builddir)/src/core/libgnunetcore.la \ @@ -20,7 +24,7 @@ gnunet_daemon_hostlist_LDADD = \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ $(top_builddir)/src/transport/libgnunettransport.la \ $(top_builddir)/src/util/libgnunetutil.la \ - -lmicrohttpd \ + $(GN_LIBMHD) \ @LIBCURL@ \ $(GN_LIBINTL) @@ -31,9 +35,10 @@ check_PROGRAMS = \ test_gnunet_daemon_hostlist \ test_gnunet_daemon_hostlist_learning - +if HAVE_MHD TESTS = test_gnunet_daemon_hostlist \ test_gnunet_daemon_hostlist_learning +endif test_gnunet_daemon_hostlist_SOURCES = \ test_gnunet_daemon_hostlist.c @@ -48,7 +53,7 @@ test_gnunet_daemon_hostlist_learning_LDADD = \ $(top_builddir)/src/transport/libgnunettransport.la \ $(top_builddir)/src/arm/libgnunetarm.la \ $(top_builddir)/src/core/libgnunetcore.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la \ + $(top_builddir)/src/statistics/libgnunetstatistics.la \ $(top_builddir)/src/util/libgnunetutil.la EXTRA_DIST = \ diff --git a/src/hostlist/gnunet-daemon-hostlist.c b/src/hostlist/gnunet-daemon-hostlist.c index ec129fd8a..9ebf63719 100644 --- a/src/hostlist/gnunet-daemon-hostlist.c +++ b/src/hostlist/gnunet-daemon-hostlist.c @@ -22,17 +22,11 @@ * @file hostlist/gnunet-daemon-hostlist.c * @brief code for bootstrapping via hostlist servers * @author Christian Grothoff - * - * TODO: - * - implement -a and -e switches (send P2P messages about our hostlist URL, - * receive such messages and automatically update our hostlist URL config - * value). */ #include #include "platform.h" #include "hostlist-client.h" -#include "hostlist-server.h" #include "gnunet_core_service.h" #include "gnunet_getopt_lib.h" #include "gnunet_protocols.h" @@ -42,11 +36,32 @@ #include "gnunet_time_lib.h" #include "gnunet_util_lib.h" +#if HAVE_MHD + +#include "hostlist-server.h" + /** * Set if we are allowed to advertise our hostlist to others. */ static int advertising; +/** + * Set if the user wants us to run a hostlist server. + */ +static int provide_hostlist; + +/** + * Handle to hostlist server's connect handler + */ +static GNUNET_CORE_ConnectEventHandler server_ch = NULL; + +/** + * Handle to hostlist server's disconnect handler + */ +static GNUNET_CORE_DisconnectEventHandler server_dh = NULL; + +#endif + /** * Set if we are allowed to learn about peers by accessing * hostlist servers. @@ -59,11 +74,6 @@ static int bootstrapping; */ static int learning; -/** - * Set if the user wants us to run a hostlist server. - */ -static int provide_hostlist; - /** * Statistics handle. */ @@ -89,32 +99,26 @@ static GNUNET_CORE_ConnectEventHandler client_ch = NULL; */ static GNUNET_CORE_DisconnectEventHandler client_dh = NULL; -/** - * Handle to hostlist server's connect handler - */ -static GNUNET_CORE_ConnectEventHandler server_ch = NULL; - -/** - * Handle to hostlist server's disconnect handler - */ -static GNUNET_CORE_DisconnectEventHandler server_dh = NULL; - /** * gnunet-daemon-hostlist command line options. */ static struct GNUNET_GETOPT_CommandLineOption options[] = { +#if HAVE_MHD { 'a', "advertise", NULL, gettext_noop ("advertise our hostlist to other peers"), GNUNET_NO, &GNUNET_GETOPT_set_one, &advertising }, +#endif { '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"), GNUNET_NO, &GNUNET_GETOPT_set_one, &learning}, +#if HAVE_MHD { 'p', "provide-hostlist", NULL, gettext_noop ("provide a hostlist server"), GNUNET_NO, &GNUNET_GETOPT_set_one, &provide_hostlist}, +#endif GNUNET_GETOPT_OPTION_END }; @@ -153,10 +157,12 @@ core_init (void *cls, GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded * publicKey) { +#if HAVE_MHD if (advertising && (NULL != server)) { /* FIXME: provide "server" to 'hostlist' module */ } +#endif } /** @@ -192,8 +198,10 @@ connect_handler (void *cls, "A new peer connected, notifying client and server\n"); if ( NULL != client_ch) (*client_ch) (cls, peer, latency, distance); +#if HAVE_MHD if ( NULL != server_ch) (*server_ch) (cls, peer, latency, distance); +#endif } /** @@ -211,10 +219,11 @@ disconnect_handler (void *cls, /* call hostlist client disconnect handler*/ if ( NULL != client_dh) (*client_dh) (cls, peer); - +#if HAVE_MHD /* call hostlist server disconnect handler*/ if ( NULL != server_dh) (*server_dh) (cls, peer); +#endif } /** @@ -230,10 +239,12 @@ cleaning_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GNUNET_HOSTLIST_client_stop (); } +#if HAVE_MHD if (provide_hostlist) { GNUNET_HOSTLIST_server_stop (); } +#endif if (core != NULL) { GNUNET_CORE_disconnect (core); @@ -281,8 +292,11 @@ run (void *cls, const struct GNUNET_CONFIGURATION_Handle * cfg) { if ( (! bootstrapping) && - (! learning) && - (! provide_hostlist) ) + (! learning) +#if HAVE_MHD + && (! provide_hostlist) +#endif + ) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("None of the functions for the hostlist daemon were enabled. I have no reason to run!\n")); @@ -304,11 +318,12 @@ run (void *cls, GNUNET_HOSTLIST_client_start (cfg, sched, stats, &client_ch, &client_dh, &client_adv_handler, learning); } +#if HAVE_MHD if (provide_hostlist) { GNUNET_HOSTLIST_server_start (cfg, sched, stats, core, &server_ch, &server_dh, advertising ); } - +#endif GNUNET_SCHEDULER_add_delayed (sched, GNUNET_TIME_UNIT_FOREVER_REL, &cleaning_task, NULL); -- 2.25.1