aboutsummaryrefslogtreecommitdiff
path: root/src/multicast
diff options
context:
space:
mode:
authorGabor X Toth <*@tg-x.net>2016-08-20 17:56:20 +0000
committerGabor X Toth <*@tg-x.net>2016-08-20 17:56:20 +0000
commitce1a6574b9f59807b1751ed2f5b85bdc70c6aef0 (patch)
tree489961e1e220bdeda13e74238908f7c8af2c8177 /src/multicast
parent17b510b1a6d6ccf8ca071e3ea96128335caa84d3 (diff)
downloadgnunet-ce1a6574b9f59807b1751ed2f5b85bdc70c6aef0.tar.gz
gnunet-ce1a6574b9f59807b1751ed2f5b85bdc70c6aef0.zip
multicast: close cadet port
Diffstat (limited to 'src/multicast')
-rw-r--r--src/multicast/gnunet-service-multicast.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/multicast/gnunet-service-multicast.c b/src/multicast/gnunet-service-multicast.c
index 780e8ceee..af530e27a 100644
--- a/src/multicast/gnunet-service-multicast.c
+++ b/src/multicast/gnunet-service-multicast.c
@@ -251,6 +251,11 @@ struct Origin
251 struct GNUNET_CRYPTO_EddsaPrivateKey priv_key; 251 struct GNUNET_CRYPTO_EddsaPrivateKey priv_key;
252 252
253 /** 253 /**
254 * CADET port.
255 */
256 struct GNUNET_CADET_Port *cadet_port;
257
258 /**
254 * Last message fragment ID sent to the group. 259 * Last message fragment ID sent to the group.
255 */ 260 */
256 uint64_t max_fragment_id; 261 uint64_t max_fragment_id;
@@ -363,6 +368,12 @@ cleanup_origin (struct Origin *orig)
363{ 368{
364 struct Group *grp = &orig->grp; 369 struct Group *grp = &orig->grp;
365 GNUNET_CONTAINER_multihashmap_remove (origins, &grp->pub_key_hash, orig); 370 GNUNET_CONTAINER_multihashmap_remove (origins, &grp->pub_key_hash, orig);
371 if (NULL != orig->cadet_port)
372 {
373 GNUNET_CADET_close_port (orig->cadet_port);
374 orig->cadet_port = NULL;
375 }
376 GNUNET_free (orig);
366} 377}
367 378
368 379
@@ -391,6 +402,7 @@ cleanup_member (struct Member *mem)
391 mem->join_dcsn = NULL; 402 mem->join_dcsn = NULL;
392 } 403 }
393 GNUNET_CONTAINER_multihashmap_remove (members, &grp->pub_key_hash, mem); 404 GNUNET_CONTAINER_multihashmap_remove (members, &grp->pub_key_hash, mem);
405 GNUNET_free (mem);
394} 406}
395 407
396 408
@@ -403,8 +415,6 @@ cleanup_group (struct Group *grp)
403 (GNUNET_YES == grp->is_origin) 415 (GNUNET_YES == grp->is_origin)
404 ? cleanup_origin ((struct Origin *) grp) 416 ? cleanup_origin ((struct Origin *) grp)
405 : cleanup_member ((struct Member *) grp); 417 : cleanup_member ((struct Member *) grp);
406
407 GNUNET_free (grp);
408} 418}
409 419
410 420
@@ -951,7 +961,6 @@ group_set_cadet_port_hash (struct Group *grp)
951 grp->pub_key, 961 grp->pub_key,
952 GNUNET_APPLICATION_TYPE_MULTICAST, 962 GNUNET_APPLICATION_TYPE_MULTICAST,
953 }; 963 };
954
955 GNUNET_CRYPTO_hash (&port, sizeof (port), &grp->cadet_port_hash); 964 GNUNET_CRYPTO_hash (&port, sizeof (port), &grp->cadet_port_hash);
956} 965}
957 966
@@ -988,10 +997,10 @@ client_recv_origin_start (void *cls, struct GNUNET_SERVER_Client *client,
988 997
989 GNUNET_CONTAINER_multihashmap_put (origins, &grp->pub_key_hash, orig, 998 GNUNET_CONTAINER_multihashmap_put (origins, &grp->pub_key_hash, orig,
990 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); 999 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
991 group_set_cadet_port_hash (grp);
992 GNUNET_CADET_open_port (cadet, &grp->cadet_port_hash,
993 cadet_notify_channel_new, NULL);
994 1000
1001 group_set_cadet_port_hash (grp);
1002 orig->cadet_port = GNUNET_CADET_open_port (cadet, &grp->cadet_port_hash,
1003 cadet_notify_channel_new, NULL);
995 } 1004 }
996 else 1005 else
997 { 1006 {