diff options
author | xrs <xrs@mail36.net> | 2017-07-13 17:10:04 +0200 |
---|---|---|
committer | xrs <xrs@mail36.net> | 2017-07-13 17:10:04 +0200 |
commit | f0bca33f0011119bc103ba0e4c5ab83de2f00199 (patch) | |
tree | 495524a29051d94a02b877b3a598e6adb53facc6 /src | |
parent | cdf3b6745f83502a6fd246cb92a225f09bc4de0d (diff) | |
download | gnunet-f0bca33f0011119bc103ba0e4c5ab83de2f00199.tar.gz gnunet-f0bca33f0011119bc103ba0e4c5ab83de2f00199.zip |
multicast: fix bugs
Diffstat (limited to 'src')
-rw-r--r-- | src/multicast/gnunet-service-multicast.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/multicast/gnunet-service-multicast.c b/src/multicast/gnunet-service-multicast.c index 39623e7b1..896f75c56 100644 --- a/src/multicast/gnunet-service-multicast.c +++ b/src/multicast/gnunet-service-multicast.c | |||
@@ -767,10 +767,11 @@ cadet_send_join_decision_cb (void *cls, | |||
767 | { | 767 | { |
768 | chn->join_status = JOIN_REFUSED; | 768 | chn->join_status = JOIN_REFUSED; |
769 | } | 769 | } |
770 | |||
771 | cadet_send_channel (chn, &hdcsn->header); | 770 | cadet_send_channel (chn, &hdcsn->header); |
772 | return GNUNET_NO; | 771 | return GNUNET_YES; |
773 | } | 772 | } |
773 | |||
774 | // return GNUNET_YES to continue the multihashmap_get iteration | ||
774 | return GNUNET_YES; | 775 | return GNUNET_YES; |
775 | } | 776 | } |
776 | 777 | ||
@@ -845,13 +846,13 @@ cadet_notify_connect (void *cls, | |||
845 | struct GNUNET_CADET_Channel *channel, | 846 | struct GNUNET_CADET_Channel *channel, |
846 | const struct GNUNET_PeerIdentity *source) | 847 | const struct GNUNET_PeerIdentity *source) |
847 | { | 848 | { |
848 | struct Channel *chn = GNUNET_malloc (sizeof *chn); | 849 | struct Channel *chn = GNUNET_malloc (sizeof (struct Channel)); |
849 | chn->group = cls; | 850 | chn->group = cls; |
850 | chn->channel = channel; | 851 | chn->channel = channel; |
851 | chn->direction = DIR_INCOMING; | 852 | chn->direction = DIR_INCOMING; |
852 | chn->join_status = JOIN_NOT_ASKED; | 853 | chn->join_status = JOIN_NOT_ASKED; |
853 | 854 | ||
854 | GNUNET_CONTAINER_multihashmap_put (channels_in, &chn->group_pub_hash, chn, | 855 | GNUNET_CONTAINER_multihashmap_put (channels_in, &chn->group->pub_key_hash, chn, |
855 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 856 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
856 | return chn; | 857 | return chn; |
857 | } | 858 | } |
@@ -1395,7 +1396,7 @@ handle_client_origin_start (void *cls, | |||
1395 | orig->cadet_port = GNUNET_CADET_open_port (cadet, | 1396 | orig->cadet_port = GNUNET_CADET_open_port (cadet, |
1396 | &grp->cadet_port_hash, | 1397 | &grp->cadet_port_hash, |
1397 | cadet_notify_connect, | 1398 | cadet_notify_connect, |
1398 | NULL, | 1399 | grp, |
1399 | cadet_notify_window_change, | 1400 | cadet_notify_window_change, |
1400 | cadet_notify_disconnect, | 1401 | cadet_notify_disconnect, |
1401 | cadet_handlers); | 1402 | cadet_handlers); |
@@ -1458,7 +1459,7 @@ handle_client_member_join (void *cls, | |||
1458 | GNUNET_CRYPTO_ecdsa_key_get_public (&msg->member_key, &mem_pub_key); | 1459 | GNUNET_CRYPTO_ecdsa_key_get_public (&msg->member_key, &mem_pub_key); |
1459 | GNUNET_CRYPTO_hash (&mem_pub_key, sizeof (mem_pub_key), &mem_pub_key_hash); | 1460 | GNUNET_CRYPTO_hash (&mem_pub_key, sizeof (mem_pub_key), &mem_pub_key_hash); |
1460 | GNUNET_CRYPTO_hash (&msg->group_pub_key, sizeof (msg->group_pub_key), &pub_key_hash); | 1461 | GNUNET_CRYPTO_hash (&msg->group_pub_key, sizeof (msg->group_pub_key), &pub_key_hash); |
1461 | 1462 | ||
1462 | struct GNUNET_CONTAINER_MultiHashMap * | 1463 | struct GNUNET_CONTAINER_MultiHashMap * |
1463 | grp_mem = GNUNET_CONTAINER_multihashmap_get (group_members, &pub_key_hash); | 1464 | grp_mem = GNUNET_CONTAINER_multihashmap_get (group_members, &pub_key_hash); |
1464 | struct Member *mem = NULL; | 1465 | struct Member *mem = NULL; |
@@ -1468,6 +1469,7 @@ handle_client_member_join (void *cls, | |||
1468 | { | 1469 | { |
1469 | mem = GNUNET_CONTAINER_multihashmap_get (grp_mem, &mem_pub_key_hash); | 1470 | mem = GNUNET_CONTAINER_multihashmap_get (grp_mem, &mem_pub_key_hash); |
1470 | } | 1471 | } |
1472 | |||
1471 | if (NULL == mem) | 1473 | if (NULL == mem) |
1472 | { | 1474 | { |
1473 | mem = GNUNET_new (struct Member); | 1475 | mem = GNUNET_new (struct Member); |
@@ -1483,15 +1485,16 @@ handle_client_member_join (void *cls, | |||
1483 | grp->pub_key = msg->group_pub_key; | 1485 | grp->pub_key = msg->group_pub_key; |
1484 | grp->pub_key_hash = pub_key_hash; | 1486 | grp->pub_key_hash = pub_key_hash; |
1485 | group_set_cadet_port_hash (grp); | 1487 | group_set_cadet_port_hash (grp); |
1486 | 1488 | ||
1487 | if (NULL == grp_mem) | 1489 | if (NULL == grp_mem) |
1488 | { | 1490 | { |
1489 | grp_mem = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES); | 1491 | grp_mem = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES); |
1490 | GNUNET_CONTAINER_multihashmap_put (group_members, &grp->pub_key_hash, grp_mem, | 1492 | ret = GNUNET_CONTAINER_multihashmap_put (group_members, &grp->pub_key_hash, grp_mem, |
1491 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); | 1493 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); |
1492 | } | 1494 | } |
1493 | GNUNET_CONTAINER_multihashmap_put (grp_mem, &mem->pub_key_hash, mem, | 1495 | GNUNET_CONTAINER_multihashmap_put (grp_mem, &mem->pub_key_hash, mem, |
1494 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); | 1496 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); |
1497 | |||
1495 | GNUNET_CONTAINER_multihashmap_put (members, &grp->pub_key_hash, mem, | 1498 | GNUNET_CONTAINER_multihashmap_put (members, &grp->pub_key_hash, mem, |
1496 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1499 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
1497 | } | 1500 | } |
@@ -1508,7 +1511,7 @@ handle_client_member_join (void *cls, | |||
1508 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1511 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1509 | "Client connected to group %s as member %s (%s).\n", | 1512 | "Client connected to group %s as member %s (%s).\n", |
1510 | GNUNET_h2s (&grp->pub_key_hash), | 1513 | GNUNET_h2s (&grp->pub_key_hash), |
1511 | GNUNET_h2s (&mem->pub_key_hash), | 1514 | GNUNET_h2s2 (&mem->pub_key_hash), |
1512 | str); | 1515 | str); |
1513 | GNUNET_free (str); | 1516 | GNUNET_free (str); |
1514 | 1517 | ||
@@ -1636,7 +1639,8 @@ handle_client_join_decision (void *cls, | |||
1636 | "%p ..and member %s: %p\n", | 1639 | "%p ..and member %s: %p\n", |
1637 | grp, GNUNET_h2s (&member_key_hash), mem); | 1640 | grp, GNUNET_h2s (&member_key_hash), mem); |
1638 | } | 1641 | } |
1639 | if (NULL != mem) | 1642 | |
1643 | if (NULL != mem) | ||
1640 | { /* Found local member */ | 1644 | { /* Found local member */ |
1641 | client_send_join_decision (mem, hdcsn); | 1645 | client_send_join_decision (mem, hdcsn); |
1642 | } | 1646 | } |