aboutsummaryrefslogtreecommitdiff
path: root/src/identity-provider/identity_provider_api.c
diff options
context:
space:
mode:
authorSchanzenbach, Martin <mschanzenbach@posteo.de>2017-09-18 00:23:19 +0200
committerSchanzenbach, Martin <mschanzenbach@posteo.de>2017-09-18 00:23:19 +0200
commitca10195d9af33c557b57f16b8bb93df1066ab0ee (patch)
tree354f992af3fe91894135d820612909ff84987058 /src/identity-provider/identity_provider_api.c
parent3777e05a09dc9f375354bf01542f4fd6807e58c5 (diff)
downloadgnunet-ca10195d9af33c557b57f16b8bb93df1066ab0ee.tar.gz
gnunet-ca10195d9af33c557b57f16b8bb93df1066ab0ee.zip
-add consume API
Diffstat (limited to 'src/identity-provider/identity_provider_api.c')
-rw-r--r--src/identity-provider/identity_provider_api.c63
1 files changed, 46 insertions, 17 deletions
diff --git a/src/identity-provider/identity_provider_api.c b/src/identity-provider/identity_provider_api.c
index 25c14793d..7c9576d05 100644
--- a/src/identity-provider/identity_provider_api.c
+++ b/src/identity-provider/identity_provider_api.c
@@ -556,30 +556,52 @@ handle_attribute_result (void *cls,
556 static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy; 556 static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
557 struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls; 557 struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls;
558 struct GNUNET_IDENTITY_PROVIDER_AttributeIterator *it; 558 struct GNUNET_IDENTITY_PROVIDER_AttributeIterator *it;
559 struct GNUNET_IDENTITY_PROVIDER_Operation *op;
559 size_t attr_len; 560 size_t attr_len;
560 uint32_t r_id = ntohl (msg->id); 561 uint32_t r_id = ntohl (msg->id);
561 562
562 attr_len = ntohs (msg->attr_len); 563 attr_len = ntohs (msg->attr_len);
563 564 LOG (GNUNET_ERROR_TYPE_MESSAGE,
564 for (it = h->it_head; NULL != it; it = it->next) 565 "Processing attribute result.\n");
566
567
568 for (it = h->it_head; NULL != it; it = it->next)
565 if (it->r_id == r_id) 569 if (it->r_id == r_id)
566 break; 570 break;
567 if (NULL == it) 571 for (op = h->op_head; NULL != op; op = op->next)
572 if (op->r_id == r_id)
573 break;
574 if ((NULL == it) && (NULL == op))
568 return; 575 return;
569 576
570 if ( (0 == (memcmp (&msg->identity, 577 if ( (0 == (memcmp (&msg->identity,
571 &identity_dummy, 578 &identity_dummy,
572 sizeof (identity_dummy)))) ) 579 sizeof (identity_dummy)))) )
573 { 580 {
574 if (NULL == it) 581 if ((NULL == it) && (NULL == op))
575 { 582 {
576 GNUNET_break (0); 583 GNUNET_break (0);
577 force_reconnect (h); 584 force_reconnect (h);
578 return; 585 return;
579 } 586 }
580 if (NULL != it->finish_cb) 587 if (NULL != it)
581 it->finish_cb (it->finish_cb_cls); 588 {
582 free_it (it); 589 if (NULL != it->finish_cb)
590 it->finish_cb (it->finish_cb_cls);
591 free_it (it);
592 }
593 if (NULL != op)
594 {
595 if (NULL != op->ar_cb)
596 op->ar_cb (op->cls,
597 NULL,
598 NULL);
599 GNUNET_CONTAINER_DLL_remove (h->op_head,
600 h->op_tail,
601 op);
602 GNUNET_free (op);
603
604 }
583 return; 605 return;
584 } 606 }
585 607
@@ -593,9 +615,16 @@ handle_attribute_result (void *cls,
593 it->proc (it->proc_cls, 615 it->proc (it->proc_cls,
594 &msg->identity, 616 &msg->identity,
595 attr); 617 attr);
596 GNUNET_free (attr); 618 } else if (NULL != op)
597 return; 619 {
620 if (NULL != op->ar_cb)
621 op->ar_cb (op->cls,
622 &msg->identity,
623 attr);
624
598 } 625 }
626 GNUNET_free (attr);
627 return;
599 } 628 }
600 GNUNET_assert (0); 629 GNUNET_assert (0);
601} 630}
@@ -610,7 +639,7 @@ handle_attribute_result (void *cls,
610 */ 639 */
611static int 640static int
612check_ticket_result (void *cls, 641check_ticket_result (void *cls,
613 const struct TicketResultMessage *msg) 642 const struct TicketResultMessage *msg)
614{ 643{
615 size_t msg_len; 644 size_t msg_len;
616 645
@@ -634,7 +663,7 @@ check_ticket_result (void *cls,
634 */ 663 */
635static void 664static void
636handle_ticket_result (void *cls, 665handle_ticket_result (void *cls,
637 const struct TicketResultMessage *msg) 666 const struct TicketResultMessage *msg)
638{ 667{
639 struct GNUNET_IDENTITY_PROVIDER_Handle *handle = cls; 668 struct GNUNET_IDENTITY_PROVIDER_Handle *handle = cls;
640 struct GNUNET_IDENTITY_PROVIDER_Operation *op; 669 struct GNUNET_IDENTITY_PROVIDER_Operation *op;
@@ -684,9 +713,9 @@ reconnect (struct GNUNET_IDENTITY_PROVIDER_Handle *h)
684 struct AttributeResultMessage, 713 struct AttributeResultMessage,
685 h), 714 h),
686 GNUNET_MQ_hd_var_size (ticket_result, 715 GNUNET_MQ_hd_var_size (ticket_result,
687 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_RESULT, 716 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_RESULT,
688 struct TicketResultMessage, 717 struct TicketResultMessage,
689 h), 718 h),
690 GNUNET_MQ_handler_end () 719 GNUNET_MQ_handler_end ()
691 }; 720 };
692 struct GNUNET_IDENTITY_PROVIDER_Operation *op; 721 struct GNUNET_IDENTITY_PROVIDER_Operation *op;
@@ -1224,7 +1253,7 @@ GNUNET_IDENTITY_PROVIDER_rp_ticket_consume (struct GNUNET_IDENTITY_PROVIDER_Hand
1224 op); 1253 op);
1225 op->env = GNUNET_MQ_msg_extra (ctm, 1254 op->env = GNUNET_MQ_msg_extra (ctm,
1226 sizeof (const struct GNUNET_IDENTITY_PROVIDER_Ticket2), 1255 sizeof (const struct GNUNET_IDENTITY_PROVIDER_Ticket2),
1227 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ISSUE); 1256 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET);
1228 ctm->identity = *identity; 1257 ctm->identity = *identity;
1229 ctm->id = htonl (op->r_id); 1258 ctm->id = htonl (op->r_id);
1230 1259