aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_udp.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-12-18 08:57:03 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-12-18 08:57:03 +0000
commitba6439dcf325a3e6e598c034e60815f39646562b (patch)
treedf633a1005504e92bb3abfdbc7623d968e1cf844 /src/transport/plugin_transport_udp.c
parent7f7906e96922d1f0410439ad08b3900937186ca5 (diff)
downloadgnunet-ba6439dcf325a3e6e598c034e60815f39646562b.tar.gz
gnunet-ba6439dcf325a3e6e598c034e60815f39646562b.zip
fixing 0003221: Crash in UDP broadcast: plugin_transport_udp_broadcasting.c:253.
Diffstat (limited to 'src/transport/plugin_transport_udp.c')
-rw-r--r--src/transport/plugin_transport_udp.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/transport/plugin_transport_udp.c b/src/transport/plugin_transport_udp.c
index bdf10c197..43c46aae7 100644
--- a/src/transport/plugin_transport_udp.c
+++ b/src/transport/plugin_transport_udp.c
@@ -2499,7 +2499,7 @@ udp_select_read (struct Plugin *plugin, struct GNUNET_NETWORK_Handle *rsock)
2499 switch (ntohs (msg->type)) 2499 switch (ntohs (msg->type))
2500 { 2500 {
2501 case GNUNET_MESSAGE_TYPE_TRANSPORT_BROADCAST_BEACON: 2501 case GNUNET_MESSAGE_TYPE_TRANSPORT_BROADCAST_BEACON:
2502 udp_broadcast_receive (plugin, buf, size, 2502 udp_broadcast_receive (plugin, buf, size,
2503 (const struct sockaddr *) &addr, fromlen); 2503 (const struct sockaddr *) &addr, fromlen);
2504 return; 2504 return;
2505 case GNUNET_MESSAGE_TYPE_TRANSPORT_UDP_MESSAGE: 2505 case GNUNET_MESSAGE_TYPE_TRANSPORT_UDP_MESSAGE:
@@ -3030,9 +3030,9 @@ libgnunet_plugin_transport_udp_init (void *cls)
3030 struct Plugin *p; 3030 struct Plugin *p;
3031 unsigned long long port; 3031 unsigned long long port;
3032 unsigned long long aport; 3032 unsigned long long aport;
3033 unsigned long long broadcast;
3034 unsigned long long udp_max_bps; 3033 unsigned long long udp_max_bps;
3035 unsigned long long enable_v6; 3034 unsigned long long enable_v6;
3035 unsigned long long enable_broadcasting;
3036 char * bind4_address; 3036 char * bind4_address;
3037 char * bind6_address; 3037 char * bind6_address;
3038 char * fancy_interval; 3038 char * fancy_interval;
@@ -3126,10 +3126,10 @@ libgnunet_plugin_transport_udp_init (void *cls)
3126 myoptions = 0; 3126 myoptions = 0;
3127 3127
3128 /* Enable neighbour discovery */ 3128 /* Enable neighbour discovery */
3129 broadcast = GNUNET_CONFIGURATION_get_value_yesno (env->cfg, "transport-udp", 3129 enable_broadcasting = GNUNET_CONFIGURATION_get_value_yesno (env->cfg, "transport-udp",
3130 "BROADCAST"); 3130 "BROADCAST");
3131 if (broadcast == GNUNET_SYSERR) 3131 if (enable_broadcasting == GNUNET_SYSERR)
3132 broadcast = GNUNET_NO; 3132 enable_broadcasting = GNUNET_NO;
3133 3133
3134 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (env->cfg, "transport-udp", 3134 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (env->cfg, "transport-udp",
3135 "BROADCAST_INTERVAL", &fancy_interval)) 3135 "BROADCAST_INTERVAL", &fancy_interval))
@@ -3158,6 +3158,7 @@ libgnunet_plugin_transport_udp_init (void *cls)
3158 p->broadcast_interval = interval; 3158 p->broadcast_interval = interval;
3159 p->enable_ipv6 = enable_v6; 3159 p->enable_ipv6 = enable_v6;
3160 p->enable_ipv4 = GNUNET_YES; /* default */ 3160 p->enable_ipv4 = GNUNET_YES; /* default */
3161 p->enable_broadcasting = enable_broadcasting;
3161 p->env = env; 3162 p->env = env;
3162 p->sessions = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO); 3163 p->sessions = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO);
3163 p->defrag_ctxs = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); 3164 p->defrag_ctxs = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
@@ -3179,11 +3180,9 @@ libgnunet_plugin_transport_udp_init (void *cls)
3179 GNUNET_free (p); 3180 GNUNET_free (p);
3180 return NULL; 3181 return NULL;
3181 } 3182 }
3182 else if (broadcast == GNUNET_YES) 3183
3183 { 3184 /* Setup broadcasting and receiving beacons */
3184 LOG (GNUNET_ERROR_TYPE_DEBUG, "Starting broadcasting\n"); 3185 setup_broadcast (p, &server_addrv6, &server_addrv4);
3185 setup_broadcast (p, &server_addrv6, &server_addrv4);
3186 }
3187 3186
3188 api = GNUNET_new (struct GNUNET_TRANSPORT_PluginFunctions); 3187 api = GNUNET_new (struct GNUNET_TRANSPORT_PluginFunctions);
3189 api->cls = p; 3188 api->cls = p;
@@ -3286,11 +3285,6 @@ libgnunet_plugin_transport_udp_done (void *cls)
3286 GNUNET_CONTAINER_heap_destroy (plugin->defrag_ctxs); 3285 GNUNET_CONTAINER_heap_destroy (plugin->defrag_ctxs);
3287 plugin->defrag_ctxs = NULL; 3286 plugin->defrag_ctxs = NULL;
3288 } 3287 }
3289 if (plugin->mst != NULL)
3290 {
3291 GNUNET_SERVER_mst_destroy(plugin->mst);
3292 plugin->mst = NULL;
3293 }
3294 3288
3295 /* Clean up leftover messages */ 3289 /* Clean up leftover messages */
3296 struct UDP_MessageWrapper * udpw; 3290 struct UDP_MessageWrapper * udpw;