diff options
author | Bertrand Marc <beberking@gmail.com> | 2012-06-06 20:47:48 +0200 |
---|---|---|
committer | Bertrand Marc <beberking@gmail.com> | 2012-06-06 20:47:48 +0200 |
commit | 740b30688bd745a527f96f9116c19acb3480971a (patch) | |
tree | 2709a3f4dba11c174aa9e1ba3612e30c578e76a9 /src/hostlist | |
parent | 2b81464a43485fcc8ce079fafdee7b7a171835f4 (diff) |
Imported Upstream version 0.9.3upstream/0.9.3
Diffstat (limited to 'src/hostlist')
-rw-r--r-- | src/hostlist/Makefile.in | 2 | ||||
-rw-r--r-- | src/hostlist/hostlist-client.c | 70 | ||||
-rw-r--r-- | src/hostlist/hostlist-server.c | 181 | ||||
-rw-r--r-- | src/hostlist/hostlist.conf | 5 | ||||
-rw-r--r-- | src/hostlist/learning_data.conf | 6 | ||||
-rw-r--r-- | src/hostlist/test_gnunet_daemon_hostlist.c | 12 | ||||
-rw-r--r-- | src/hostlist/test_gnunet_daemon_hostlist_learning.c | 53 | ||||
-rw-r--r-- | src/hostlist/test_gnunet_daemon_hostlist_peer1.conf | 1 | ||||
-rw-r--r-- | src/hostlist/test_gnunet_daemon_hostlist_reconnect.c | 2 | ||||
-rw-r--r-- | src/hostlist/test_hostlist_defaults.conf | 6 |
10 files changed, 187 insertions, 151 deletions
diff --git a/src/hostlist/Makefile.in b/src/hostlist/Makefile.in index 737e87c..4777316 100644 --- a/src/hostlist/Makefile.in +++ b/src/hostlist/Makefile.in @@ -227,6 +227,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JAVAPORT = @JAVAPORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBADD_DL = @LIBADD_DL@ @@ -260,6 +261,7 @@ LT_DLLOADERS = @LT_DLLOADERS@ LT_DLPREOPEN = @LT_DLPREOPEN@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ +MONKEYPREFIX = @MONKEYPREFIX@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ diff --git a/src/hostlist/hostlist-client.c b/src/hostlist/hostlist-client.c index 350a0ba..6be37fc 100644 --- a/src/hostlist/hostlist-client.c +++ b/src/hostlist/hostlist-client.c @@ -36,8 +36,6 @@ #include "gnunet_common.h" #include "gnunet_bio_lib.h" -#define DEBUG_HOSTLIST_CLIENT GNUNET_EXTRA_LOGGING - /** * Number of connections that we must have to NOT download @@ -209,6 +207,11 @@ static unsigned int linked_list_size; static struct Hostlist *hostlist_to_test; /** + * Handle for our statistics GET operation. + */ +static struct GNUNET_STATISTICS_GetHandle *sget; + +/** * Set to GNUNET_YES if the current URL had some problems. */ static int stat_bogus_url; @@ -320,11 +323,9 @@ callback_download (void *ptr, size_t size, size_t nmemb, void *ctx) } if (GNUNET_HELLO_size ((const struct GNUNET_HELLO_Message *) msg) == msize) { -#if DEBUG_HOSTLIST_CLIENT GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received valid `%s' message from hostlist server.\n", "HELLO"); -#endif GNUNET_STATISTICS_update (stats, gettext_noop ("# valid HELLOs downloaded from hostlist servers"), @@ -760,13 +761,11 @@ download_prepare () gws = GNUNET_NETWORK_fdset_create (); GNUNET_NETWORK_fdset_copy_native (grs, &rs, max + 1); GNUNET_NETWORK_fdset_copy_native (gws, &ws, max + 1); -#if DEBUG_HOSTLIST_CLIENT GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Scheduling task for hostlist download using cURL\n"); -#endif ti_download = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, - GNUNET_SCHEDULER_NO_TASK, rtime, grs, gws, + rtime, grs, gws, &task_download, multi); GNUNET_NETWORK_fdset_destroy (gws); GNUNET_NETWORK_fdset_destroy (grs); @@ -790,11 +789,9 @@ task_download (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) ti_download = GNUNET_SCHEDULER_NO_TASK; if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) { -#if DEBUG_HOSTLIST_CLIENT GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown requested while trying to download hostlist from `%s'\n", current_url); -#endif update_hostlist (); clean_up (); return; @@ -808,11 +805,8 @@ task_download (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) clean_up (); return; } -#if DEBUG_HOSTLIST_CLIENT GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ready for processing hostlist client request\n"); -#endif - do { running = 0; @@ -839,8 +833,8 @@ task_download (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) if ((msg->data.result != CURLE_OK) && (msg->data.result != CURLE_GOT_NOTHING)) GNUNET_log (GNUNET_ERROR_TYPE_INFO, - _("%s failed for `%s' at %s:%d: `%s'\n"), - "curl_multi_perform", current_url, __FILE__, __LINE__, + _("Download of hostlist from `%s' failed: `%s'\n"), + current_url, curl_easy_strerror (msg->data.result)); else { @@ -1018,18 +1012,16 @@ task_check (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) ti_check_download = GNUNET_SCHEDULER_NO_TASK; if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) return; - - if (stat_connection_count < MIN_CONNECTIONS) - { - ti_download_dispatcher_task = - GNUNET_SCHEDULER_add_now (&task_download_dispatcher, NULL); - } - if (stats == NULL) { curl_global_cleanup (); return; /* in shutdown */ } + if ( (stat_connection_count < MIN_CONNECTIONS) && + (GNUNET_SCHEDULER_NO_TASK == ti_download_dispatcher_task) ) + ti_download_dispatcher_task = + GNUNET_SCHEDULER_add_now (&task_download_dispatcher, NULL); + delay = hostlist_delay; if (hostlist_delay.rel_value == 0) hostlist_delay = GNUNET_TIME_UNIT_SECONDS; @@ -1202,7 +1194,6 @@ handler_advertisement (void *cls, const struct GNUNET_PeerIdentity *peer, hostlist->hostlist_uri = (const char *) &hostlist[1]; memcpy (&hostlist[1], uri, uri_size); hostlist->time_creation = GNUNET_TIME_absolute_get (); - hostlist->time_last_usage = GNUNET_TIME_absolute_get_zero (); hostlist->quality = HOSTLIST_INITIAL; hostlist_to_test = hostlist; @@ -1235,12 +1226,10 @@ handler_advertisement (void *cls, const struct GNUNET_PeerIdentity *peer, static void primary_task (void *cls, int success) { - if (stats == NULL) - return; /* in shutdown */ -#if DEBUG_HOSTLIST_CLIENT + sget = NULL; + GNUNET_assert (stats != NULL); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Statistics request done, scheduling hostlist download\n"); -#endif ti_check_download = GNUNET_SCHEDULER_add_now (&task_check, NULL); } @@ -1447,6 +1436,7 @@ GNUNET_HOSTLIST_client_start (const struct GNUNET_CONFIGURATION_Handle *c, char *filename; int result; + GNUNET_assert (NULL != st); if (0 != curl_global_init (CURL_GLOBAL_WIN32)) { GNUNET_break (0); @@ -1510,11 +1500,11 @@ GNUNET_HOSTLIST_client_start (const struct GNUNET_CONFIGURATION_Handle *c, } GNUNET_free (filename); } - GNUNET_STATISTICS_get (stats, "hostlist", - gettext_noop - ("# milliseconds between hostlist downloads"), - GNUNET_TIME_UNIT_MINUTES, &primary_task, &process_stat, - NULL); + sget = GNUNET_STATISTICS_get (stats, "hostlist", + gettext_noop + ("# milliseconds between hostlist downloads"), + GNUNET_TIME_UNIT_MINUTES, &primary_task, &process_stat, + NULL); return GNUNET_OK; } @@ -1526,32 +1516,39 @@ void GNUNET_HOSTLIST_client_stop () { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Hostlist client shutdown\n"); -#if DEBUG_HOSTLIST_CLIENT - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Hostlist client shutdown\n"); -#endif + if (NULL != sget) + { + GNUNET_STATISTICS_get_cancel (sget); + sget = NULL; + } + stats = NULL; if (GNUNET_YES == stat_learning) save_hostlist_file (GNUNET_YES); - if (ti_saving_task != GNUNET_SCHEDULER_NO_TASK) { GNUNET_SCHEDULER_cancel (ti_saving_task); + ti_saving_task = GNUNET_SCHEDULER_NO_TASK; } if (ti_download_dispatcher_task != GNUNET_SCHEDULER_NO_TASK) - { + { GNUNET_SCHEDULER_cancel (ti_download_dispatcher_task); + ti_download_dispatcher_task = GNUNET_SCHEDULER_NO_TASK; } if (ti_testing_intervall_task != GNUNET_SCHEDULER_NO_TASK) { GNUNET_SCHEDULER_cancel (ti_testing_intervall_task); + ti_testing_intervall_task = GNUNET_SCHEDULER_NO_TASK; } if (ti_download != GNUNET_SCHEDULER_NO_TASK) { GNUNET_SCHEDULER_cancel (ti_download); + ti_download = GNUNET_SCHEDULER_NO_TASK; } if (ti_check_download != GNUNET_SCHEDULER_NO_TASK) { GNUNET_SCHEDULER_cancel (ti_check_download); + ti_check_download = GNUNET_SCHEDULER_NO_TASK; curl_global_cleanup (); } if (transport != NULL) @@ -1559,7 +1556,6 @@ GNUNET_HOSTLIST_client_stop () GNUNET_TRANSPORT_disconnect (transport); transport = NULL; } - GNUNET_assert (NULL == transport); GNUNET_free_non_null (proxy); proxy = NULL; cfg = NULL; diff --git a/src/hostlist/hostlist-server.c b/src/hostlist/hostlist-server.c index 8e79ace..af46110 100644 --- a/src/hostlist/hostlist-server.c +++ b/src/hostlist/hostlist-server.c @@ -32,7 +32,6 @@ #include "gnunet-daemon-hostlist.h" #include "gnunet_resolver_service.h" -#define DEBUG_HOSTLIST_SERVER GNUNET_EXTRA_LOGGING /** * Handle to the HTTP server as provided by libmicrohttpd for IPv6. @@ -90,6 +89,18 @@ static struct GNUNET_PEERINFO_IteratorContext *pitr; static struct GNUNET_PEERINFO_Handle *peerinfo; /** + * Set if we are allowed to advertise our hostlist to others. + */ +static int advertising; + +/** + * Buffer for the hostlist address + */ +static char *hostlist_uri; + + + +/** * Context for host processor. */ struct HostSet @@ -99,15 +110,6 @@ struct HostSet char *data; }; -/** - * Set if we are allowed to advertise our hostlist to others. - */ -static int advertising; - -/** - * Buffer for the hostlist address - */ -static char *hostlist_uri; /** @@ -116,17 +118,15 @@ static char *hostlist_uri; static void finish_response (struct HostSet *results) { - if (response != NULL) + if (NULL != response) MHD_destroy_response (response); -#if DEBUG_HOSTLIST_SERVER GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Creating hostlist response with %u bytes\n", (unsigned int) results->size); -#endif response = MHD_create_response_from_data (results->size, results->data, MHD_YES, MHD_NO); - if ((daemon_handle_v4 == NULL) && (daemon_handle_v6 == NULL)) + if ((NULL == daemon_handle_v4) && (NULL == daemon_handle_v6)) { MHD_destroy_response (response); response = NULL; @@ -176,7 +176,7 @@ host_processor (void *cls, const struct GNUNET_PeerIdentity *peer, size_t s; int has_addr; - if (err_msg != NULL) + if (NULL != err_msg) { GNUNET_assert (NULL == peer); pitr = NULL; @@ -185,13 +185,13 @@ host_processor (void *cls, const struct GNUNET_PeerIdentity *peer, err_msg); return; } - if (peer == NULL) + if (NULL == peer) { pitr = NULL; finish_response (results); return; } - if (hello == NULL) + if (NULL == hello) return; has_addr = GNUNET_NO; GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO, &check_has_addr, &has_addr); @@ -208,11 +208,9 @@ host_processor (void *cls, const struct GNUNET_PeerIdentity *peer, } old = results->size; s = GNUNET_HELLO_size (hello); -#if DEBUG_HOSTLIST_SERVER GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received %u bytes of `%s' from peer `%s' for hostlist.\n", (unsigned int) s, "HELLO", GNUNET_i2s (peer)); -#endif if ((old + s >= GNUNET_MAX_MALLOC_CHECKED) || (old + s >= MAX_BYTES_PER_HOSTLISTS)) { @@ -222,11 +220,9 @@ host_processor (void *cls, const struct GNUNET_PeerIdentity *peer, s, GNUNET_NO); return; /* too large, skip! */ } -#if DEBUG_HOSTLIST_SERVER GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding peer `%s' to hostlist (%u bytes)\n", GNUNET_i2s (peer), (unsigned int) s); -#endif GNUNET_array_grow (results->data, results->size, old + s); memcpy (&results->data[old], hello, s); } @@ -242,10 +238,8 @@ accept_policy_callback (void *cls, const struct sockaddr *addr, { if (NULL == response) { -#if DEBUG_HOSTLIST_SERVER GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received request for hostlist, but I am not yet ready; rejecting!\n"); -#endif return MHD_NO; } return MHD_YES; /* accept all */ @@ -276,12 +270,10 @@ access_handler_callback (void *cls, struct MHD_Connection *connection, if (NULL == *con_cls) { (*con_cls) = &dummy; -#if DEBUG_HOSTLIST_SERVER GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _("Sending 100 CONTINUE reply\n")); -#endif return MHD_YES; /* send 100 continue */ } - if (*upload_data_size != 0) + if (0 != *upload_data_size) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _("Refusing `%s' request with %llu bytes of upload data\n"), @@ -292,7 +284,7 @@ access_handler_callback (void *cls, struct MHD_Connection *connection, GNUNET_YES); return MHD_NO; /* do not support upload data */ } - if (response == NULL) + if (NULL == response) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, _ @@ -320,13 +312,12 @@ static size_t adv_transmit_ready (void *cls, size_t size, void *buf) { static uint64_t hostlist_adv_count; - size_t transmission_size; size_t uri_size; /* Including \0 termination! */ struct GNUNET_MessageHeader header; char *cbuf; - if (buf == NULL) + if (NULL == buf) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission failed, buffer invalid!\n"); @@ -370,7 +361,7 @@ connect_handler (void *cls, const struct GNUNET_PeerIdentity *peer, if (!advertising) return; - if (hostlist_uri == NULL) + if (NULL == hostlist_uri) return; size = strlen (hostlist_uri) + 1; if (size + sizeof (struct GNUNET_MessageHeader) >= @@ -411,6 +402,7 @@ disconnect_handler (void *cls, const struct GNUNET_PeerIdentity *peer) /* nothing to do */ } + /** * PEERINFO calls this function to let us know about a possible peer * that we might want to connect to. @@ -426,23 +418,22 @@ process_notify (void *cls, const struct GNUNET_PeerIdentity *peer, { struct HostSet *results; -#if DEBUG_HOSTLIST_SERVER GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peerinfo is notifying us to rebuild our hostlist\n"); -#endif - if (err_msg != NULL) - { + if (NULL != err_msg) GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - _("Error in communication with PEERINFO service\n")); - /* return; */ - } + _("Error in communication with PEERINFO service: %s\n"), + err_msg); + if (NULL != pitr) + return; /* re-build already in progress ... */ results = GNUNET_malloc (sizeof (struct HostSet)); - GNUNET_assert (peerinfo != NULL); + GNUNET_assert (NULL != peerinfo); pitr = GNUNET_PEERINFO_iterate (peerinfo, NULL, GNUNET_TIME_UNIT_MINUTES, &host_processor, results); } + /** * Function that queries MHD's select sets and * starts the task waiting for them. @@ -490,7 +481,7 @@ prepare_daemon (struct MHD_Daemon *daemon_handle) struct GNUNET_NETWORK_FDSet *wws; struct GNUNET_NETWORK_FDSet *wes; int max; - unsigned long long timeout; + unsigned MHD_LONG_LONG timeout; int haveto; struct GNUNET_TIME_Relative tv; @@ -512,7 +503,7 @@ prepare_daemon (struct MHD_Daemon *daemon_handle) GNUNET_NETWORK_fdset_copy_native (wes, &es, max + 1); ret = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH, - GNUNET_SCHEDULER_NO_TASK, tv, wrs, wws, + tv, wrs, wws, &run_daemon, daemon_handle); GNUNET_NETWORK_fdset_destroy (wrs); GNUNET_NETWORK_fdset_destroy (wws); @@ -521,7 +512,6 @@ prepare_daemon (struct MHD_Daemon *daemon_handle) } - /** * Start server offering our hostlist. * @@ -537,7 +527,13 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, { unsigned long long port; char *hostname; + char *ip; size_t size; + struct in_addr i4; + struct in6_addr i6; + struct sockaddr_in v4; + struct sockaddr_in6 v6; + const struct sockaddr *sa; advertising = advertise; if (!advertising) @@ -549,7 +545,7 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, cfg = c; stats = st; peerinfo = GNUNET_PEERINFO_connect (cfg); - if (peerinfo == NULL) + if (NULL == peerinfo) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not access PEERINFO service. Exiting.\n")); @@ -559,7 +555,7 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, GNUNET_CONFIGURATION_get_value_number (cfg, "HOSTLIST", "HTTPPORT", &port)) return GNUNET_SYSERR; - if ((port == 0) || (port > UINT16_MAX)) + if ((0 == port) || (port > UINT16_MAX)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Invalid port number %llu. Exiting.\n"), port); @@ -589,11 +585,52 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, } GNUNET_free (hostname); } - daemon_handle_v6 = MHD_start_daemon (MHD_USE_IPv6 -#if DEBUG_HOSTLIST_SERVER - | MHD_USE_DEBUG + + if (GNUNET_CONFIGURATION_have_value (cfg, "HOSTLIST", "BINDTOIP")) + { + GNUNET_break (GNUNET_OK == + GNUNET_CONFIGURATION_get_value_string (cfg, "HOSTLIST", + "BINDTOIP", &ip)); + } + else + ip = NULL; + if (NULL != ip) + { + if (1 == inet_pton (AF_INET, ip, &i4)) + { + memset (&v4, 0, sizeof (v4)); + v4.sin_family = AF_INET; + v4.sin_addr = i4; + v4.sin_port = htons (port); +#if HAVE_SOCKADDR_IN_SIN_LEN + v4.sin_len = sizeof (v4); #endif - , (unsigned short) port, + sa = (const struct sockaddr *) &v4; + } + else if (1 == inet_pton (AF_INET6, ip, &i6)) + { + memset (&v6, 0, sizeof (v6)); + v6.sin6_family = AF_INET6; + v6.sin6_addr = i6; + v6.sin6_port = htons (port); +#if HAVE_SOCKADDR_IN_SIN_LEN + v6.sin6_len = sizeof (v6); +#endif + sa = (const struct sockaddr *) &v6; + } + else + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + _("`%s' is not a valid IP address! Ignoring BINDTOIP.\n"), + ip); + sa = NULL; + } + } + else + sa = NULL; + + daemon_handle_v6 = MHD_start_daemon (MHD_USE_IPv6 | MHD_USE_DEBUG, + (uint16_t) port, &accept_policy_callback, NULL, &access_handler_callback, NULL, MHD_OPTION_CONNECTION_LIMIT, @@ -603,12 +640,12 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16, MHD_OPTION_CONNECTION_MEMORY_LIMIT, - (size_t) (16 * 1024), MHD_OPTION_END); - daemon_handle_v4 = MHD_start_daemon (MHD_NO_FLAG -#if DEBUG_HOSTLIST_SERVER - | MHD_USE_DEBUG -#endif - , (unsigned short) port, + (size_t) (16 * 1024), + MHD_OPTION_SOCK_ADDR, + sa, + MHD_OPTION_END); + daemon_handle_v4 = MHD_start_daemon (MHD_NO_FLAG | MHD_USE_DEBUG, + (uint16_t) port, &accept_policy_callback, NULL, &access_handler_callback, NULL, MHD_OPTION_CONNECTION_LIMIT, @@ -618,9 +655,12 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16, MHD_OPTION_CONNECTION_MEMORY_LIMIT, - (size_t) (16 * 1024), MHD_OPTION_END); + (size_t) (16 * 1024), + MHD_OPTION_SOCK_ADDR, + sa, + MHD_OPTION_END); - if ((daemon_handle_v6 == NULL) && (daemon_handle_v4 == NULL)) + if ((NULL == daemon_handle_v6) && (NULL == daemon_handle_v4)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not start hostlist HTTP server on port %u\n"), @@ -629,34 +669,26 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, } core = co; - *server_ch = &connect_handler; *server_dh = &disconnect_handler; - if (daemon_handle_v4 != NULL) hostlist_task_v4 = prepare_daemon (daemon_handle_v4); if (daemon_handle_v6 != NULL) hostlist_task_v6 = prepare_daemon (daemon_handle_v6); - notify = GNUNET_PEERINFO_notify (cfg, process_notify, NULL); + notify = GNUNET_PEERINFO_notify (cfg, &process_notify, NULL); return GNUNET_OK; } + /** * Stop server offering our hostlist. */ void GNUNET_HOSTLIST_server_stop () { -#if DEBUG_HOSTLIST_SERVER GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Hostlist server shutdown\n"); -#endif - if (NULL != notify) - { - GNUNET_PEERINFO_notify_cancel (notify); - notify = NULL; - } if (GNUNET_SCHEDULER_NO_TASK != hostlist_task_v6) { GNUNET_SCHEDULER_cancel (hostlist_task_v6); @@ -667,11 +699,6 @@ GNUNET_HOSTLIST_server_stop () GNUNET_SCHEDULER_cancel (hostlist_task_v4); hostlist_task_v4 = GNUNET_SCHEDULER_NO_TASK; } - if (pitr != NULL) - { - GNUNET_PEERINFO_iterate_cancel (pitr); - pitr = NULL; - } if (NULL != daemon_handle_v4) { MHD_stop_daemon (daemon_handle_v4); @@ -682,12 +709,22 @@ GNUNET_HOSTLIST_server_stop () MHD_stop_daemon (daemon_handle_v6); daemon_handle_v6 = NULL; } - if (response != NULL) + if (NULL != response) { MHD_destroy_response (response); response = NULL; } - if (peerinfo != NULL) + if (NULL != notify) + { + GNUNET_PEERINFO_notify_cancel (notify); + notify = NULL; + } + if (NULL != pitr) + { + GNUNET_PEERINFO_iterate_cancel (pitr); + pitr = NULL; + } + if (NULL != peerinfo) { GNUNET_PEERINFO_disconnect (peerinfo); peerinfo = NULL; diff --git a/src/hostlist/hostlist.conf b/src/hostlist/hostlist.conf index b13e1e5..f7c1be3 100644 --- a/src/hostlist/hostlist.conf +++ b/src/hostlist/hostlist.conf @@ -7,8 +7,9 @@ CONFIG = $DEFAULTCONFIG BINARY = gnunet-daemon-hostlist # consider having "-e" as default as well once implemented OPTIONS = -b -SERVERS = http://v9.gnunet.org:58080/ http://ioerror.gnunet.org:65535/ +SERVERS = http://v9.gnunet.org/hostlist http://ioerror.gnunet.org:65535/ # proxy for downloading hostlists HTTP-PROXY = - +# bind hostlist http server to a specific IPv4 or IPv6 +# BINDTOIP = diff --git a/src/hostlist/learning_data.conf b/src/hostlist/learning_data.conf index e3a3897..4252f25 100644 --- a/src/hostlist/learning_data.conf +++ b/src/hostlist/learning_data.conf @@ -6,9 +6,3 @@ SERVERS = http://gnunet.org:8080/ PORT = 23354 HOSTNAME = localhost -[datastore] -AUTOSTART = YES - -[fs] -AUTOSTART = YES - diff --git a/src/hostlist/test_gnunet_daemon_hostlist.c b/src/hostlist/test_gnunet_daemon_hostlist.c index da3ab8b..f13f86d 100644 --- a/src/hostlist/test_gnunet_daemon_hostlist.c +++ b/src/hostlist/test_gnunet_daemon_hostlist.c @@ -142,9 +142,6 @@ setup_peer (struct PeerContext *p, const char *cfgname) p->arm_proc = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm", "gnunet-service-arm", -#if VERBOSE - "-L", "DEBUG", -#endif "-c", cfgname, NULL); #endif GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); @@ -168,7 +165,7 @@ waitpid_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ARM process %u stopped\n", GNUNET_OS_process_get_pid (p->arm_proc)); - GNUNET_OS_process_close (p->arm_proc); + GNUNET_OS_process_destroy (p->arm_proc); p->arm_proc = NULL; #endif GNUNET_CONFIGURATION_destroy (p->cfg); @@ -213,9 +210,6 @@ check () { char *const argv[] = { "test-gnunet-daemon-hostlist", "-c", "test_gnunet_daemon_hostlist_data.conf", -#if VERBOSE - "-L", "DEBUG", -#endif NULL }; struct GNUNET_GETOPT_CommandLineOption options[] = { @@ -239,11 +233,7 @@ main (int argc, char *argv[]) GNUNET_DISK_directory_remove ("/tmp/test-gnunet-hostlist-peer-2"); GNUNET_DISK_directory_remove ("/tmp/test-gnunet-hostlist"); GNUNET_log_setup ("test-gnunet-daemon-hostlist", -#if VERBOSE - "DEBUG", -#else "WARNING", -#endif NULL); ret = check (); GNUNET_DISK_directory_remove ("/tmp/test-gnunet-hostlist-peer-1"); diff --git a/src/hostlist/test_gnunet_daemon_hostlist_learning.c b/src/hostlist/test_gnunet_daemon_hostlist_learning.c index 9ef8812..08ab0de 100644 --- a/src/hostlist/test_gnunet_daemon_hostlist_learning.c +++ b/src/hostlist/test_gnunet_daemon_hostlist_learning.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) + (C) 2009, 2010, 2011, 2012 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 @@ -18,7 +18,7 @@ Boston, MA 02111-1307, USA. */ /** - * @file hostlist/test_gnunet_daemon_hostlist.c + * @file hostlist/test_gnunet_daemon_hostlist_learning.c * @brief test for gnunet_daemon_hostslist.c * @author Christian Grothoff */ @@ -30,8 +30,6 @@ #include "gnunet_resolver_service.h" #include "gnunet_statistics_service.h" -#define VERBOSE GNUNET_NO - #define START_ARM GNUNET_YES #define MAX_URL_LEN 1000 @@ -109,6 +107,16 @@ shutdown_testcase () GNUNET_STATISTICS_get_cancel (advsent_stat); advsent_stat = NULL; } + if (NULL != adv_peer.stats) + { + GNUNET_STATISTICS_destroy (adv_peer.stats, GNUNET_NO); + adv_peer.stats = NULL; + } + if (NULL != learn_peer.stats) + { + GNUNET_STATISTICS_destroy (learn_peer.stats, GNUNET_NO); + learn_peer.stats = NULL; + } if (check_task != GNUNET_SCHEDULER_NO_TASK) { GNUNET_SCHEDULER_cancel (check_task); @@ -146,7 +154,7 @@ shutdown_testcase () GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); if (GNUNET_OS_process_wait (adv_peer.arm_proc) != GNUNET_OK) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); - GNUNET_OS_process_close (adv_peer.arm_proc); + GNUNET_OS_process_destroy (adv_peer.arm_proc); adv_peer.arm_proc = NULL; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Killing hostlist client ARM process.\n"); @@ -154,7 +162,7 @@ shutdown_testcase () GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); if (GNUNET_OS_process_wait (learn_peer.arm_proc) != GNUNET_OK) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); - GNUNET_OS_process_close (learn_peer.arm_proc); + GNUNET_OS_process_destroy (learn_peer.arm_proc); learn_peer.arm_proc = NULL; #endif GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown complete....\n"); @@ -181,6 +189,14 @@ process_downloads_done (void *cls, int success) } +static void +do_shutdown (void *cls, + const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + shutdown_testcase (); +} + + static int process_downloads (void *cls, const char *subsystem, const char *name, uint64_t value, int is_persistent) @@ -191,7 +207,9 @@ process_downloads (void *cls, const char *subsystem, const char *name, "Peer has successfully downloaded advertised URI\n"); learned_hostlist_downloaded = GNUNET_YES; if ((learned_hostlist_saved == GNUNET_YES) && (adv_sent == GNUNET_YES)) - shutdown_testcase (); + { + GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + } } return GNUNET_OK; } @@ -215,7 +233,9 @@ process_uris_recv (void *cls, const char *subsystem, const char *name, "Peer has successfully saved advertised URI\n"); learned_hostlist_saved = GNUNET_YES; if ((learned_hostlist_downloaded == GNUNET_YES) && (adv_sent == GNUNET_YES)) - shutdown_testcase (); + { + GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + } } return GNUNET_OK; } @@ -239,7 +259,9 @@ process_adv_sent (void *cls, const char *subsystem, const char *name, adv_sent = GNUNET_YES; if ((learned_hostlist_downloaded == GNUNET_YES) && (learned_hostlist_saved == GNUNET_YES)) - shutdown_testcase (); + { + GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + } } return GNUNET_OK; } @@ -372,9 +394,6 @@ setup_learn_peer (struct PeerContext *p, const char *cfgname) p->arm_proc = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm", "gnunet-service-arm", -#if VERBOSE - "-L", "DEBUG", -#endif "-c", cfgname, NULL); #endif GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); @@ -408,9 +427,6 @@ setup_adv_peer (struct PeerContext *p, const char *cfgname) p->arm_proc = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm", "gnunet-service-arm", -#if VERBOSE - "-L", "DEBUG", -#endif "-c", cfgname, NULL); #endif GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); @@ -449,9 +465,6 @@ check () char *const argv[] = { "test-gnunet-daemon-hostlist-learning", "-c", "learning_data.conf", -#if VERBOSE - "-L", "DEBUG", -#endif NULL }; struct GNUNET_GETOPT_CommandLineOption options[] = { @@ -505,11 +518,7 @@ main (int argc, char *argv[]) GNUNET_DISK_directory_remove ("/tmp/test-gnunet-hostlist-peer-1"); GNUNET_DISK_directory_remove ("/tmp/test-gnunet-hostlist-peer-2"); GNUNET_log_setup ("test-gnunet-daemon-hostlist", -#if VERBOSE - "DEBUG", -#else "WARNING", -#endif NULL); #if !WINDOWS system ("gnunet-peerinfo -s -c test_learning_adv_peer.conf > /dev/null"); diff --git a/src/hostlist/test_gnunet_daemon_hostlist_peer1.conf b/src/hostlist/test_gnunet_daemon_hostlist_peer1.conf index 535b60e..78dde57 100644 --- a/src/hostlist/test_gnunet_daemon_hostlist_peer1.conf +++ b/src/hostlist/test_gnunet_daemon_hostlist_peer1.conf @@ -38,6 +38,7 @@ HOSTLISTFILE = hostlists_peer1.file OPTIONS = -b -p SERVERS = http://localhost:12981/ +[ats] PORT = 12971 UNIXPATH = /tmp/gnunet-p1-service-ats.sock diff --git a/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c b/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c index a991557..ff6e417 100644 --- a/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c +++ b/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c @@ -172,7 +172,7 @@ waitpid_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ARM process %u stopped\n", GNUNET_OS_process_get_pid (p->arm_proc)); - GNUNET_OS_process_close (p->arm_proc); + GNUNET_OS_process_destroy (p->arm_proc); p->arm_proc = NULL; #endif GNUNET_CONFIGURATION_destroy (p->cfg); diff --git a/src/hostlist/test_hostlist_defaults.conf b/src/hostlist/test_hostlist_defaults.conf index 5772250..c2d0a70 100644 --- a/src/hostlist/test_hostlist_defaults.conf +++ b/src/hostlist/test_hostlist_defaults.conf @@ -60,3 +60,9 @@ AUTOSTART = NO [vpn] AUTOSTART = NO + +[namestore] +AUTOSTART = NO + +[lockmanager] +AUTOSTART = NO |