aboutsummaryrefslogtreecommitdiff
path: root/src/psyc/psyc_api.c
diff options
context:
space:
mode:
authorlurchi <lurchi@strangeplace.net>2017-11-18 11:10:27 +0100
committerlurchi <lurchi@strangeplace.net>2017-11-18 11:10:27 +0100
commit08d1fb4ad8581fca79dcc35e18c5d086fd11821f (patch)
tree16faaecb50fbdaf8bc618edbe7f5cc5e1611b95d /src/psyc/psyc_api.c
parent51a27f583432d57949e3f9ea4c5f3813e9589e42 (diff)
downloadgnunet-08d1fb4ad8581fca79dcc35e18c5d086fd11821f.tar.gz
gnunet-08d1fb4ad8581fca79dcc35e18c5d086fd11821f.zip
Introduce PART/PART_ACK messages (tests will fail until multicast module is adapted, too)
Diffstat (limited to 'src/psyc/psyc_api.c')
-rw-r--r--src/psyc/psyc_api.c82
1 files changed, 54 insertions, 28 deletions
diff --git a/src/psyc/psyc_api.c b/src/psyc/psyc_api.c
index e7790d201..cdb9ce881 100644
--- a/src/psyc/psyc_api.c
+++ b/src/psyc/psyc_api.c
@@ -555,6 +555,10 @@ handle_slave_join_decision (void *cls,
555static void 555static void
556channel_cleanup (struct GNUNET_PSYC_Channel *chn) 556channel_cleanup (struct GNUNET_PSYC_Channel *chn)
557{ 557{
558 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
559 "cleaning up channel %p\n",
560 chn);
561 GNUNET_assert (0);
558 if (NULL != chn->tmit) 562 if (NULL != chn->tmit)
559 { 563 {
560 GNUNET_PSYC_transmit_destroy (chn->tmit); 564 GNUNET_PSYC_transmit_destroy (chn->tmit);
@@ -585,33 +589,43 @@ channel_cleanup (struct GNUNET_PSYC_Channel *chn)
585 589
586 590
587static void 591static void
588channel_disconnect (struct GNUNET_PSYC_Channel *chn, 592handle_channel_part_ack (void *cls,
589 GNUNET_ContinuationCallback cb, 593 const struct GNUNET_MessageHeader *msg)
590 void *cls)
591{ 594{
592 chn->is_disconnecting = GNUNET_YES; 595 struct GNUNET_PSYC_Channel *chn = cls;
593 chn->disconnect_cb = cb;
594 chn->disconnect_cls = cls;
595 596
596 if (NULL != chn->mq) 597 channel_cleanup (chn);
597 {
598 struct GNUNET_MQ_Envelope *env = GNUNET_MQ_get_last_envelope (chn->mq);
599 if (NULL != env)
600 {
601 GNUNET_MQ_notify_sent (env, (GNUNET_SCHEDULER_TaskCallback) channel_cleanup, chn);
602 }
603 else
604 {
605 channel_cleanup (chn);
606 }
607 }
608 else
609 {
610 channel_cleanup (chn);
611 }
612} 598}
613 599
614 600
601//static void
602//channel_disconnect (struct GNUNET_PSYC_Channel *chn,
603// GNUNET_ContinuationCallback cb,
604// void *cls)
605//{
606// chn->is_disconnecting = GNUNET_YES;
607// chn->disconnect_cb = cb;
608// chn->disconnect_cls = cls;
609//
610// if (NULL != chn->mq)
611// {
612// struct GNUNET_MQ_Envelope *env = GNUNET_MQ_get_last_envelope (chn->mq);
613// if (NULL != env)
614// {
615// GNUNET_MQ_notify_sent (env, (GNUNET_SCHEDULER_TaskCallback) channel_cleanup, chn);
616// }
617// else
618// {
619// channel_cleanup (chn);
620// }
621// }
622// else
623// {
624// channel_cleanup (chn);
625// }
626//}
627
628
615/*** MASTER ***/ 629/*** MASTER ***/
616 630
617 631
@@ -671,6 +685,10 @@ master_connect (struct GNUNET_PSYC_Master *mst)
671 GNUNET_MESSAGE_TYPE_PSYC_JOIN_REQUEST, 685 GNUNET_MESSAGE_TYPE_PSYC_JOIN_REQUEST,
672 struct GNUNET_PSYC_JoinRequestMessage, 686 struct GNUNET_PSYC_JoinRequestMessage,
673 mst), 687 mst),
688 GNUNET_MQ_hd_fixed_size (channel_part_ack,
689 GNUNET_MESSAGE_TYPE_PSYC_PART_ACK,
690 struct GNUNET_MessageHeader,
691 chn),
674 GNUNET_MQ_hd_var_size (channel_message, 692 GNUNET_MQ_hd_var_size (channel_message,
675 GNUNET_MESSAGE_TYPE_PSYC_MESSAGE, 693 GNUNET_MESSAGE_TYPE_PSYC_MESSAGE,
676 struct GNUNET_PSYC_MessageHeader, 694 struct GNUNET_PSYC_MessageHeader,
@@ -780,10 +798,12 @@ GNUNET_PSYC_master_stop (struct GNUNET_PSYC_Master *mst,
780 void *stop_cls) 798 void *stop_cls)
781{ 799{
782 struct GNUNET_PSYC_Channel *chn = &mst->chn; 800 struct GNUNET_PSYC_Channel *chn = &mst->chn;
801 struct GNUNET_MQ_Envelope *env;
783 802
784 /* FIXME: send msg to service */ 803 chn->disconnect_cb = stop_cb;
785 804 chn->disconnect_cls = stop_cls;
786 channel_disconnect (chn, stop_cb, stop_cls); 805 env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_PSYC_PART_REQUEST);
806 GNUNET_MQ_send (chn->mq, env);
787} 807}
788 808
789 809
@@ -971,6 +991,10 @@ slave_connect (struct GNUNET_PSYC_Slave *slv)
971 GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION, 991 GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION,
972 struct GNUNET_PSYC_JoinDecisionMessage, 992 struct GNUNET_PSYC_JoinDecisionMessage,
973 slv), 993 slv),
994 GNUNET_MQ_hd_fixed_size (channel_part_ack,
995 GNUNET_MESSAGE_TYPE_PSYC_PART_ACK,
996 struct GNUNET_MessageHeader,
997 chn),
974 GNUNET_MQ_hd_var_size (channel_message, 998 GNUNET_MQ_hd_var_size (channel_message,
975 GNUNET_MESSAGE_TYPE_PSYC_MESSAGE, 999 GNUNET_MESSAGE_TYPE_PSYC_MESSAGE,
976 struct GNUNET_PSYC_MessageHeader, 1000 struct GNUNET_PSYC_MessageHeader,
@@ -1118,10 +1142,12 @@ GNUNET_PSYC_slave_part (struct GNUNET_PSYC_Slave *slv,
1118 void *part_cls) 1142 void *part_cls)
1119{ 1143{
1120 struct GNUNET_PSYC_Channel *chn = &slv->chn; 1144 struct GNUNET_PSYC_Channel *chn = &slv->chn;
1145 struct GNUNET_MQ_Envelope *env;
1121 1146
1122 /* FIXME: send msg to service */ 1147 chn->disconnect_cb = part_cb;
1123 1148 chn->disconnect_cls = part_cls;
1124 channel_disconnect (chn, part_cb, part_cls); 1149 env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_PSYC_PART_REQUEST);
1150 GNUNET_MQ_send (chn->mq, env);
1125} 1151}
1126 1152
1127 1153