diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-12-18 08:57:03 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-12-18 08:57:03 +0000 |
commit | ba6439dcf325a3e6e598c034e60815f39646562b (patch) | |
tree | df633a1005504e92bb3abfdbc7623d968e1cf844 /src/transport/plugin_transport_udp.c | |
parent | 7f7906e96922d1f0410439ad08b3900937186ca5 (diff) | |
download | gnunet-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.c | 24 |
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; |