aboutsummaryrefslogtreecommitdiff
path: root/src/identity-provider/identity_provider_api.c
diff options
context:
space:
mode:
authorSchanzenbach, Martin <mschanzenbach@posteo.de>2017-10-05 22:44:56 +0200
committerSchanzenbach, Martin <mschanzenbach@posteo.de>2017-10-05 22:44:56 +0200
commit1731fbd017731df1f3f88bd4b3beac765996a1ad (patch)
tree7eefd76c1b802dac98008f174f3a47477d652544 /src/identity-provider/identity_provider_api.c
parent76817ee408cff4aee534d6016423c8a4ecb5555f (diff)
downloadgnunet-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.c86
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 */
528static int
529check_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 */
553static void
554handle_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 */
552static void 632static void
553handle_attribute_result (void *cls, 633handle_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;