X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftransport%2Fplugin_transport_udp_broadcasting.c;h=0c26aa62493760f66ff0aee499e034bad462b5c2;hb=1b1edf92c24f91c36747458e880e0d6a5e559e95;hp=767bddff4b68f1450edd79ca0f123b2a42f12646;hpb=3629ff42683654fe6dcc6463a77faaeb27ae3203;p=oweals%2Fgnunet.git diff --git a/src/transport/plugin_transport_udp_broadcasting.c b/src/transport/plugin_transport_udp_broadcasting.c index 767bddff4..0c26aa624 100644 --- a/src/transport/plugin_transport_udp_broadcasting.c +++ b/src/transport/plugin_transport_udp_broadcasting.c @@ -1,21 +1,21 @@ /* This file is part of GNUnet - (C) 2010, 2011 Christian Grothoff (and other contributing authors) + Copyright (C) 2010, 2011 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 Affero General Public License + along with this program. If not, see . - 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., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + SPDX-License-Identifier: AGPL3.0-or-later */ /** @@ -29,7 +29,6 @@ #include "gnunet_hello_lib.h" #include "gnunet_util_lib.h" #include "gnunet_fragmentation_lib.h" -#include "gnunet_nat_lib.h" #include "gnunet_protocols.h" #include "gnunet_resolver_service.h" #include "gnunet_signatures.h" @@ -120,7 +119,7 @@ struct MstContext /** * ATS network type. */ - enum GNUNET_ATS_Network_Type ats_address_network_type; + enum GNUNET_NetworkType ats_address_network_type; }; @@ -134,15 +133,13 @@ struct MstContext */ static int broadcast_mst_cb (void *cls, - void *client, const struct GNUNET_MessageHeader *message) { - struct Plugin *plugin = cls; - struct MstContext *mc = client; + struct MstContext *mc = cls; + struct Plugin *plugin = mc->plugin; struct GNUNET_HELLO_Address *address; const struct GNUNET_MessageHeader *hello; const struct UDP_Beacon_Message *msg; - struct GNUNET_ATS_Information atsi; msg = (const struct UDP_Beacon_Message *) message; @@ -156,13 +153,6 @@ broadcast_mst_cb (void *cls, udp_address_to_string (NULL, mc->udp_addr, mc->udp_addr_len)); - - /* setup ATS */ - atsi.type = htonl (GNUNET_ATS_NETWORK_TYPE); - atsi.value = htonl (mc->ats_address_network_type); - GNUNET_break (ntohl(mc->ats_address_network_type) != - GNUNET_ATS_NET_UNSPECIFIED); - hello = (struct GNUNET_MessageHeader *) &msg[1]; address = GNUNET_HELLO_address_allocate (&msg->sender, PLUGIN_NAME, @@ -173,11 +163,6 @@ broadcast_mst_cb (void *cls, address, NULL, hello); - plugin->env->update_address_metrics (plugin->env->cls, - address, - NULL, - &atsi, - 1); GNUNET_HELLO_address_free (address); GNUNET_STATISTICS_update (plugin->env->stats, _("# Multicast HELLO beacons received via UDP"), @@ -203,18 +188,22 @@ udp_broadcast_receive (struct Plugin *plugin, ssize_t size, const union UdpAddress *udp_addr, size_t udp_addr_len, - enum GNUNET_ATS_Network_Type network_type) + enum GNUNET_NetworkType network_type) { + struct GNUNET_MessageStreamTokenizer *broadcast_mst; struct MstContext mc; + broadcast_mst = GNUNET_MST_create (&broadcast_mst_cb, + &mc); + mc.plugin = plugin; mc.udp_addr = udp_addr; mc.udp_addr_len = udp_addr_len; mc.ats_address_network_type = network_type; - GNUNET_SERVER_mst_receive (plugin->broadcast_mst, - &mc, - buf, size, - GNUNET_NO, - GNUNET_NO); + GNUNET_MST_from_buffer (broadcast_mst, + buf, size, + GNUNET_NO, + GNUNET_NO); + GNUNET_MST_destroy (broadcast_mst); } @@ -239,14 +228,13 @@ prepare_beacon (struct Plugin *plugin, msg->sender = *(plugin->env->my_identity); msg->header.size = htons (msg_size); msg->header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_BROADCAST_BEACON); - memcpy (&msg[1], hello, hello_size); + GNUNET_memcpy (&msg[1], hello, hello_size); return msg_size; } static void -udp_ipv4_broadcast_send (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +udp_ipv4_broadcast_send (void *cls) { struct BroadcastAddress *baddr = cls; struct Plugin *plugin = baddr->plugin; @@ -321,8 +309,7 @@ udp_ipv4_broadcast_send (void *cls, static void -udp_ipv6_broadcast_send (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +udp_ipv6_broadcast_send (void *cls) { struct BroadcastAddress *baddr = cls; struct Plugin *plugin = baddr->plugin; @@ -392,7 +379,7 @@ udp_ipv6_broadcast_send (void *cls, else GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, baddr->cryogenic_fd, - &udp_ipv4_broadcast_send, + &udp_ipv6_broadcast_send, baddr); } else @@ -425,7 +412,7 @@ iface_proc (void *cls, { struct Plugin *plugin = cls; struct BroadcastAddress *ba; - enum GNUNET_ATS_Network_Type network; + enum GNUNET_NetworkType network; if (NULL == addr) return GNUNET_OK; @@ -441,7 +428,7 @@ iface_proc (void *cls, GNUNET_a2s (netmask, addrlen), name, netmask); network = plugin->env->get_address_type (plugin->env->cls, broadcast_addr, addrlen); - if (GNUNET_ATS_NET_LOOPBACK == network) + if (GNUNET_NT_LOOPBACK == network) { /* Broadcasting on loopback does not make sense */ return GNUNET_YES; @@ -450,7 +437,7 @@ iface_proc (void *cls, ba = GNUNET_new (struct BroadcastAddress); ba->plugin = plugin; ba->addr = GNUNET_malloc (addrlen); - memcpy (ba->addr, broadcast_addr, addrlen); + GNUNET_memcpy (ba->addr, broadcast_addr, addrlen); ba->addrlen = addrlen; if ( (GNUNET_YES == plugin->enable_ipv4) && @@ -540,26 +527,28 @@ iface_proc (void *cls, } +/** + * Setup broadcasting subsystem. + * + * @param plugin + * @param server_addrv6 + * @param server_addrv4 + */ void setup_broadcast (struct Plugin *plugin, struct sockaddr_in6 *server_addrv6, struct sockaddr_in *server_addrv4) { - const struct GNUNET_MessageHeader *hello; - - hello = plugin->env->get_our_hello (); if (GNUNET_YES == - GNUNET_HELLO_is_friend_only ((const struct GNUNET_HELLO_Message *) hello)) + GNUNET_CONFIGURATION_get_value_yesno (plugin->env->cfg, + "topology", + "FRIENDS-ONLY")) { LOG (GNUNET_ERROR_TYPE_WARNING, _("Disabling HELLO broadcasting due to friend-to-friend only configuration!\n")); return; } - /* always create tokenizers */ - plugin->broadcast_mst = - GNUNET_SERVER_mst_create (&broadcast_mst_cb, plugin); - if (GNUNET_YES != plugin->enable_broadcasting) return; /* We do not send, just receive */ @@ -591,6 +580,11 @@ setup_broadcast (struct Plugin *plugin, } +/** + * Stop broadcasting subsystem. + * + * @param plugin + */ void stop_broadcast (struct Plugin *plugin) { @@ -641,13 +635,6 @@ stop_broadcast (struct Plugin *plugin) GNUNET_free (p); } } - - /* Destroy MSTs */ - if (NULL != plugin->broadcast_mst) - { - GNUNET_SERVER_mst_destroy (plugin->broadcast_mst); - plugin->broadcast_mst = NULL; - } } /* end of plugin_transport_udp_broadcasting.c */