aboutsummaryrefslogtreecommitdiff
path: root/src/multicast/multicast_api.c
diff options
context:
space:
mode:
authorGabor X Toth <*@tg-x.net>2014-07-23 16:19:49 +0000
committerGabor X Toth <*@tg-x.net>2014-07-23 16:19:49 +0000
commit3cf8ba0b60f8495892fa76635e9c23555d0a304c (patch)
tree5f27648bdb3cf3409628e4e5edc26f811cbd03a5 /src/multicast/multicast_api.c
parent252b5599987b7ba03b879a8c2d1c455ad4c9834a (diff)
downloadgnunet-3cf8ba0b60f8495892fa76635e9c23555d0a304c.tar.gz
gnunet-3cf8ba0b60f8495892fa76635e9c23555d0a304c.zip
social: implement enter/leave/messaging; psyc: improvements and fixes
- social: implement enter/leave, send/receive messages, slicer - psyc, social: add struct GNUNET_PSYC_Message for single-fragment join messages - psyc: add message callback in addition to message part callback - client_manager, social, psyc, multicast: add disconnect callback
Diffstat (limited to 'src/multicast/multicast_api.c')
-rw-r--r--src/multicast/multicast_api.c76
1 files changed, 68 insertions, 8 deletions
diff --git a/src/multicast/multicast_api.c b/src/multicast/multicast_api.c
index d2a0412bb..fb2630081 100644
--- a/src/multicast/multicast_api.c
+++ b/src/multicast/multicast_api.c
@@ -88,6 +88,16 @@ struct GNUNET_MULTICAST_Group
88 void *cb_cls; 88 void *cb_cls;
89 89
90 /** 90 /**
91 * Function called after disconnected from the service.
92 */
93 GNUNET_ContinuationCallback disconnect_cb;
94
95 /**
96 * Closure for @a disconnect_cb.
97 */
98 void *disconnect_cls;
99
100 /**
91 * Are we currently transmitting a message? 101 * Are we currently transmitting a message?
92 */ 102 */
93 uint8_t in_transmit; 103 uint8_t in_transmit;
@@ -96,6 +106,12 @@ struct GNUNET_MULTICAST_Group
96 * Is this the origin or a member? 106 * Is this the origin or a member?
97 */ 107 */
98 uint8_t is_origin; 108 uint8_t is_origin;
109
110 /**
111 * Is this channel in the process of disconnecting from the service?
112 * #GNUNET_YES or #GNUNET_NO
113 */
114 uint8_t is_disconnecting;
99}; 115};
100 116
101 117
@@ -320,8 +336,9 @@ member_recv_join_decision (void *cls,
320 mem->join_dcsn_cb (grp->cb_cls, is_admitted, &hdcsn->peer, 336 mem->join_dcsn_cb (grp->cb_cls, is_admitted, &hdcsn->peer,
321 relay_count, relays, join_resp); 337 relay_count, relays, join_resp);
322 338
323 if (GNUNET_YES != is_admitted) 339 // FIXME:
324 GNUNET_MULTICAST_member_part (mem); 340 //if (GNUNET_YES != is_admitted)
341 // GNUNET_MULTICAST_member_part (mem);
325} 342}
326 343
327 344
@@ -371,6 +388,33 @@ static struct GNUNET_CLIENT_MANAGER_MessageHandler member_handlers[] =
371}; 388};
372 389
373 390
391static void
392group_cleanup (struct GNUNET_MULTICAST_Group *grp)
393{
394 GNUNET_free (grp->connect_msg);
395 if (NULL != grp->disconnect_cb)
396 grp->disconnect_cb (grp->disconnect_cls);
397}
398
399
400static void
401origin_cleanup (void *cls)
402{
403 struct GNUNET_MULTICAST_Origin *orig = cls;
404 group_cleanup (&orig->grp);
405 GNUNET_free (orig);
406}
407
408
409static void
410member_cleanup (void *cls)
411{
412 struct GNUNET_MULTICAST_Member *mem = cls;
413 group_cleanup (&mem->grp);
414 GNUNET_free (mem);
415}
416
417
374/** 418/**
375 * Function to call with the decision made for a join request. 419 * Function to call with the decision made for a join request.
376 * 420 *
@@ -565,10 +609,18 @@ GNUNET_MULTICAST_origin_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
565 * @param origin Multicast group to stop. 609 * @param origin Multicast group to stop.
566 */ 610 */
567void 611void
568GNUNET_MULTICAST_origin_stop (struct GNUNET_MULTICAST_Origin *orig) 612GNUNET_MULTICAST_origin_stop (struct GNUNET_MULTICAST_Origin *orig,
613 GNUNET_ContinuationCallback stop_cb,
614 void *stop_cls)
569{ 615{
570 GNUNET_CLIENT_MANAGER_disconnect (orig->grp.client, GNUNET_YES); 616 struct GNUNET_MULTICAST_Group *grp = &orig->grp;
571 GNUNET_free (orig); 617
618 grp->is_disconnecting = GNUNET_YES;
619 grp->disconnect_cb = stop_cb;
620 grp->disconnect_cls = stop_cls;
621
622 GNUNET_CLIENT_MANAGER_disconnect (orig->grp.client, GNUNET_YES,
623 &origin_cleanup, orig);
572} 624}
573 625
574 626
@@ -774,10 +826,18 @@ GNUNET_MULTICAST_member_join (const struct GNUNET_CONFIGURATION_Handle *cfg,
774 * @param member Membership handle. 826 * @param member Membership handle.
775 */ 827 */
776void 828void
777GNUNET_MULTICAST_member_part (struct GNUNET_MULTICAST_Member *mem) 829GNUNET_MULTICAST_member_part (struct GNUNET_MULTICAST_Member *mem,
830 GNUNET_ContinuationCallback part_cb,
831 void *part_cls)
778{ 832{
779 GNUNET_CLIENT_MANAGER_disconnect (mem->grp.client, GNUNET_YES); 833 struct GNUNET_MULTICAST_Group *grp = &mem->grp;
780 GNUNET_free (mem); 834
835 grp->is_disconnecting = GNUNET_YES;
836 grp->disconnect_cb = part_cb;
837 grp->disconnect_cls = part_cls;
838
839 GNUNET_CLIENT_MANAGER_disconnect (mem->grp.client, GNUNET_YES,
840 &member_cleanup, mem);
781} 841}
782 842
783 843