aboutsummaryrefslogtreecommitdiff
path: root/src/hostlist
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-08-15 21:54:06 +0000
committerChristian Grothoff <christian@grothoff.org>2011-08-15 21:54:06 +0000
commit5746309cb4be2073d550ad7a6885e918631dbc38 (patch)
tree89455bc4aadf977816b38df13f990372cd81d71a /src/hostlist
parent6fd3e715cae09fa6e657c96f1c6f9711ee51f42f (diff)
downloadgnunet-5746309cb4be2073d550ad7a6885e918631dbc38.tar.gz
gnunet-5746309cb4be2073d550ad7a6885e918631dbc38.zip
indentation
Diffstat (limited to 'src/hostlist')
-rw-r--r--src/hostlist/gnunet-daemon-hostlist.c48
-rw-r--r--src/hostlist/hostlist-client.c151
-rw-r--r--src/hostlist/hostlist-server.c125
-rw-r--r--src/hostlist/test_gnunet_daemon_hostlist.c34
-rw-r--r--src/hostlist/test_gnunet_daemon_hostlist_learning.c131
-rw-r--r--src/hostlist/test_gnunet_daemon_hostlist_reconnect.c34
6 files changed, 225 insertions, 298 deletions
diff --git a/src/hostlist/gnunet-daemon-hostlist.c b/src/hostlist/gnunet-daemon-hostlist.c
index c49aec765..9d47dfa9c 100644
--- a/src/hostlist/gnunet-daemon-hostlist.c
+++ b/src/hostlist/gnunet-daemon-hostlist.c
@@ -128,8 +128,7 @@ struct GNUNET_HOSTLIST_ADV_Message
128static struct GNUNET_PeerIdentity me; 128static struct GNUNET_PeerIdentity me;
129 129
130static void 130static void
131core_init (void *cls, 131core_init (void *cls, struct GNUNET_CORE_Handle *server,
132 struct GNUNET_CORE_Handle *server,
133 const struct GNUNET_PeerIdentity *my_identity, 132 const struct GNUNET_PeerIdentity *my_identity,
134 const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *publicKey) 133 const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *publicKey)
135{ 134{
@@ -140,8 +139,7 @@ core_init (void *cls,
140 * Core handler for p2p hostlist advertisements 139 * Core handler for p2p hostlist advertisements
141 */ 140 */
142static int 141static int
143advertisement_handler (void *cls, 142advertisement_handler (void *cls, const struct GNUNET_PeerIdentity *peer,
144 const struct GNUNET_PeerIdentity *peer,
145 const struct GNUNET_MessageHeader *message, 143 const struct GNUNET_MessageHeader *message,
146 const struct GNUNET_TRANSPORT_ATS_Information *atsi) 144 const struct GNUNET_TRANSPORT_ATS_Information *atsi)
147{ 145{
@@ -158,9 +156,7 @@ advertisement_handler (void *cls,
158 * @param atsi performance data 156 * @param atsi performance data
159 */ 157 */
160static void 158static void
161connect_handler (void *cls, 159connect_handler (void *cls, const struct GNUNET_PeerIdentity *peer,
162 const struct
163 GNUNET_PeerIdentity *peer,
164 const struct GNUNET_TRANSPORT_ATS_Information *atsi) 160 const struct GNUNET_TRANSPORT_ATS_Information *atsi)
165{ 161{
166 if (0 == memcmp (&me, peer, sizeof (struct GNUNET_PeerIdentity))) 162 if (0 == memcmp (&me, peer, sizeof (struct GNUNET_PeerIdentity)))
@@ -236,9 +232,8 @@ cleaning_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
236 * @param cfg configuration 232 * @param cfg configuration
237 */ 233 */
238static void 234static void
239run (void *cls, 235run (void *cls, char *const *args, const char *cfgfile,
240 char *const *args, 236 const struct GNUNET_CONFIGURATION_Handle *cfg)
241 const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
242{ 237{
243 static const struct GNUNET_CORE_MessageHandler learn_handlers[] = { 238 static const struct GNUNET_CORE_MessageHandler learn_handlers[] = {
244 {&advertisement_handler, GNUNET_MESSAGE_TYPE_HOSTLIST_ADVERTISEMENT, 0}, 239 {&advertisement_handler, GNUNET_MESSAGE_TYPE_HOSTLIST_ADVERTISEMENT, 0},
@@ -263,20 +258,16 @@ run (void *cls,
263 258
264 stats = GNUNET_STATISTICS_create ("hostlist", cfg); 259 stats = GNUNET_STATISTICS_create ("hostlist", cfg);
265 260
266 core = GNUNET_CORE_connect (cfg, 261 core =
267 1, 262 GNUNET_CORE_connect (cfg, 1, NULL, &core_init, &connect_handler,
268 NULL, 263 &disconnect_handler, NULL, NULL, GNUNET_NO, NULL,
269 &core_init, 264 GNUNET_NO,
270 &connect_handler, &disconnect_handler, NULL, 265 learning ? learn_handlers : no_learn_handlers);
271 NULL, GNUNET_NO,
272 NULL, GNUNET_NO,
273 learning ? learn_handlers : no_learn_handlers);
274 266
275 if (bootstrapping) 267 if (bootstrapping)
276 { 268 {
277 GNUNET_HOSTLIST_client_start (cfg, stats, 269 GNUNET_HOSTLIST_client_start (cfg, stats, &client_ch, &client_dh,
278 &client_ch, &client_dh, &client_adv_handler, 270 &client_adv_handler, learning);
279 learning);
280 } 271 }
281 272
282#if HAVE_MHD 273#if HAVE_MHD
@@ -286,8 +277,8 @@ run (void *cls,
286 advertising); 277 advertising);
287 } 278 }
288#endif 279#endif
289 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, 280 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleaning_task,
290 &cleaning_task, NULL); 281 NULL);
291 282
292 if (NULL == core) 283 if (NULL == core)
293 { 284 {
@@ -333,12 +324,11 @@ main (int argc, char *const *argv)
333 int ret; 324 int ret;
334 325
335 GNUNET_log_setup ("hostlist", "WARNING", NULL); 326 GNUNET_log_setup ("hostlist", "WARNING", NULL);
336 ret = (GNUNET_OK == 327 ret =
337 GNUNET_PROGRAM_run (argc, 328 (GNUNET_OK ==
338 argv, 329 GNUNET_PROGRAM_run (argc, argv, "hostlist",
339 "hostlist", 330 _("GNUnet hostlist server and client"), options,
340 _("GNUnet hostlist server and client"), 331 &run, NULL)) ? 0 : 1;
341 options, &run, NULL)) ? 0 : 1;
342 332
343 return ret; 333 return ret;
344} 334}
diff --git a/src/hostlist/hostlist-client.c b/src/hostlist/hostlist-client.c
index 422855f0e..c049dceea 100644
--- a/src/hostlist/hostlist-client.c
+++ b/src/hostlist/hostlist-client.c
@@ -366,8 +366,8 @@ get_bootstrap_server ()
366 size_t pos; 366 size_t pos;
367 367
368 if (GNUNET_OK != 368 if (GNUNET_OK !=
369 GNUNET_CONFIGURATION_get_value_string (cfg, 369 GNUNET_CONFIGURATION_get_value_string (cfg, "HOSTLIST", "SERVERS",
370 "HOSTLIST", "SERVERS", &servers)) 370 &servers))
371 { 371 {
372 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 372 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
373 _ 373 _
@@ -453,8 +453,8 @@ download_get_url ()
453 current_hostlist = NULL; 453 current_hostlist = NULL;
454 return get_bootstrap_server (); 454 return get_bootstrap_server ();
455 } 455 }
456 index = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 456 index =
457 linked_list_size); 457 GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, linked_list_size);
458 counter = 0; 458 counter = 0;
459 pos = linked_list_head; 459 pos = linked_list_head;
460 while (counter < index) 460 while (counter < index)
@@ -462,8 +462,8 @@ download_get_url ()
462 pos = pos->next; 462 pos = pos->next;
463 counter++; 463 counter++;
464 } 464 }
465 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 465 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Using learned hostlist `%s'\n",
466 "Using learned hostlist `%s'\n", pos->hostlist_uri); 466 pos->hostlist_uri);
467 current_hostlist = pos; 467 current_hostlist = pos;
468 return strdup (pos->hostlist_uri); 468 return strdup (pos->hostlist_uri);
469} 469}
@@ -585,11 +585,10 @@ insert_hostlist ()
585 linked_list_size--; 585 linked_list_size--;
586 GNUNET_free (lowest_quality); 586 GNUNET_free (lowest_quality);
587 } 587 }
588 GNUNET_CONTAINER_DLL_insert (linked_list_head, 588 GNUNET_CONTAINER_DLL_insert (linked_list_head, linked_list_tail,
589 linked_list_tail, hostlist_to_test); 589 hostlist_to_test);
590 linked_list_size++; 590 linked_list_size++;
591 GNUNET_STATISTICS_set (stats, 591 GNUNET_STATISTICS_set (stats, gettext_noop ("# advertised hostlist URIs"),
592 gettext_noop ("# advertised hostlist URIs"),
593 linked_list_size, GNUNET_NO); 592 linked_list_size, GNUNET_NO);
594 stat_testing_hostlist = GNUNET_NO; 593 stat_testing_hostlist = GNUNET_NO;
595} 594}
@@ -679,15 +678,13 @@ clean_up ()
679 mret = curl_multi_remove_handle (multi, curl); 678 mret = curl_multi_remove_handle (multi, curl);
680 if (mret != CURLM_OK) 679 if (mret != CURLM_OK)
681 { 680 {
682 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 681 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("%s failed at %s:%d: `%s'\n"),
683 _("%s failed at %s:%d: `%s'\n"),
684 "curl_multi_remove_handle", __FILE__, __LINE__, 682 "curl_multi_remove_handle", __FILE__, __LINE__,
685 curl_multi_strerror (mret)); 683 curl_multi_strerror (mret));
686 } 684 }
687 mret = curl_multi_cleanup (multi); 685 mret = curl_multi_cleanup (multi);
688 if (mret != CURLM_OK) 686 if (mret != CURLM_OK)
689 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 687 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("%s failed at %s:%d: `%s'\n"),
690 _("%s failed at %s:%d: `%s'\n"),
691 "curl_multi_cleanup", __FILE__, __LINE__, 688 "curl_multi_cleanup", __FILE__, __LINE__,
692 curl_multi_strerror (mret)); 689 curl_multi_strerror (mret));
693 multi = NULL; 690 multi = NULL;
@@ -711,8 +708,8 @@ clean_up ()
711 * @param cls closure, unused 708 * @param cls closure, unused
712 * @param tc task context, unused 709 * @param tc task context, unused
713 */ 710 */
714static void 711static void task_download (void *cls,
715task_download (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); 712 const struct GNUNET_SCHEDULER_TaskContext *tc);
716 713
717 714
718/** 715/**
@@ -739,8 +736,7 @@ download_prepare ()
739 mret = curl_multi_fdset (multi, &rs, &ws, &es, &max); 736 mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
740 if (mret != CURLM_OK) 737 if (mret != CURLM_OK)
741 { 738 {
742 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 739 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("%s failed at %s:%d: `%s'\n"),
743 _("%s failed at %s:%d: `%s'\n"),
744 "curl_multi_fdset", __FILE__, __LINE__, 740 "curl_multi_fdset", __FILE__, __LINE__,
745 curl_multi_strerror (mret)); 741 curl_multi_strerror (mret));
746 clean_up (); 742 clean_up ();
@@ -749,8 +745,7 @@ download_prepare ()
749 mret = curl_multi_timeout (multi, &timeout); 745 mret = curl_multi_timeout (multi, &timeout);
750 if (mret != CURLM_OK) 746 if (mret != CURLM_OK)
751 { 747 {
752 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 748 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("%s failed at %s:%d: `%s'\n"),
753 _("%s failed at %s:%d: `%s'\n"),
754 "curl_multi_timeout", __FILE__, __LINE__, 749 "curl_multi_timeout", __FILE__, __LINE__,
755 curl_multi_strerror (mret)); 750 curl_multi_strerror (mret));
756 clean_up (); 751 clean_up ();
@@ -768,10 +763,10 @@ download_prepare ()
768 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 763 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
769 "Scheduling task for hostlist download using cURL\n"); 764 "Scheduling task for hostlist download using cURL\n");
770#endif 765#endif
771 ti_download 766 ti_download =
772 = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, 767 GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
773 GNUNET_SCHEDULER_NO_TASK, 768 GNUNET_SCHEDULER_NO_TASK, rtime, grs, gws,
774 rtime, grs, gws, &task_download, multi); 769 &task_download, multi);
775 GNUNET_NETWORK_fdset_destroy (gws); 770 GNUNET_NETWORK_fdset_destroy (gws);
776 GNUNET_NETWORK_fdset_destroy (grs); 771 GNUNET_NETWORK_fdset_destroy (grs);
777} 772}
@@ -844,10 +839,8 @@ task_download (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
844 (msg->data.result != CURLE_GOT_NOTHING)) 839 (msg->data.result != CURLE_GOT_NOTHING))
845 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 840 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
846 _("%s failed for `%s' at %s:%d: `%s'\n"), 841 _("%s failed for `%s' at %s:%d: `%s'\n"),
847 "curl_multi_perform", 842 "curl_multi_perform", current_url, __FILE__, __LINE__,
848 current_url, 843 curl_easy_strerror (msg->data.result));
849 __FILE__,
850 __LINE__, curl_easy_strerror (msg->data.result));
851 else 844 else
852 { 845 {
853 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 846 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -880,8 +873,7 @@ task_download (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
880 873
881 if (mret != CURLM_OK) 874 if (mret != CURLM_OK)
882 { 875 {
883 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 876 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("%s failed at %s:%d: `%s'\n"),
884 _("%s failed at %s:%d: `%s'\n"),
885 "curl_multi_perform", __FILE__, __LINE__, 877 "curl_multi_perform", __FILE__, __LINE__,
886 curl_multi_strerror (mret)); 878 curl_multi_strerror (mret));
887 clean_up (); 879 clean_up ();
@@ -921,8 +913,8 @@ download_hostlist ()
921 stat_bytes_downloaded = 0; 913 stat_bytes_downloaded = 0;
922 914
923 GNUNET_STATISTICS_update (stats, 915 GNUNET_STATISTICS_update (stats,
924 gettext_noop ("# hostlist downloads initiated"), 916 gettext_noop ("# hostlist downloads initiated"), 1,
925 1, GNUNET_NO); 917 GNUNET_NO);
926 if (proxy != NULL) 918 if (proxy != NULL)
927 CURL_EASY_SETOPT (curl, CURLOPT_PROXY, proxy); 919 CURL_EASY_SETOPT (curl, CURLOPT_PROXY, proxy);
928 download_pos = 0; 920 download_pos = 0;
@@ -971,14 +963,12 @@ download_hostlist ()
971 mret = curl_multi_add_handle (multi, curl); 963 mret = curl_multi_add_handle (multi, curl);
972 if (mret != CURLM_OK) 964 if (mret != CURLM_OK)
973 { 965 {
974 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 966 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("%s failed at %s:%d: `%s'\n"),
975 _("%s failed at %s:%d: `%s'\n"),
976 "curl_multi_add_handle", __FILE__, __LINE__, 967 "curl_multi_add_handle", __FILE__, __LINE__,
977 curl_multi_strerror (mret)); 968 curl_multi_strerror (mret));
978 mret = curl_multi_cleanup (multi); 969 mret = curl_multi_cleanup (multi);
979 if (mret != CURLM_OK) 970 if (mret != CURLM_OK)
980 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 971 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("%s failed at %s:%d: `%s'\n"),
981 _("%s failed at %s:%d: `%s'\n"),
982 "curl_multi_cleanup", __FILE__, __LINE__, 972 "curl_multi_cleanup", __FILE__, __LINE__,
983 curl_multi_strerror (mret)); 973 curl_multi_strerror (mret));
984 multi = NULL; 974 multi = NULL;
@@ -1104,8 +1094,9 @@ task_hostlist_saving (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1104 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 1094 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
1105 _("Hostlists will be saved to file again in %llums\n"), 1095 _("Hostlists will be saved to file again in %llums\n"),
1106 (unsigned long long) SAVING_INTERVALL.rel_value); 1096 (unsigned long long) SAVING_INTERVALL.rel_value);
1107 ti_saving_task = GNUNET_SCHEDULER_add_delayed (SAVING_INTERVALL, 1097 ti_saving_task =
1108 &task_hostlist_saving, NULL); 1098 GNUNET_SCHEDULER_add_delayed (SAVING_INTERVALL, &task_hostlist_saving,
1099 NULL);
1109} 1100}
1110 1101
1111 1102
@@ -1117,16 +1108,13 @@ task_hostlist_saving (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1117 * @param atsi performance data 1108 * @param atsi performance data
1118 */ 1109 */
1119static void 1110static void
1120handler_connect (void *cls, 1111handler_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
1121 const struct
1122 GNUNET_PeerIdentity *peer,
1123 const struct GNUNET_TRANSPORT_ATS_Information *atsi) 1112 const struct GNUNET_TRANSPORT_ATS_Information *atsi)
1124{ 1113{
1125 GNUNET_assert (stat_connection_count < UINT_MAX); 1114 GNUNET_assert (stat_connection_count < UINT_MAX);
1126 stat_connection_count++; 1115 stat_connection_count++;
1127 GNUNET_STATISTICS_update (stats, 1116 GNUNET_STATISTICS_update (stats, gettext_noop ("# active connections"), 1,
1128 gettext_noop ("# active connections"), 1117 GNUNET_NO);
1129 1, GNUNET_NO);
1130} 1118}
1131 1119
1132 1120
@@ -1141,9 +1129,8 @@ handler_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer)
1141{ 1129{
1142 GNUNET_assert (stat_connection_count > 0); 1130 GNUNET_assert (stat_connection_count > 0);
1143 stat_connection_count--; 1131 stat_connection_count--;
1144 GNUNET_STATISTICS_update (stats, 1132 GNUNET_STATISTICS_update (stats, gettext_noop ("# active connections"), -1,
1145 gettext_noop ("# active connections"), 1133 GNUNET_NO);
1146 -1, GNUNET_NO);
1147} 1134}
1148 1135
1149 1136
@@ -1158,8 +1145,7 @@ handler_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer)
1158 * GNUNET_SYSERR to close it (signal serious error) 1145 * GNUNET_SYSERR to close it (signal serious error)
1159 */ 1146 */
1160static int 1147static int
1161handler_advertisement (void *cls, 1148handler_advertisement (void *cls, const struct GNUNET_PeerIdentity *peer,
1162 const struct GNUNET_PeerIdentity *peer,
1163 const struct GNUNET_MessageHeader *message, 1149 const struct GNUNET_MessageHeader *message,
1164 const struct GNUNET_TRANSPORT_ATS_Information *atsi) 1150 const struct GNUNET_TRANSPORT_ATS_Information *atsi)
1165{ 1151{
@@ -1217,9 +1203,9 @@ handler_advertisement (void *cls,
1217 1203
1218 stat_testing_hostlist = GNUNET_YES; 1204 stat_testing_hostlist = GNUNET_YES;
1219 stat_testing_allowed = GNUNET_NO; 1205 stat_testing_allowed = GNUNET_NO;
1220 ti_testing_intervall_task = GNUNET_SCHEDULER_add_delayed (TESTING_INTERVAL, 1206 ti_testing_intervall_task =
1221 &task_testing_intervall_reset, 1207 GNUNET_SCHEDULER_add_delayed (TESTING_INTERVAL,
1222 NULL); 1208 &task_testing_intervall_reset, NULL);
1223 1209
1224 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1210 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1225 "Testing new hostlist advertisements is locked for the next %u ms\n", 1211 "Testing new hostlist advertisements is locked for the next %u ms\n",
@@ -1255,9 +1241,8 @@ primary_task (void *cls, int success)
1255 1241
1256 1242
1257static int 1243static int
1258process_stat (void *cls, 1244process_stat (void *cls, const char *subsystem, const char *name,
1259 const char *subsystem, 1245 uint64_t value, int is_persistent)
1260 const char *name, uint64_t value, int is_persistent)
1261{ 1246{
1262 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 1247 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
1263 _("Initial time between hostlist downloads is %llums\n"), 1248 _("Initial time between hostlist downloads is %llums\n"),
@@ -1286,9 +1271,8 @@ load_hostlist_file ()
1286 uint32_t counter; 1271 uint32_t counter;
1287 1272
1288 if (GNUNET_OK != 1273 if (GNUNET_OK !=
1289 GNUNET_CONFIGURATION_get_value_filename (cfg, 1274 GNUNET_CONFIGURATION_get_value_filename (cfg, "HOSTLIST", "HOSTLISTFILE",
1290 "HOSTLIST", 1275 &filename))
1291 "HOSTLISTFILE", &filename))
1292 { 1276 {
1293 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 1277 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1294 _ 1278 _
@@ -1321,9 +1305,8 @@ load_hostlist_file ()
1321 1305
1322 counter = 0; 1306 counter = 0;
1323 while ((GNUNET_OK == GNUNET_BIO_read_string (rh, "url", &uri, MAX_URL_LEN)) && 1307 while ((GNUNET_OK == GNUNET_BIO_read_string (rh, "url", &uri, MAX_URL_LEN)) &&
1324 (NULL != uri) && 1308 (NULL != uri) && (GNUNET_OK == GNUNET_BIO_read_int32 (rh, &times_used))
1325 (GNUNET_OK == GNUNET_BIO_read_int32 (rh, &times_used)) && 1309 && (GNUNET_OK == GNUNET_BIO_read_int64 (rh, &quality)) &&
1326 (GNUNET_OK == GNUNET_BIO_read_int64 (rh, &quality)) &&
1327 (GNUNET_OK == GNUNET_BIO_read_int64 (rh, &last_used)) && 1310 (GNUNET_OK == GNUNET_BIO_read_int64 (rh, &last_used)) &&
1328 (GNUNET_OK == GNUNET_BIO_read_int64 (rh, &created)) && 1311 (GNUNET_OK == GNUNET_BIO_read_int64 (rh, &created)) &&
1329 (GNUNET_OK == GNUNET_BIO_read_int32 (rh, &hellos_returned))) 1312 (GNUNET_OK == GNUNET_BIO_read_int32 (rh, &hellos_returned)))
@@ -1347,13 +1330,11 @@ load_hostlist_file ()
1347 break; 1330 break;
1348 } 1331 }
1349 1332
1350 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 1333 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("%u hostlist URIs loaded from file\n"),
1351 _("%u hostlist URIs loaded from file\n"), counter); 1334 counter);
1352 GNUNET_STATISTICS_set (stats, 1335 GNUNET_STATISTICS_set (stats, gettext_noop ("# hostlist URIs read from file"),
1353 gettext_noop ("# hostlist URIs read from file"),
1354 counter, GNUNET_YES); 1336 counter, GNUNET_YES);
1355 GNUNET_STATISTICS_set (stats, 1337 GNUNET_STATISTICS_set (stats, gettext_noop ("# advertised hostlist URIs"),
1356 gettext_noop ("# advertised hostlist URIs"),
1357 linked_list_size, GNUNET_NO); 1338 linked_list_size, GNUNET_NO);
1358 1339
1359 GNUNET_free_non_null (uri); 1340 GNUNET_free_non_null (uri);
@@ -1379,9 +1360,8 @@ save_hostlist_file (int shutdown)
1379 uint32_t counter; 1360 uint32_t counter;
1380 1361
1381 if (GNUNET_OK != 1362 if (GNUNET_OK !=
1382 GNUNET_CONFIGURATION_get_value_filename (cfg, 1363 GNUNET_CONFIGURATION_get_value_filename (cfg, "HOSTLIST", "HOSTLISTFILE",
1383 "HOSTLIST", 1364 &filename))
1384 "HOSTLISTFILE", &filename))
1385 { 1365 {
1386 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 1366 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1387 _ 1367 _
@@ -1404,8 +1384,7 @@ save_hostlist_file (int shutdown)
1404 GNUNET_free (filename); 1384 GNUNET_free (filename);
1405 return; 1385 return;
1406 } 1386 }
1407 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 1387 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Writing %u hostlist URIs to `%s'\n"),
1408 _("Writing %u hostlist URIs to `%s'\n"),
1409 linked_list_size, filename); 1388 linked_list_size, filename);
1410 /* add code to write hostlists to file using bio */ 1389 /* add code to write hostlists to file using bio */
1411 ok = GNUNET_YES; 1390 ok = GNUNET_YES;
@@ -1419,12 +1398,9 @@ save_hostlist_file (int shutdown)
1419 } 1398 }
1420 if (GNUNET_YES == ok) 1399 if (GNUNET_YES == ok)
1421 { 1400 {
1422 if ((GNUNET_OK != 1401 if ((GNUNET_OK != GNUNET_BIO_write_string (wh, pos->hostlist_uri)) ||
1423 GNUNET_BIO_write_string (wh, pos->hostlist_uri)) || 1402 (GNUNET_OK != GNUNET_BIO_write_int32 (wh, pos->times_used)) ||
1424 (GNUNET_OK != 1403 (GNUNET_OK != GNUNET_BIO_write_int64 (wh, pos->quality)) ||
1425 GNUNET_BIO_write_int32 (wh, pos->times_used)) ||
1426 (GNUNET_OK !=
1427 GNUNET_BIO_write_int64 (wh, pos->quality)) ||
1428 (GNUNET_OK != 1404 (GNUNET_OK !=
1429 GNUNET_BIO_write_int64 (wh, pos->time_last_usage.abs_value)) || 1405 GNUNET_BIO_write_int64 (wh, pos->time_last_usage.abs_value)) ||
1430 (GNUNET_OK != 1406 (GNUNET_OK !=
@@ -1480,8 +1456,8 @@ GNUNET_HOSTLIST_client_start (const struct GNUNET_CONFIGURATION_Handle *c,
1480 cfg = c; 1456 cfg = c;
1481 stats = st; 1457 stats = st;
1482 if (GNUNET_OK != 1458 if (GNUNET_OK !=
1483 GNUNET_CONFIGURATION_get_value_string (cfg, 1459 GNUNET_CONFIGURATION_get_value_string (cfg, "HOSTLIST", "HTTP-PROXY",
1484 "HOSTLIST", "HTTP-PROXY", &proxy)) 1460 &proxy))
1485 proxy = NULL; 1461 proxy = NULL;
1486 stat_learning = learn; 1462 stat_learning = learn;
1487 *ch = &handler_connect; 1463 *ch = &handler_connect;
@@ -1501,18 +1477,18 @@ GNUNET_HOSTLIST_client_start (const struct GNUNET_CONFIGURATION_Handle *c,
1501 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 1477 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
1502 _("Hostlists will be saved to file again in %llums\n"), 1478 _("Hostlists will be saved to file again in %llums\n"),
1503 (unsigned long long) SAVING_INTERVALL.rel_value); 1479 (unsigned long long) SAVING_INTERVALL.rel_value);
1504 ti_saving_task = GNUNET_SCHEDULER_add_delayed (SAVING_INTERVALL, 1480 ti_saving_task =
1505 &task_hostlist_saving, NULL); 1481 GNUNET_SCHEDULER_add_delayed (SAVING_INTERVALL, &task_hostlist_saving,
1482 NULL);
1506 } 1483 }
1507 else 1484 else
1508 { 1485 {
1509 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 1486 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
1510 _("Learning is not enabled on this peer\n")); 1487 _("Learning is not enabled on this peer\n"));
1511 *msgh = NULL; 1488 *msgh = NULL;
1512 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_filename (cfg, 1489 if (GNUNET_OK ==
1513 "HOSTLIST", 1490 GNUNET_CONFIGURATION_get_value_filename (cfg, "HOSTLIST",
1514 "HOSTLISTFILE", 1491 "HOSTLISTFILE", &filename))
1515 &filename))
1516 { 1492 {
1517 if (GNUNET_YES == GNUNET_DISK_file_test (filename)) 1493 if (GNUNET_YES == GNUNET_DISK_file_test (filename))
1518 { 1494 {
@@ -1529,8 +1505,7 @@ GNUNET_HOSTLIST_client_start (const struct GNUNET_CONFIGURATION_Handle *c,
1529 } 1505 }
1530 GNUNET_free (filename); 1506 GNUNET_free (filename);
1531 } 1507 }
1532 GNUNET_STATISTICS_get (stats, 1508 GNUNET_STATISTICS_get (stats, "hostlist",
1533 "hostlist",
1534 gettext_noop 1509 gettext_noop
1535 ("# milliseconds between hostlist downloads"), 1510 ("# milliseconds between hostlist downloads"),
1536 GNUNET_TIME_UNIT_MINUTES, &primary_task, &process_stat, 1511 GNUNET_TIME_UNIT_MINUTES, &primary_task, &process_stat,
diff --git a/src/hostlist/hostlist-server.c b/src/hostlist/hostlist-server.c
index e30b3c1e0..e48b6a4ac 100644
--- a/src/hostlist/hostlist-server.c
+++ b/src/hostlist/hostlist-server.c
@@ -123,15 +123,15 @@ finish_response (struct HostSet *results)
123 "Creating hostlist response with %u bytes\n", 123 "Creating hostlist response with %u bytes\n",
124 (unsigned int) results->size); 124 (unsigned int) results->size);
125#endif 125#endif
126 response = MHD_create_response_from_data (results->size, 126 response =
127 results->data, MHD_YES, MHD_NO); 127 MHD_create_response_from_data (results->size, results->data, MHD_YES,
128 MHD_NO);
128 if ((daemon_handle_v4 == NULL) && (daemon_handle_v6 == NULL)) 129 if ((daemon_handle_v4 == NULL) && (daemon_handle_v6 == NULL))
129 { 130 {
130 MHD_destroy_response (response); 131 MHD_destroy_response (response);
131 response = NULL; 132 response = NULL;
132 } 133 }
133 GNUNET_STATISTICS_set (stats, 134 GNUNET_STATISTICS_set (stats, gettext_noop ("bytes in hostlist"),
134 gettext_noop ("bytes in hostlist"),
135 results->size, GNUNET_YES); 135 results->size, GNUNET_YES);
136 GNUNET_free (results); 136 GNUNET_free (results);
137} 137}
@@ -148,18 +148,17 @@ finish_response (struct HostSet *results)
148 * @return GNUNET_SYSERR to stop iterating (unless expiration has occured) 148 * @return GNUNET_SYSERR to stop iterating (unless expiration has occured)
149 */ 149 */
150static int 150static int
151check_has_addr (void *cls, 151check_has_addr (void *cls, const char *tname,
152 const char *tname, 152 struct GNUNET_TIME_Absolute expiration, const void *addr,
153 struct GNUNET_TIME_Absolute expiration, 153 uint16_t addrlen)
154 const void *addr, uint16_t addrlen)
155{ 154{
156 int *arg = cls; 155 int *arg = cls;
157 156
158 if (GNUNET_TIME_absolute_get_remaining (expiration).rel_value == 0) 157 if (GNUNET_TIME_absolute_get_remaining (expiration).rel_value == 0)
159 { 158 {
160 GNUNET_STATISTICS_update (stats, 159 GNUNET_STATISTICS_update (stats,
161 gettext_noop ("expired addresses encountered"), 160 gettext_noop ("expired addresses encountered"), 1,
162 1, GNUNET_YES); 161 GNUNET_YES);
163 return GNUNET_YES; /* ignore this address */ 162 return GNUNET_YES; /* ignore this address */
164 } 163 }
165 *arg = GNUNET_YES; 164 *arg = GNUNET_YES;
@@ -172,8 +171,7 @@ check_has_addr (void *cls,
172 * hostlist response construction. 171 * hostlist response construction.
173 */ 172 */
174static void 173static void
175host_processor (void *cls, 174host_processor (void *cls, const struct GNUNET_PeerIdentity *peer,
176 const struct GNUNET_PeerIdentity *peer,
177 const struct GNUNET_HELLO_Message *hello, const char *err_msg) 175 const struct GNUNET_HELLO_Message *hello, const char *err_msg)
178{ 176{
179 struct HostSet *results = cls; 177 struct HostSet *results = cls;
@@ -229,8 +227,8 @@ host_processor (void *cls,
229 } 227 }
230#if DEBUG_HOSTLIST_SERVER 228#if DEBUG_HOSTLIST_SERVER
231 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 229 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
232 "Adding peer `%s' to hostlist (%u bytes)\n", 230 "Adding peer `%s' to hostlist (%u bytes)\n", GNUNET_i2s (peer),
233 GNUNET_i2s (peer), (unsigned int) s); 231 (unsigned int) s);
234#endif 232#endif
235 GNUNET_array_grow (results->data, results->size, old + s); 233 GNUNET_array_grow (results->data, results->size, old + s);
236 memcpy (&results->data[old], hello, s); 234 memcpy (&results->data[old], hello, s);
@@ -242,8 +240,8 @@ host_processor (void *cls,
242 * Hostlist access policy (very permissive, allows everything). 240 * Hostlist access policy (very permissive, allows everything).
243 */ 241 */
244static int 242static int
245accept_policy_callback (void *cls, 243accept_policy_callback (void *cls, const struct sockaddr *addr,
246 const struct sockaddr *addr, socklen_t addrlen) 244 socklen_t addrlen)
247{ 245{
248 if (NULL == response) 246 if (NULL == response)
249 { 247 {
@@ -261,12 +259,9 @@ accept_policy_callback (void *cls,
261 * Main request handler. 259 * Main request handler.
262 */ 260 */
263static int 261static int
264access_handler_callback (void *cls, 262access_handler_callback (void *cls, struct MHD_Connection *connection,
265 struct MHD_Connection *connection, 263 const char *url, const char *method,
266 const char *url, 264 const char *version, const char *upload_data,
267 const char *method,
268 const char *version,
269 const char *upload_data,
270 size_t * upload_data_size, void **con_cls) 265 size_t * upload_data_size, void **con_cls)
271{ 266{
272 static int dummy; 267 static int dummy;
@@ -312,8 +307,7 @@ access_handler_callback (void *cls,
312 return MHD_NO; /* internal error, no response yet */ 307 return MHD_NO; /* internal error, no response yet */
313 } 308 }
314 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Received request for our hostlist\n")); 309 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Received request for our hostlist\n"));
315 GNUNET_STATISTICS_update (stats, 310 GNUNET_STATISTICS_update (stats, gettext_noop ("hostlist requests processed"),
316 gettext_noop ("hostlist requests processed"),
317 1, GNUNET_YES); 311 1, GNUNET_YES);
318 return MHD_queue_response (connection, MHD_HTTP_OK, response); 312 return MHD_queue_response (connection, MHD_HTTP_OK, response);
319} 313}
@@ -353,11 +347,11 @@ adv_transmit_ready (void *cls, size_t size, void *buf)
353 "Sent advertisement message: Copied %u bytes into buffer!\n", 347 "Sent advertisement message: Copied %u bytes into buffer!\n",
354 (unsigned int) transmission_size); 348 (unsigned int) transmission_size);
355 hostlist_adv_count++; 349 hostlist_adv_count++;
356 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 350 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " # Sent advertisement message: %u\n",
357 " # Sent advertisement message: %u\n", hostlist_adv_count); 351 hostlist_adv_count);
358 GNUNET_STATISTICS_update (stats, 352 GNUNET_STATISTICS_update (stats,
359 gettext_noop ("# hostlist advertisements send"), 353 gettext_noop ("# hostlist advertisements send"), 1,
360 1, GNUNET_NO); 354 GNUNET_NO);
361 return transmission_size; 355 return transmission_size;
362} 356}
363 357
@@ -370,9 +364,7 @@ adv_transmit_ready (void *cls, size_t size, void *buf)
370 * @param atsi performance data 364 * @param atsi performance data
371 */ 365 */
372static void 366static void
373connect_handler (void *cls, 367connect_handler (void *cls, const struct GNUNET_PeerIdentity *peer,
374 const struct
375 GNUNET_PeerIdentity *peer,
376 const struct GNUNET_TRANSPORT_ATS_Information *atsi) 368 const struct GNUNET_TRANSPORT_ATS_Information *atsi)
377{ 369{
378 size_t size; 370 size_t size;
@@ -397,13 +389,10 @@ connect_handler (void *cls,
397 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 389 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
398 "Asked core to transmit advertisement message with a size of %u bytes to peer `%s'\n", 390 "Asked core to transmit advertisement message with a size of %u bytes to peer `%s'\n",
399 size, GNUNET_i2s (peer)); 391 size, GNUNET_i2s (peer));
400 if (NULL == GNUNET_CORE_notify_transmit_ready (core, 392 if (NULL ==
401 GNUNET_YES, 393 GNUNET_CORE_notify_transmit_ready (core, GNUNET_YES, 0,
402 0, 394 GNUNET_ADV_TIMEOUT, peer, size,
403 GNUNET_ADV_TIMEOUT, 395 &adv_transmit_ready, NULL))
404 peer,
405 size,
406 &adv_transmit_ready, NULL))
407 { 396 {
408 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 397 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
409 _("Advertisement message could not be queued by core\n")); 398 _("Advertisement message could not be queued by core\n"));
@@ -433,8 +422,7 @@ disconnect_handler (void *cls, const struct GNUNET_PeerIdentity *peer)
433 * @param err_msg NULL if successful, otherwise contains error message 422 * @param err_msg NULL if successful, otherwise contains error message
434 */ 423 */
435static void 424static void
436process_notify (void *cls, 425process_notify (void *cls, const struct GNUNET_PeerIdentity *peer,
437 const struct GNUNET_PeerIdentity *peer,
438 const struct GNUNET_HELLO_Message *hello, const char *err_msg) 426 const struct GNUNET_HELLO_Message *hello, const char *err_msg)
439{ 427{
440 struct HostSet *results; 428 struct HostSet *results;
@@ -451,18 +439,17 @@ process_notify (void *cls,
451 } 439 }
452 results = GNUNET_malloc (sizeof (struct HostSet)); 440 results = GNUNET_malloc (sizeof (struct HostSet));
453 GNUNET_assert (peerinfo != NULL); 441 GNUNET_assert (peerinfo != NULL);
454 pitr = GNUNET_PEERINFO_iterate (peerinfo, 442 pitr =
455 NULL, 443 GNUNET_PEERINFO_iterate (peerinfo, NULL, GNUNET_TIME_UNIT_MINUTES,
456 GNUNET_TIME_UNIT_MINUTES, 444 &host_processor, results);
457 &host_processor, results);
458} 445}
459 446
460/** 447/**
461 * Function that queries MHD's select sets and 448 * Function that queries MHD's select sets and
462 * starts the task waiting for them. 449 * starts the task waiting for them.
463 */ 450 */
464static GNUNET_SCHEDULER_TaskIdentifier 451static GNUNET_SCHEDULER_TaskIdentifier prepare_daemon (struct MHD_Daemon
465prepare_daemon (struct MHD_Daemon *daemon_handle); 452 *daemon_handle);
466 453
467 454
468/** 455/**
@@ -524,9 +511,10 @@ prepare_daemon (struct MHD_Daemon *daemon_handle)
524 GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max + 1); 511 GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max + 1);
525 GNUNET_NETWORK_fdset_copy_native (wws, &ws, max + 1); 512 GNUNET_NETWORK_fdset_copy_native (wws, &ws, max + 1);
526 GNUNET_NETWORK_fdset_copy_native (wes, &es, max + 1); 513 GNUNET_NETWORK_fdset_copy_native (wes, &es, max + 1);
527 ret = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH, 514 ret =
528 GNUNET_SCHEDULER_NO_TASK, 515 GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
529 tv, wrs, wws, &run_daemon, daemon_handle); 516 GNUNET_SCHEDULER_NO_TASK, tv, wrs, wws,
517 &run_daemon, daemon_handle);
530 GNUNET_NETWORK_fdset_destroy (wrs); 518 GNUNET_NETWORK_fdset_destroy (wrs);
531 GNUNET_NETWORK_fdset_destroy (wws); 519 GNUNET_NETWORK_fdset_destroy (wws);
532 GNUNET_NETWORK_fdset_destroy (wes); 520 GNUNET_NETWORK_fdset_destroy (wes);
@@ -568,9 +556,9 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c,
568 _("Could not access PEERINFO service. Exiting.\n")); 556 _("Could not access PEERINFO service. Exiting.\n"));
569 return GNUNET_SYSERR; 557 return GNUNET_SYSERR;
570 } 558 }
571 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, 559 if (GNUNET_OK !=
572 "HOSTLIST", 560 GNUNET_CONFIGURATION_get_value_number (cfg, "HOSTLIST", "HTTPPORT",
573 "HTTPPORT", &port)) 561 &port))
574 return GNUNET_SYSERR; 562 return GNUNET_SYSERR;
575 if ((port == 0) || (port > UINT16_MAX)) 563 if ((port == 0) || (port > UINT16_MAX))
576 { 564 {
@@ -579,14 +567,13 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c,
579 return GNUNET_SYSERR; 567 return GNUNET_SYSERR;
580 } 568 }
581 569
582 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (cfg, 570 if (GNUNET_SYSERR ==
583 "HOSTLIST", 571 GNUNET_CONFIGURATION_get_value_string (cfg, "HOSTLIST",
584 "EXTERNAL_DNS_NAME", 572 "EXTERNAL_DNS_NAME", &hostname))
585 &hostname))
586 hostname = GNUNET_RESOLVER_local_fqdn_get (); 573 hostname = GNUNET_RESOLVER_local_fqdn_get ();
587 574
588 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 575 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Hostlist service starts on %s:%llu\n"),
589 _("Hostlist service starts on %s:%llu\n"), hostname, port); 576 hostname, port);
590 if (NULL != hostname) 577 if (NULL != hostname)
591 { 578 {
592 size = strlen (hostname); 579 size = strlen (hostname);
@@ -596,8 +583,8 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c,
596 } 583 }
597 else 584 else
598 { 585 {
599 GNUNET_asprintf (&hostlist_uri, 586 GNUNET_asprintf (&hostlist_uri, "http://%s:%u/", hostname,
600 "http://%s:%u/", hostname, (unsigned int) port); 587 (unsigned int) port);
601 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 588 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
602 _("Address to obtain hostlist: `%s'\n"), hostlist_uri); 589 _("Address to obtain hostlist: `%s'\n"), hostlist_uri);
603 } 590 }
@@ -607,12 +594,9 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c,
607#if DEBUG_HOSTLIST_SERVER 594#if DEBUG_HOSTLIST_SERVER
608 | MHD_USE_DEBUG 595 | MHD_USE_DEBUG
609#endif 596#endif
610 , 597 , (unsigned short) port,
611 (unsigned short) port, 598 &accept_policy_callback, NULL,
612 &accept_policy_callback, 599 &access_handler_callback, NULL,
613 NULL,
614 &access_handler_callback,
615 NULL,
616 MHD_OPTION_CONNECTION_LIMIT, 600 MHD_OPTION_CONNECTION_LIMIT,
617 (unsigned int) 16, 601 (unsigned int) 16,
618 MHD_OPTION_PER_IP_CONNECTION_LIMIT, 602 MHD_OPTION_PER_IP_CONNECTION_LIMIT,
@@ -625,12 +609,9 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c,
625#if DEBUG_HOSTLIST_SERVER 609#if DEBUG_HOSTLIST_SERVER
626 | MHD_USE_DEBUG 610 | MHD_USE_DEBUG
627#endif 611#endif
628 , 612 , (unsigned short) port,
629 (unsigned short) port, 613 &accept_policy_callback, NULL,
630 &accept_policy_callback, 614 &access_handler_callback, NULL,
631 NULL,
632 &access_handler_callback,
633 NULL,
634 MHD_OPTION_CONNECTION_LIMIT, 615 MHD_OPTION_CONNECTION_LIMIT,
635 (unsigned int) 16, 616 (unsigned int) 16,
636 MHD_OPTION_PER_IP_CONNECTION_LIMIT, 617 MHD_OPTION_PER_IP_CONNECTION_LIMIT,
diff --git a/src/hostlist/test_gnunet_daemon_hostlist.c b/src/hostlist/test_gnunet_daemon_hostlist.c
index 5cca8becd..909b946e7 100644
--- a/src/hostlist/test_gnunet_daemon_hostlist.c
+++ b/src/hostlist/test_gnunet_daemon_hostlist.c
@@ -95,8 +95,7 @@ timeout_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
95 * @param distance in overlay hops, as given by transport plugin 95 * @param distance in overlay hops, as given by transport plugin
96 */ 96 */
97static void 97static void
98notify_connect (void *cls, 98notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
99 const struct GNUNET_PeerIdentity *peer,
100 const struct GNUNET_TRANSPORT_ATS_Information *ats, 99 const struct GNUNET_TRANSPORT_ATS_Information *ats,
101 uint32_t ats_count) 100 uint32_t ats_count)
102{ 101{
@@ -129,16 +128,17 @@ setup_peer (struct PeerContext *p, const char *cfgname)
129{ 128{
130 p->cfg = GNUNET_CONFIGURATION_create (); 129 p->cfg = GNUNET_CONFIGURATION_create ();
131#if START_ARM 130#if START_ARM
132 p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", 131 p->arm_proc =
133 "gnunet-service-arm", 132 GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
133 "gnunet-service-arm",
134#if VERBOSE 134#if VERBOSE
135 "-L", "DEBUG", 135 "-L", "DEBUG",
136#endif 136#endif
137 "-c", cfgname, NULL); 137 "-c", cfgname, NULL);
138#endif 138#endif
139 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); 139 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
140 p->th = GNUNET_TRANSPORT_connect (p->cfg, NULL, p, NULL, 140 p->th =
141 &notify_connect, NULL); 141 GNUNET_TRANSPORT_connect (p->cfg, NULL, p, NULL, &notify_connect, NULL);
142 GNUNET_assert (p->th != NULL); 142 GNUNET_assert (p->th != NULL);
143 GNUNET_TRANSPORT_get_hello (p->th, &process_hello, p); 143 GNUNET_TRANSPORT_get_hello (p->th, &process_hello, p);
144} 144}
@@ -155,8 +155,7 @@ waitpid_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
155 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); 155 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill");
156 if (GNUNET_OS_process_wait (p->arm_proc) != GNUNET_OK) 156 if (GNUNET_OS_process_wait (p->arm_proc) != GNUNET_OK)
157 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); 157 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid");
158 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 158 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ARM process %u stopped\n",
159 "ARM process %u stopped\n",
160 GNUNET_OS_process_get_pid (p->arm_proc)); 159 GNUNET_OS_process_get_pid (p->arm_proc));
161 GNUNET_OS_process_close (p->arm_proc); 160 GNUNET_OS_process_close (p->arm_proc);
162 p->arm_proc = NULL; 161 p->arm_proc = NULL;
@@ -185,15 +184,14 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
185 184
186 185
187static void 186static void
188run (void *cls, 187run (void *cls, char *const *args, const char *cfgfile,
189 char *const *args, 188 const struct GNUNET_CONFIGURATION_Handle *cfg)
190 const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
191{ 189{
192 GNUNET_assert (ok == 1); 190 GNUNET_assert (ok == 1);
193 ok++; 191 ok++;
194 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL); 192 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL);
195 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, 193 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
196 &shutdown_task, NULL); 194 NULL);
197 setup_peer (&p1, "test_gnunet_daemon_hostlist_peer1.conf"); 195 setup_peer (&p1, "test_gnunet_daemon_hostlist_peer1.conf");
198 setup_peer (&p2, "test_gnunet_daemon_hostlist_peer2.conf"); 196 setup_peer (&p2, "test_gnunet_daemon_hostlist_peer2.conf");
199} 197}
@@ -213,9 +211,9 @@ check ()
213 GNUNET_GETOPT_OPTION_END 211 GNUNET_GETOPT_OPTION_END
214 }; 212 };
215 ok = 1; 213 ok = 1;
216 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, 214 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv,
217 argv, "test-gnunet-daemon-hostlist", 215 "test-gnunet-daemon-hostlist", "nohelp", options, &run,
218 "nohelp", options, &run, &ok); 216 &ok);
219 return ok; 217 return ok;
220} 218}
221 219
diff --git a/src/hostlist/test_gnunet_daemon_hostlist_learning.c b/src/hostlist/test_gnunet_daemon_hostlist_learning.c
index 7ecca8a85..2538e42fb 100644
--- a/src/hostlist/test_gnunet_daemon_hostlist_learning.c
+++ b/src/hostlist/test_gnunet_daemon_hostlist_learning.c
@@ -182,9 +182,8 @@ process_downloads_done (void *cls, int success)
182 182
183 183
184static int 184static int
185process_downloads (void *cls, 185process_downloads (void *cls, const char *subsystem, const char *name,
186 const char *subsystem, 186 uint64_t value, int is_persistent)
187 const char *name, uint64_t value, int is_persistent)
188{ 187{
189 if ((value >= 2) && (learned_hostlist_downloaded == GNUNET_NO)) 188 if ((value >= 2) && (learned_hostlist_downloaded == GNUNET_NO))
190 { 189 {
@@ -206,12 +205,11 @@ process_uris_recv_done (void *cls, int success)
206 205
207 206
208static int 207static int
209process_uris_recv (void *cls, 208process_uris_recv (void *cls, const char *subsystem, const char *name,
210 const char *subsystem, 209 uint64_t value, int is_persistent)
211 const char *name, uint64_t value, int is_persistent)
212{ 210{
213 if (((struct PeerContext *) cls == &learn_peer) && 211 if (((struct PeerContext *) cls == &learn_peer) && (value == 1) &&
214 (value == 1) && (learned_hostlist_saved == GNUNET_NO)) 212 (learned_hostlist_saved == GNUNET_NO))
215 { 213 {
216 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 214 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
217 "Peer has successfully saved advertised URI\n"); 215 "Peer has successfully saved advertised URI\n");
@@ -231,9 +229,8 @@ process_adv_sent_done (void *cls, int success)
231 229
232 230
233static int 231static int
234process_adv_sent (void *cls, 232process_adv_sent (void *cls, const char *subsystem, const char *name,
235 const char *subsystem, 233 uint64_t value, int is_persistent)
236 const char *name, uint64_t value, int is_persistent)
237{ 234{
238 if ((value >= 1) && (adv_sent == GNUNET_NO)) 235 if ((value >= 1) && (adv_sent == GNUNET_NO))
239 { 236 {
@@ -259,44 +256,39 @@ check_statistics (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
259 check_task = GNUNET_SCHEDULER_NO_TASK; 256 check_task = GNUNET_SCHEDULER_NO_TASK;
260 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 257 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
261 return; 258 return;
262 GNUNET_asprintf (&stat, 259 GNUNET_asprintf (&stat, gettext_noop ("# advertised URI `%s' downloaded"),
263 gettext_noop ("# advertised URI `%s' downloaded"),
264 current_adv_uri); 260 current_adv_uri);
265 if (NULL != learn_peer.stats) 261 if (NULL != learn_peer.stats)
266 { 262 {
267 if (NULL != download_stats) 263 if (NULL != download_stats)
268 GNUNET_STATISTICS_get_cancel (download_stats); 264 GNUNET_STATISTICS_get_cancel (download_stats);
269 download_stats = GNUNET_STATISTICS_get (learn_peer.stats, 265 download_stats =
270 "hostlist", 266 GNUNET_STATISTICS_get (learn_peer.stats, "hostlist", stat,
271 stat, 267 GNUNET_TIME_UNIT_MINUTES,
272 GNUNET_TIME_UNIT_MINUTES, 268 &process_downloads_done, &process_downloads,
273 &process_downloads_done, 269 &learn_peer);
274 &process_downloads, &learn_peer);
275 if (NULL != urisrecv_stat) 270 if (NULL != urisrecv_stat)
276 GNUNET_STATISTICS_get_cancel (urisrecv_stat); 271 GNUNET_STATISTICS_get_cancel (urisrecv_stat);
277 urisrecv_stat = GNUNET_STATISTICS_get (learn_peer.stats, 272 urisrecv_stat =
278 "hostlist", 273 GNUNET_STATISTICS_get (learn_peer.stats, "hostlist",
279 gettext_noop 274 gettext_noop ("# advertised hostlist URIs"),
280 ("# advertised hostlist URIs"), 275 GNUNET_TIME_UNIT_MINUTES,
281 GNUNET_TIME_UNIT_MINUTES, 276 &process_uris_recv_done, &process_uris_recv,
282 &process_uris_recv_done, 277 &learn_peer);
283 &process_uris_recv, &learn_peer);
284 } 278 }
285 GNUNET_free (stat); 279 GNUNET_free (stat);
286 if (NULL != adv_peer.stats) 280 if (NULL != adv_peer.stats)
287 { 281 {
288 if (NULL != advsent_stat) 282 if (NULL != advsent_stat)
289 GNUNET_STATISTICS_get_cancel (advsent_stat); 283 GNUNET_STATISTICS_get_cancel (advsent_stat);
290 advsent_stat = GNUNET_STATISTICS_get (adv_peer.stats, 284 advsent_stat =
291 "hostlist", 285 GNUNET_STATISTICS_get (adv_peer.stats, "hostlist",
292 gettext_noop 286 gettext_noop ("# hostlist advertisements send"),
293 ("# hostlist advertisements send"), 287 GNUNET_TIME_UNIT_MINUTES, &process_adv_sent_done,
294 GNUNET_TIME_UNIT_MINUTES, 288 &process_adv_sent, NULL);
295 &process_adv_sent_done,
296 &process_adv_sent, NULL);
297 } 289 }
298 check_task = GNUNET_SCHEDULER_add_delayed (CHECK_INTERVALL, 290 check_task =
299 &check_statistics, NULL); 291 GNUNET_SCHEDULER_add_delayed (CHECK_INTERVALL, &check_statistics, NULL);
300} 292}
301 293
302 294
@@ -304,8 +296,7 @@ check_statistics (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
304 * Core handler for p2p hostlist advertisements 296 * Core handler for p2p hostlist advertisements
305 */ 297 */
306static int 298static int
307ad_arrive_handler (void *cls, 299ad_arrive_handler (void *cls, const struct GNUNET_PeerIdentity *peer,
308 const struct GNUNET_PeerIdentity *peer,
309 const struct GNUNET_MessageHeader *message, 300 const struct GNUNET_MessageHeader *message,
310 const struct GNUNET_TRANSPORT_ATS_Information *atsi) 301 const struct GNUNET_TRANSPORT_ATS_Information *atsi)
311{ 302{
@@ -315,22 +306,20 @@ ad_arrive_handler (void *cls,
315 const struct GNUNET_MessageHeader *incoming; 306 const struct GNUNET_MessageHeader *incoming;
316 const char *end; 307 const char *end;
317 308
318 if (-1 == GNUNET_CONFIGURATION_get_value_number (adv_peer.cfg, 309 if (-1 ==
319 "HOSTLIST", 310 GNUNET_CONFIGURATION_get_value_number (adv_peer.cfg, "HOSTLIST",
320 "HTTPPORT", &port)) 311 "HTTPPORT", &port))
321 { 312 {
322 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 313 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
323 "Could not read advertising server's configuration\n"); 314 "Could not read advertising server's configuration\n");
324 return GNUNET_SYSERR; 315 return GNUNET_SYSERR;
325 } 316 }
326 317
327 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (adv_peer.cfg, 318 if (GNUNET_SYSERR ==
328 "HOSTLIST", 319 GNUNET_CONFIGURATION_get_value_string (adv_peer.cfg, "HOSTLIST",
329 "EXTERNAL_DNS_NAME", 320 "EXTERNAL_DNS_NAME", &hostname))
330 &hostname))
331 hostname = GNUNET_RESOLVER_local_fqdn_get (); 321 hostname = GNUNET_RESOLVER_local_fqdn_get ();
332 GNUNET_asprintf (&expected_uri, 322 GNUNET_asprintf (&expected_uri, "http://%s:%u/",
333 "http://%s:%u/",
334 hostname != NULL ? hostname : "localhost", 323 hostname != NULL ? hostname : "localhost",
335 (unsigned int) port); 324 (unsigned int) port);
336 incoming = (const struct GNUNET_MessageHeader *) message; 325 incoming = (const struct GNUNET_MessageHeader *) message;
@@ -379,18 +368,18 @@ setup_learn_peer (struct PeerContext *p, const char *cfgname)
379 368
380 p->cfg = GNUNET_CONFIGURATION_create (); 369 p->cfg = GNUNET_CONFIGURATION_create ();
381#if START_ARM 370#if START_ARM
382 p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", 371 p->arm_proc =
383 "gnunet-service-arm", 372 GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
373 "gnunet-service-arm",
384#if VERBOSE 374#if VERBOSE
385 "-L", "DEBUG", 375 "-L", "DEBUG",
386#endif 376#endif
387 "-c", cfgname, NULL); 377 "-c", cfgname, NULL);
388#endif 378#endif
389 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); 379 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
390 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (p->cfg, 380 if (GNUNET_OK ==
391 "HOSTLIST", 381 GNUNET_CONFIGURATION_get_value_string (p->cfg, "HOSTLIST", "HOSTLISTFILE",
392 "HOSTLISTFILE", 382 &filename))
393 &filename))
394 { 383 {
395 if (GNUNET_YES == GNUNET_DISK_file_test (filename)) 384 if (GNUNET_YES == GNUNET_DISK_file_test (filename))
396 { 385 {
@@ -401,13 +390,9 @@ setup_learn_peer (struct PeerContext *p, const char *cfgname)
401 } 390 }
402 GNUNET_free (filename); 391 GNUNET_free (filename);
403 } 392 }
404 p->core = GNUNET_CORE_connect (p->cfg, 393 p->core =
405 1, 394 GNUNET_CORE_connect (p->cfg, 1, NULL, NULL, NULL, NULL, NULL, NULL,
406 NULL, 395 GNUNET_NO, NULL, GNUNET_NO, learn_handlers);
407 NULL,
408 NULL, NULL, NULL,
409 NULL, GNUNET_NO,
410 NULL, GNUNET_NO, learn_handlers);
411 GNUNET_assert (NULL != p->core); 396 GNUNET_assert (NULL != p->core);
412 p->stats = GNUNET_STATISTICS_create ("hostlist", p->cfg); 397 p->stats = GNUNET_STATISTICS_create ("hostlist", p->cfg);
413 GNUNET_assert (NULL != p->stats); 398 GNUNET_assert (NULL != p->stats);
@@ -419,12 +404,13 @@ setup_adv_peer (struct PeerContext *p, const char *cfgname)
419{ 404{
420 p->cfg = GNUNET_CONFIGURATION_create (); 405 p->cfg = GNUNET_CONFIGURATION_create ();
421#if START_ARM 406#if START_ARM
422 p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", 407 p->arm_proc =
423 "gnunet-service-arm", 408 GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
409 "gnunet-service-arm",
424#if VERBOSE 410#if VERBOSE
425 "-L", "DEBUG", 411 "-L", "DEBUG",
426#endif 412#endif
427 "-c", cfgname, NULL); 413 "-c", cfgname, NULL);
428#endif 414#endif
429 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); 415 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
430 p->stats = GNUNET_STATISTICS_create ("hostlist", p->cfg); 416 p->stats = GNUNET_STATISTICS_create ("hostlist", p->cfg);
@@ -433,9 +419,8 @@ setup_adv_peer (struct PeerContext *p, const char *cfgname)
433 419
434 420
435static void 421static void
436run (void *cls, 422run (void *cls, char *const *args, const char *cfgfile,
437 char *const *args, 423 const struct GNUNET_CONFIGURATION_Handle *c)
438 const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c)
439{ 424{
440 timeout = GNUNET_NO; 425 timeout = GNUNET_NO;
441 adv_sent = GNUNET_NO; 426 adv_sent = GNUNET_NO;
@@ -450,8 +435,8 @@ run (void *cls,
450 setup_learn_peer (&learn_peer, "test_learning_learn_peer.conf"); 435 setup_learn_peer (&learn_peer, "test_learning_learn_peer.conf");
451 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL); 436 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL);
452 437
453 check_task = GNUNET_SCHEDULER_add_delayed (CHECK_INTERVALL, 438 check_task =
454 &check_statistics, NULL); 439 GNUNET_SCHEDULER_add_delayed (CHECK_INTERVALL, &check_statistics, NULL);
455} 440}
456 441
457 442
@@ -472,9 +457,9 @@ check ()
472 GNUNET_GETOPT_OPTION_END 457 GNUNET_GETOPT_OPTION_END
473 }; 458 };
474 459
475 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, 460 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv,
476 argv, "test-gnunet-daemon-hostlist-learning", 461 "test-gnunet-daemon-hostlist-learning", "nohelp", options,
477 "nohelp", options, &run, NULL); 462 &run, NULL);
478 failed = GNUNET_NO; 463 failed = GNUNET_NO;
479 if (timeout == GNUNET_YES) 464 if (timeout == GNUNET_YES)
480 { 465 {
diff --git a/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c b/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
index d1227da4c..ff625cf8e 100644
--- a/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
+++ b/src/hostlist/test_gnunet_daemon_hostlist_reconnect.c
@@ -96,8 +96,7 @@ timeout_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
96 * @param distance in overlay hops, as given by transport plugin 96 * @param distance in overlay hops, as given by transport plugin
97 */ 97 */
98static void 98static void
99notify_connect (void *cls, 99notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
100 const struct GNUNET_PeerIdentity *peer,
101 const struct GNUNET_TRANSPORT_ATS_Information *ats, 100 const struct GNUNET_TRANSPORT_ATS_Information *ats,
102 uint32_t ats_count) 101 uint32_t ats_count)
103{ 102{
@@ -133,16 +132,17 @@ setup_peer (struct PeerContext *p, const char *cfgname)
133{ 132{
134 p->cfg = GNUNET_CONFIGURATION_create (); 133 p->cfg = GNUNET_CONFIGURATION_create ();
135#if START_ARM 134#if START_ARM
136 p->arm_proc = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm", 135 p->arm_proc =
137 "gnunet-service-arm", 136 GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
137 "gnunet-service-arm",
138#if VERBOSE 138#if VERBOSE
139 "-L", "DEBUG", 139 "-L", "DEBUG",
140#endif 140#endif
141 "-c", cfgname, NULL); 141 "-c", cfgname, NULL);
142#endif 142#endif
143 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); 143 GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname));
144 p->th = GNUNET_TRANSPORT_connect (p->cfg, NULL, p, NULL, 144 p->th =
145 &notify_connect, NULL); 145 GNUNET_TRANSPORT_connect (p->cfg, NULL, p, NULL, &notify_connect, NULL);
146 GNUNET_assert (p->th != NULL); 146 GNUNET_assert (p->th != NULL);
147 GNUNET_TRANSPORT_get_hello (p->th, &process_hello, p); 147 GNUNET_TRANSPORT_get_hello (p->th, &process_hello, p);
148} 148}
@@ -159,8 +159,7 @@ waitpid_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
159 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); 159 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill");
160 if (GNUNET_OS_process_wait (p->arm_proc) != GNUNET_OK) 160 if (GNUNET_OS_process_wait (p->arm_proc) != GNUNET_OK)
161 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); 161 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid");
162 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 162 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ARM process %u stopped\n",
163 "ARM process %u stopped\n",
164 GNUNET_OS_process_get_pid (p->arm_proc)); 163 GNUNET_OS_process_get_pid (p->arm_proc));
165 GNUNET_OS_process_close (p->arm_proc); 164 GNUNET_OS_process_close (p->arm_proc);
166 p->arm_proc = NULL; 165 p->arm_proc = NULL;
@@ -189,15 +188,14 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
189 188
190 189
191static void 190static void
192run (void *cls, 191run (void *cls, char *const *args, const char *cfgfile,
193 char *const *args, 192 const struct GNUNET_CONFIGURATION_Handle *cfg)
194 const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
195{ 193{
196 GNUNET_assert (ok == 1); 194 GNUNET_assert (ok == 1);
197 ok++; 195 ok++;
198 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL); 196 timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &timeout_error, NULL);
199 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, 197 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
200 &shutdown_task, NULL); 198 NULL);
201 setup_peer (&p1, "test_gnunet_daemon_hostlist_peer1.conf"); 199 setup_peer (&p1, "test_gnunet_daemon_hostlist_peer1.conf");
202 setup_peer (&p2, "test_gnunet_daemon_hostlist_peer2.conf"); 200 setup_peer (&p2, "test_gnunet_daemon_hostlist_peer2.conf");
203} 201}
@@ -217,9 +215,9 @@ check ()
217 GNUNET_GETOPT_OPTION_END 215 GNUNET_GETOPT_OPTION_END
218 }; 216 };
219 ok = 1; 217 ok = 1;
220 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, 218 GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv,
221 argv, "test-gnunet-daemon-hostlist", 219 "test-gnunet-daemon-hostlist", "nohelp", options, &run,
222 "nohelp", options, &run, &ok); 220 &ok);
223 return ok; 221 return ok;
224} 222}
225 223