This file is part of GNUnet.
Copyright (C) 2008, 2009, 2010, 2014, 2016 GNUnet e.V.
- 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 3, or (at your
- option) any later version.
+ GNUnet is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Affero General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
GNUnet is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Affero General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ SPDX-License-Identifier: AGPL3.0-or-later
+ */
/**
* @file hostlist/gnunet-daemon-hostlist_server.c
* How long until our hostlist advertisment transmission via CORE should
* time out?
*/
-#define GNUNET_ADV_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5)
+#define GNUNET_ADV_TIMEOUT \
+ GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5)
/**
* Number of bytes in @e data.
*/
unsigned int size;
-
};
static void
add_cors_headers (struct MHD_Response *response)
{
- MHD_add_response_header (response,
- "Access-Control-Allow-Origin",
- "*");
+ MHD_add_response_header (response, "Access-Control-Allow-Origin", "*");
MHD_add_response_header (response,
"Access-Control-Allow-Methods",
"GET, OPTIONS");
- MHD_add_response_header (response,
- "Access-Control-Max-Age",
- "86400");
+ MHD_add_response_header (response, "Access-Control-Max-Age", "86400");
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Creating hostlist response with %u bytes\n",
(unsigned int) builder->size);
- response =
- MHD_create_response_from_buffer (builder->size,
- builder->data,
- MHD_RESPMEM_MUST_FREE);
+ response = MHD_create_response_from_buffer (builder->size,
+ builder->data,
+ MHD_RESPMEM_MUST_FREE);
add_cors_headers (response);
if ((NULL == daemon_handle_v4) && (NULL == daemon_handle_v6))
{
MHD_destroy_response (response);
response = NULL;
}
- GNUNET_STATISTICS_set (stats, gettext_noop ("bytes in hostlist"),
- builder->size, GNUNET_YES);
+ GNUNET_STATISTICS_set (stats,
+ gettext_noop ("bytes in hostlist"),
+ builder->size,
+ GNUNET_YES);
GNUNET_free (builder);
builder = NULL;
}
if (0 == GNUNET_TIME_absolute_get_remaining (expiration).rel_value_us)
{
GNUNET_STATISTICS_update (stats,
- gettext_noop ("expired addresses encountered"), 1,
+ gettext_noop ("expired addresses encountered"),
+ 1,
GNUNET_YES);
- return GNUNET_YES; /* ignore this address */
+ return GNUNET_YES; /* ignore this address */
}
*arg = GNUNET_YES;
return GNUNET_SYSERR;
GNUNET_free (builder);
builder = NULL;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- _("Error in communication with PEERINFO service: %s\n"),
+ _ ("Error in communication with PEERINFO service: %s\n"),
err_msg);
return;
}
if (NULL == hello)
return;
has_addr = GNUNET_NO;
- GNUNET_HELLO_iterate_addresses (hello,
- GNUNET_NO,
- &check_has_addr,
- &has_addr);
+ GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO, &check_has_addr, &has_addr);
if (GNUNET_NO == has_addr)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"HELLO for peer `%4s' has no address, not suitable for hostlist!\n",
GNUNET_i2s (peer));
GNUNET_STATISTICS_update (stats,
- gettext_noop
- ("HELLOs without addresses encountered (ignored)"),
- 1, GNUNET_NO);
+ gettext_noop (
+ "HELLOs without addresses encountered (ignored)"),
+ 1,
+ GNUNET_NO);
return;
}
old = builder->size;
(unsigned int) s,
"HELLO",
GNUNET_i2s (peer));
- if ( (old + s >= GNUNET_MAX_MALLOC_CHECKED) ||
- (old + s >= MAX_BYTES_PER_HOSTLISTS) )
+ if ((old + s >= GNUNET_MAX_MALLOC_CHECKED) ||
+ (old + s >= MAX_BYTES_PER_HOSTLISTS))
{
/* too large, skip! */
GNUNET_STATISTICS_update (stats,
- gettext_noop
- ("bytes not included in hostlist (size limit)"),
- s, GNUNET_NO);
+ gettext_noop (
+ "bytes not included in hostlist (size limit)"),
+ s,
+ GNUNET_NO);
return;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Adding peer `%s' to hostlist (%u bytes)\n",
GNUNET_i2s (peer),
(unsigned int) s);
- GNUNET_array_grow (builder->data,
- builder->size,
- old + s);
- GNUNET_memcpy (&builder->data[old],
- hello,
- s);
+ GNUNET_array_grow (builder->data, builder->size, old + s);
+ GNUNET_memcpy (&builder->data[old], hello, s);
}
{
if (NULL == response)
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Received request for hostlist, but I am not yet ready; rejecting!\n");
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_DEBUG,
+ "Received request for hostlist, but I am not yet ready; rejecting!\n");
return MHD_NO;
}
- return MHD_YES; /* accept all */
+ return MHD_YES; /* accept all */
}
struct MHD_Response *options_response;
int rc;
- options_response = MHD_create_response_from_buffer (0, NULL,
- MHD_RESPMEM_PERSISTENT);
- add_cors_headers(options_response);
+ options_response =
+ MHD_create_response_from_buffer (0, NULL, MHD_RESPMEM_PERSISTENT);
+ add_cors_headers (options_response);
rc = MHD_queue_response (connection, MHD_HTTP_OK, options_response);
MHD_destroy_response (options_response);
return rc;
if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("Refusing `%s' request to hostlist server\n"), method);
+ _ ("Refusing `%s' request to hostlist server\n"),
+ method);
GNUNET_STATISTICS_update (stats,
- gettext_noop
- ("hostlist requests refused (not HTTP GET)"), 1,
+ gettext_noop (
+ "hostlist requests refused (not HTTP GET)"),
+ 1,
GNUNET_YES);
return MHD_NO;
}
if (0 != *upload_data_size)
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("Refusing `%s' request with %llu bytes of upload data\n"),
- method, (unsigned long long) *upload_data_size);
+ _ ("Refusing `%s' request with %llu bytes of upload data\n"),
+ method,
+ (unsigned long long) *upload_data_size);
GNUNET_STATISTICS_update (stats,
- gettext_noop
- ("hostlist requests refused (upload data)"), 1,
+ gettext_noop (
+ "hostlist requests refused (upload data)"),
+ 1,
GNUNET_YES);
- return MHD_NO; /* do not support upload data */
+ return MHD_NO; /* do not support upload data */
}
if (NULL == response)
{
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("Could not handle hostlist request since I do not have a response yet\n"));
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_WARNING,
+ _ (
+ "Could not handle hostlist request since I do not have a response yet\n"));
GNUNET_STATISTICS_update (stats,
- gettext_noop
- ("hostlist requests refused (not ready)"), 1,
+ gettext_noop (
+ "hostlist requests refused (not ready)"),
+ 1,
GNUNET_YES);
- return MHD_NO; /* internal error, no response yet */
+ return MHD_NO; /* internal error, no response yet */
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- _("Received request for our hostlist\n"));
+ _ ("Received request for our hostlist\n"));
GNUNET_STATISTICS_update (stats,
gettext_noop ("hostlist requests processed"),
- 1, GNUNET_YES);
+ 1,
+ GNUNET_YES);
return MHD_queue_response (connection, MHD_HTTP_OK, response);
}
adv_transmit (struct GNUNET_MQ_Handle *mq)
{
static uint64_t hostlist_adv_count;
- const void *extra;
- uint64_t flags;
- size_t uri_size; /* Including \0 termination! */
+ size_t uri_size; /* Including \0 termination! */
struct GNUNET_MessageHeader *header;
struct GNUNET_MQ_Envelope *env;
- extra = GNUNET_CORE_get_mq_options (GNUNET_YES,
- GNUNET_CORE_PRIO_BEST_EFFORT,
- &flags);
uri_size = strlen (hostlist_uri) + 1;
env = GNUNET_MQ_msg_extra (header,
- uri_size,
- GNUNET_MESSAGE_TYPE_HOSTLIST_ADVERTISEMENT);
- GNUNET_memcpy (&header[1],
- hostlist_uri,
- uri_size);
+ uri_size,
+ GNUNET_MESSAGE_TYPE_HOSTLIST_ADVERTISEMENT);
+ GNUNET_memcpy (&header[1], hostlist_uri, uri_size);
GNUNET_MQ_env_set_options (env,
- flags,
- extra);
- GNUNET_MQ_send (mq,
- env);
+ GNUNET_MQ_PREF_CORK_ALLOWED
+ | GNUNET_MQ_PREF_UNRELIABLE);
+ GNUNET_MQ_send (mq, env);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Sent advertisement message: Copied %u bytes into buffer!\n",
(unsigned int) uri_size);
" # Sent advertisement message: %llu\n",
(unsigned long long) hostlist_adv_count);
GNUNET_STATISTICS_update (stats,
- gettext_noop ("# hostlist advertisements send"), 1,
+ gettext_noop ("# hostlist advertisements send"),
+ 1,
GNUNET_NO);
}
static void *
connect_handler (void *cls,
const struct GNUNET_PeerIdentity *peer,
- struct GNUNET_MQ_Handle *mq)
+ struct GNUNET_MQ_Handle *mq)
{
size_t size;
if (NULL == hostlist_uri)
return NULL;
size = strlen (hostlist_uri) + 1;
- if (size + sizeof (struct GNUNET_MessageHeader) >=
- GNUNET_SERVER_MAX_MESSAGE_SIZE)
+ if (size + sizeof(struct GNUNET_MessageHeader) >= GNUNET_MAX_MESSAGE_SIZE)
{
GNUNET_break (0);
return NULL;
}
- size += sizeof (struct GNUNET_MessageHeader);
+ size += sizeof(struct GNUNET_MessageHeader);
if (NULL == core)
{
GNUNET_break (0);
return NULL;
}
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Asked CORE to transmit advertisement message with a size of %u bytes to peer `%s'\n",
- (unsigned int) size,
- GNUNET_i2s (peer));
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_DEBUG,
+ "Asked CORE to transmit advertisement message with a size of %u bytes to peer `%s'\n",
+ (unsigned int) size,
+ GNUNET_i2s (peer));
adv_transmit (mq);
return NULL;
}
"Peerinfo is notifying us to rebuild our hostlist\n");
if (NULL != err_msg)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- _("Error in communication with PEERINFO service: %s\n"),
- err_msg);
+ _ ("Error in communication with PEERINFO service: %s\n"),
+ err_msg);
if (NULL != builder)
{
/* restart re-build already in progress ... */
builder = GNUNET_new (struct HostSet);
}
GNUNET_assert (NULL != peerinfo);
- builder->pitr
- = GNUNET_PEERINFO_iterate (peerinfo,
- GNUNET_NO, NULL,
- &host_processor, NULL);
+ builder->pitr =
+ GNUNET_PEERINFO_iterate (peerinfo, GNUNET_NO, NULL, &host_processor, NULL);
}
static struct GNUNET_SCHEDULER_Task *
prepare_daemon (struct MHD_Daemon *daemon_handle)
{
- struct GNUNET_SCHEDULER_Task * ret;
+ struct GNUNET_SCHEDULER_Task *ret;
fd_set rs;
fd_set ws;
fd_set es;
wrs = GNUNET_NETWORK_fdset_create ();
wws = GNUNET_NETWORK_fdset_create ();
max = -1;
- GNUNET_assert (MHD_YES ==
- MHD_get_fdset (daemon_handle,
- &rs, &ws, &es, &max));
+ GNUNET_assert (MHD_YES == MHD_get_fdset (daemon_handle, &rs, &ws, &es, &max));
haveto = MHD_get_timeout (daemon_handle, &timeout);
if (haveto == MHD_YES)
tv.rel_value_us = (uint64_t) timeout * 1000LL;
GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max + 1);
GNUNET_NETWORK_fdset_copy_native (wws, &ws, max + 1);
ret = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
- tv, wrs, wws,
- &run_daemon, daemon_handle);
+ tv,
+ wrs,
+ wws,
+ &run_daemon,
+ daemon_handle);
GNUNET_NETWORK_fdset_destroy (wrs);
GNUNET_NETWORK_fdset_destroy (wws);
return ret;
GNUNET_HOSTLIST_server_start (const struct GNUNET_CONFIGURATION_Handle *c,
struct GNUNET_STATISTICS_Handle *st,
struct GNUNET_CORE_Handle *co,
- GNUNET_CORE_ConnecTEventHandler *server_ch,
+ GNUNET_CORE_ConnectEventHandler *server_ch,
int advertise)
{
unsigned long long port;
if (NULL == peerinfo)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Could not access PEERINFO service. Exiting.\n"));
+ _ ("Could not access PEERINFO service. Exiting.\n"));
return GNUNET_SYSERR;
}
- if (GNUNET_OK !=
- 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 ((0 == port) || (port > UINT16_MAX))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Invalid port number %llu. Exiting.\n"),
+ _ ("Invalid port number %llu. Exiting.\n"),
port);
return GNUNET_SYSERR;
}
&hostname))
hostname = GNUNET_RESOLVER_local_fqdn_get ();
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- _("Hostlist service starts on %s:%llu\n"),
- hostname, port);
+ _ ("Hostlist service starts on %s:%llu\n"),
+ hostname,
+ port);
if (NULL != hostname)
{
size = strlen (hostname);
else
{
GNUNET_asprintf (&hostlist_uri,
- "http://%s:%u/", hostname,
+ "http://%s:%u/",
+ hostname,
(unsigned int) port);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- _("Address to obtain hostlist: `%s'\n"),
+ _ ("Address to obtain hostlist: `%s'\n"),
hostlist_uri);
}
GNUNET_free (hostname);
if (GNUNET_CONFIGURATION_have_value (cfg, "HOSTLIST", "BINDTOIPV4"))
{
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (cfg, "HOSTLIST",
- "BINDTOIP", &ipv4))
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg,
+ "HOSTLIST",
+ "BINDTOIP",
+ &ipv4))
{
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"));
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_WARNING,
+ _ ("BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"));
}
-
}
else
ipv4 = NULL;
- if (GNUNET_CONFIGURATION_have_value (cfg,
- "HOSTLIST",
- "BINDTOIPV6"))
- {
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (cfg,
- "HOSTLIST",
- "BINDTOIP",
- &ipv6))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"));
+ if (GNUNET_CONFIGURATION_have_value (cfg, "HOSTLIST", "BINDTOIPV6"))
+ {
+ if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg,
+ "HOSTLIST",
+ "BINDTOIP",
+ &ipv6))
+ {
+ GNUNET_log (
+ GNUNET_ERROR_TYPE_WARNING,
+ _ ("BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"));
}
}
else
{
if (1 == inet_pton (AF_INET, ipv4, &i4))
{
- memset (&v4, 0, sizeof (v4));
+ 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);
+ v4.sin_len = sizeof(v4);
#endif
sa4 = (const struct sockaddr *) &v4;
}
else
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"),
+ _ (
+ "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"),
ipv4);
GNUNET_free (ipv4);
}
{
if (1 == inet_pton (AF_INET6, ipv6, &i6))
{
- memset (&v6, 0, sizeof (v6));
+ 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);
+ v6.sin6_len = sizeof(v6);
#endif
sa6 = (const struct sockaddr *) &v6;
}
else
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- _("`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"),
+ _ (
+ "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"),
ipv6);
GNUNET_free (ipv6);
}
daemon_handle_v6 = MHD_start_daemon (MHD_USE_IPv6 | MHD_USE_DEBUG,
(uint16_t) port,
- &accept_policy_callback, NULL,
- &access_handler_callback, NULL,
+ &accept_policy_callback,
+ NULL,
+ &access_handler_callback,
+ NULL,
MHD_OPTION_CONNECTION_LIMIT,
(unsigned int) 128,
MHD_OPTION_PER_IP_CONNECTION_LIMIT,
sa6,
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,
+ (uint16_t) port,
+ &accept_policy_callback,
+ NULL,
+ &access_handler_callback,
+ NULL,
MHD_OPTION_CONNECTION_LIMIT,
(unsigned int) 128,
MHD_OPTION_PER_IP_CONNECTION_LIMIT,
sa4,
MHD_OPTION_END);
- if ( (NULL == daemon_handle_v6) &&
- (NULL == daemon_handle_v4) )
+ 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"),
+ _ ("Could not start hostlist HTTP server on port %u\n"),
(unsigned short) port);
return GNUNET_SYSERR;
}
hostlist_task_v4 = prepare_daemon (daemon_handle_v4);
if (NULL != daemon_handle_v6)
hostlist_task_v6 = prepare_daemon (daemon_handle_v6);
- notify = GNUNET_PEERINFO_notify (cfg,
- GNUNET_NO,
- &process_notify, NULL);
+ notify = GNUNET_PEERINFO_notify (cfg, GNUNET_NO, &process_notify, NULL);
return GNUNET_OK;
}
void
GNUNET_HOSTLIST_server_stop ()
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Hostlist server shutdown\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Hostlist server shutdown\n");
if (NULL != hostlist_task_v6)
{
GNUNET_SCHEDULER_cancel (hostlist_task_v6);
core = NULL;
}
+
/* end of gnunet-daemon-hostlist_server.c */