X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fhostlist%2Fhostlist-server.c;h=95272a555697f28a9b4c247a7340abc36ea572a6;hb=11489754ee4b080b31dc68471e3dc3c7ae2885ce;hp=7c440c10383f23652a9e5a4e594f8034db972ef5;hpb=6e68bd6374d100059d09dbd0912f749767bdfb8e;p=oweals%2Fgnunet.git diff --git a/src/hostlist/hostlist-server.c b/src/hostlist/hostlist-server.c index 7c440c103..95272a555 100644 --- a/src/hostlist/hostlist-server.c +++ b/src/hostlist/hostlist-server.c @@ -4,7 +4,7 @@ GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your + by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but @@ -49,11 +49,6 @@ static struct MHD_Daemon *daemon_handle_v4; */ static const struct GNUNET_CONFIGURATION_Handle *cfg; -/** - * Our scheduler. - */ -static struct GNUNET_SCHEDULER_Handle *sched; - /** * For keeping statistics. */ @@ -62,12 +57,12 @@ static struct GNUNET_STATISTICS_Handle *stats; /** * Handle to the core service (NULL until we've connected to it). */ -struct GNUNET_CORE_Handle *core; +static struct GNUNET_CORE_Handle *core; /** * Handle to the peerinfo notify service (NULL until we've connected to it). */ -struct GNUNET_PEERINFO_NotifyContext *notify; +static struct GNUNET_PEERINFO_NotifyContext *notify; /** * Our primary task for IPv4. @@ -109,11 +104,6 @@ struct HostSet */ static int advertising; -/** - * How many times was the hostlist advertised? - */ -static uint64_t hostlist_adv_count; - /** * Buffer for the hostlist address */ @@ -163,11 +153,12 @@ static int check_has_addr (void *cls, const char *tname, struct GNUNET_TIME_Absolute expiration, - const void *addr, size_t addrlen) + const void *addr, + uint16_t addrlen) { int *arg = cls; - if (GNUNET_TIME_absolute_get_remaining (expiration).value == 0) + if (GNUNET_TIME_absolute_get_remaining (expiration).rel_value == 0) { GNUNET_STATISTICS_update (stats, gettext_noop("expired addresses encountered"), @@ -187,8 +178,7 @@ check_has_addr (void *cls, static void host_processor (void *cls, const struct GNUNET_PeerIdentity * peer, - const struct GNUNET_HELLO_Message *hello, - uint32_t trust) + const struct GNUNET_HELLO_Message *hello) { struct HostSet *results = cls; size_t old; @@ -228,7 +218,7 @@ host_processor (void *cls, "HELLO", GNUNET_i2s (peer)); #endif - if (old + s >= GNUNET_MAX_MALLOC_CHECKED) + if ( (old + s >= GNUNET_MAX_MALLOC_CHECKED) || (old + s >= MAX_BYTES_PER_HOSTLISTS) ) { GNUNET_STATISTICS_update (stats, gettext_noop("bytes not included in hostlist (size limit)"), @@ -344,6 +334,8 @@ access_handler_callback (void *cls, 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; @@ -371,10 +363,10 @@ adv_transmit_ready ( void *cls, size_t size, void *buf) GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " # Sent advertisement message: %u\n", hostlist_adv_count); - GNUNET_STATISTICS_set (stats, - gettext_noop("# hostlist advertisements send"), - hostlist_adv_count, - GNUNET_NO); + GNUNET_STATISTICS_update (stats, + gettext_noop("# hostlist advertisements send"), + 1, + GNUNET_NO); return transmission_size; } @@ -384,15 +376,13 @@ adv_transmit_ready ( void *cls, size_t size, void *buf) * * @param cls closure * @param peer peer identity this notification is about - * @param latency reported latency of the connection with 'other' - * @param distance reported distance (DV) to 'other' + * @param atsi performance data */ static void connect_handler (void *cls, const struct GNUNET_PeerIdentity * peer, - struct GNUNET_TIME_Relative latency, - uint32_t distance) + const struct GNUNET_TRANSPORT_ATS_Information *atsi) { size_t size; @@ -401,7 +391,7 @@ connect_handler (void *cls, if (hostlist_uri == NULL) return; size = strlen (hostlist_uri) + 1; - if (size + sizeof (struct GNUNET_MessageHeader) > GNUNET_SERVER_MAX_MESSAGE_SIZE) + if (size + sizeof (struct GNUNET_MessageHeader) >= GNUNET_SERVER_MAX_MESSAGE_SIZE) { GNUNET_break (0); return; @@ -449,13 +439,11 @@ disconnect_handler (void *cls, * @param cls closure (not used) * @param peer potential peer to connect to * @param hello HELLO for this peer (or NULL) - * @param trust how much we trust the peer (not used) */ static void process_notify (void *cls, const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_HELLO_Message *hello, - uint32_t trust) + const struct GNUNET_HELLO_Message *hello) { struct HostSet *results; #if DEBUG_HOSTLIST_SERVER @@ -466,7 +454,6 @@ process_notify (void *cls, GNUNET_assert (peerinfo != NULL); pitr = GNUNET_PEERINFO_iterate (peerinfo, NULL, - 0, GNUNET_TIME_UNIT_MINUTES, &host_processor, results); @@ -539,14 +526,13 @@ prepare_daemon (struct MHD_Daemon *daemon_handle) &max)); haveto = MHD_get_timeout (daemon_handle, &timeout); if (haveto == MHD_YES) - tv.value = (uint64_t) timeout; + tv.rel_value = (uint64_t) timeout; else tv = GNUNET_TIME_UNIT_FOREVER_REL; - GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max); - GNUNET_NETWORK_fdset_copy_native (wws, &ws, max); - GNUNET_NETWORK_fdset_copy_native (wes, &es, max); - ret = GNUNET_SCHEDULER_add_select (sched, - GNUNET_SCHEDULER_PRIORITY_HIGH, + GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max + 1); + GNUNET_NETWORK_fdset_copy_native (wws, &ws, max + 1); + GNUNET_NETWORK_fdset_copy_native (wes, &es, max + 1); + ret = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH, GNUNET_SCHEDULER_NO_TASK, tv, wrs, @@ -568,7 +554,6 @@ prepare_daemon (struct MHD_Daemon *daemon_handle) */ int GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, - struct GNUNET_SCHEDULER_Handle *s, struct GNUNET_STATISTICS_Handle *st, struct GNUNET_CORE_Handle *co, GNUNET_CORE_ConnectEventHandler *server_ch, @@ -586,25 +571,38 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, else GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Advertising enabled on this hostlist server\n"); - sched = s; cfg = c; stats = st; - peerinfo = GNUNET_PEERINFO_connect (sched, cfg); + peerinfo = GNUNET_PEERINFO_connect (cfg); if (peerinfo == NULL) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Could not access PEERINFO service. Exiting.\n")); return GNUNET_SYSERR; } - if (-1 == GNUNET_CONFIGURATION_get_value_number (cfg, - "HOSTLIST", - "HTTPPORT", - &port)) + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (cfg, + "HOSTLIST", + "HTTPPORT", + &port)) return GNUNET_SYSERR; + if ( (port == 0) || + (port > UINT16_MAX) ) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Invalid port number %llu. Exiting.\n"), + port); + return GNUNET_SYSERR; + } + + if ( GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (cfg, + "HOSTLIST", + "EXTERNAL_DNS_NAME", + &hostname)) + hostname = GNUNET_RESOLVER_local_fqdn_get (); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, - _("Hostlist service starts on port %llu\n"), - port); - hostname = GNUNET_RESOLVER_local_fqdn_get (); + _("Hostlist service starts on %s:%llu\n"), + hostname, port); if (NULL != hostname) { size = strlen (hostname); @@ -674,7 +672,7 @@ GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c, if (daemon_handle_v6 != NULL) hostlist_task_v6 = prepare_daemon (daemon_handle_v6); - notify = GNUNET_PEERINFO_notify ( cfg, sched, process_notify, NULL); + notify = GNUNET_PEERINFO_notify ( cfg, process_notify, NULL); return GNUNET_OK; } @@ -696,12 +694,12 @@ GNUNET_HOSTLIST_server_stop () } if (GNUNET_SCHEDULER_NO_TASK != hostlist_task_v6) { - GNUNET_SCHEDULER_cancel (sched, hostlist_task_v6); + GNUNET_SCHEDULER_cancel (hostlist_task_v6); hostlist_task_v6 = GNUNET_SCHEDULER_NO_TASK; } if (GNUNET_SCHEDULER_NO_TASK != hostlist_task_v4) { - GNUNET_SCHEDULER_cancel (sched, hostlist_task_v4); + GNUNET_SCHEDULER_cancel (hostlist_task_v4); hostlist_task_v4 = GNUNET_SCHEDULER_NO_TASK; } if (pitr != NULL) @@ -729,6 +727,9 @@ GNUNET_HOSTLIST_server_stop () GNUNET_PEERINFO_disconnect (peerinfo); peerinfo = NULL; } + cfg = NULL; + stats = NULL; + core = NULL; } /* end of hostlist-server.c */