diff options
author | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2017-10-05 22:44:56 +0200 |
---|---|---|
committer | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2017-10-05 22:44:56 +0200 |
commit | 1731fbd017731df1f3f88bd4b3beac765996a1ad (patch) | |
tree | 7eefd76c1b802dac98008f174f3a47477d652544 /src/identity-provider/identity_provider_api.c | |
parent | 76817ee408cff4aee534d6016423c8a4ecb5555f (diff) | |
download | gnunet-1731fbd017731df1f3f88bd4b3beac765996a1ad.tar.gz gnunet-1731fbd017731df1f3f88bd4b3beac765996a1ad.zip |
-fix bugs
Diffstat (limited to 'src/identity-provider/identity_provider_api.c')
-rw-r--r-- | src/identity-provider/identity_provider_api.c | 86 |
1 files changed, 85 insertions, 1 deletions
diff --git a/src/identity-provider/identity_provider_api.c b/src/identity-provider/identity_provider_api.c index 7c9576d05..6e0ce7b42 100644 --- a/src/identity-provider/identity_provider_api.c +++ b/src/identity-provider/identity_provider_api.c | |||
@@ -516,6 +516,86 @@ handle_attribute_store_response (void *cls, | |||
516 | 516 | ||
517 | } | 517 | } |
518 | 518 | ||
519 | |||
520 | /** | ||
521 | * Handle an incoming message of type | ||
522 | * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT | ||
523 | * | ||
524 | * @param cls | ||
525 | * @param msg the message we received | ||
526 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
527 | */ | ||
528 | static int | ||
529 | check_consume_ticket_result (void *cls, | ||
530 | const struct ConsumeTicketResultMessage *msg) | ||
531 | { | ||
532 | size_t msg_len; | ||
533 | size_t attrs_len; | ||
534 | |||
535 | msg_len = ntohs (msg->header.size); | ||
536 | attrs_len = ntohs (msg->attrs_len); | ||
537 | if (msg_len != sizeof (struct ConsumeTicketResultMessage) + attrs_len) | ||
538 | { | ||
539 | GNUNET_break (0); | ||
540 | return GNUNET_SYSERR; | ||
541 | } | ||
542 | return GNUNET_OK; | ||
543 | } | ||
544 | |||
545 | |||
546 | /** | ||
547 | * Handle an incoming message of type | ||
548 | * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT | ||
549 | * | ||
550 | * @param cls | ||
551 | * @param msg the message we received | ||
552 | */ | ||
553 | static void | ||
554 | handle_consume_ticket_result (void *cls, | ||
555 | const struct ConsumeTicketResultMessage *msg) | ||
556 | { | ||
557 | struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls; | ||
558 | struct GNUNET_IDENTITY_PROVIDER_Operation *op; | ||
559 | size_t attrs_len; | ||
560 | uint32_t r_id = ntohl (msg->id); | ||
561 | |||
562 | attrs_len = ntohs (msg->attrs_len); | ||
563 | LOG (GNUNET_ERROR_TYPE_MESSAGE, | ||
564 | "Processing attribute result.\n"); | ||
565 | |||
566 | |||
567 | for (op = h->op_head; NULL != op; op = op->next) | ||
568 | if (op->r_id == r_id) | ||
569 | break; | ||
570 | if (NULL == op) | ||
571 | return; | ||
572 | |||
573 | { | ||
574 | struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs; | ||
575 | struct GNUNET_IDENTITY_PROVIDER_AttributeListEntry *le; | ||
576 | attrs = attribute_list_deserialize ((char*)&msg[1], | ||
577 | attrs_len); | ||
578 | if (NULL != op->ar_cb) | ||
579 | { | ||
580 | for (le = attrs->list_head; NULL != le; le = le->next) | ||
581 | op->ar_cb (op->cls, | ||
582 | &msg->identity, | ||
583 | le->attribute); | ||
584 | } | ||
585 | attribute_list_destroy (attrs); | ||
586 | op->ar_cb (op->cls, | ||
587 | NULL, | ||
588 | NULL); | ||
589 | GNUNET_CONTAINER_DLL_remove (h->op_head, | ||
590 | h->op_tail, | ||
591 | op); | ||
592 | GNUNET_free (op); | ||
593 | return; | ||
594 | } | ||
595 | GNUNET_assert (0); | ||
596 | } | ||
597 | |||
598 | |||
519 | /** | 599 | /** |
520 | * Handle an incoming message of type | 600 | * Handle an incoming message of type |
521 | * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT | 601 | * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT |
@@ -551,7 +631,7 @@ check_attribute_result (void *cls, | |||
551 | */ | 631 | */ |
552 | static void | 632 | static void |
553 | handle_attribute_result (void *cls, | 633 | handle_attribute_result (void *cls, |
554 | const struct AttributeResultMessage *msg) | 634 | const struct AttributeResultMessage *msg) |
555 | { | 635 | { |
556 | static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy; | 636 | static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy; |
557 | struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls; | 637 | struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls; |
@@ -716,6 +796,10 @@ reconnect (struct GNUNET_IDENTITY_PROVIDER_Handle *h) | |||
716 | GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_RESULT, | 796 | GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_RESULT, |
717 | struct TicketResultMessage, | 797 | struct TicketResultMessage, |
718 | h), | 798 | h), |
799 | GNUNET_MQ_hd_var_size (consume_ticket_result, | ||
800 | GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT, | ||
801 | struct ConsumeTicketResultMessage, | ||
802 | h), | ||
719 | GNUNET_MQ_handler_end () | 803 | GNUNET_MQ_handler_end () |
720 | }; | 804 | }; |
721 | struct GNUNET_IDENTITY_PROVIDER_Operation *op; | 805 | struct GNUNET_IDENTITY_PROVIDER_Operation *op; |