diff options
author | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2017-09-18 00:23:19 +0200 |
---|---|---|
committer | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2017-09-18 00:23:19 +0200 |
commit | ca10195d9af33c557b57f16b8bb93df1066ab0ee (patch) | |
tree | 354f992af3fe91894135d820612909ff84987058 /src/identity-provider/identity_provider_api.c | |
parent | 3777e05a09dc9f375354bf01542f4fd6807e58c5 (diff) | |
download | gnunet-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.c | 63 |
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 | */ |
611 | static int | 640 | static int |
612 | check_ticket_result (void *cls, | 641 | check_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 | */ |
635 | static void | 664 | static void |
636 | handle_ticket_result (void *cls, | 665 | handle_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 | ||