tolerate additional IPv4 address now available for gnunet.org
[oweals/gnunet.git] / src / reclaim / gnunet-service-reclaim_tickets.c
index 5a3190c7fcc376ddf958d018ff3e7120f628faeb..75d9d3940790e21c6e12ae3af7df2ead1ec0ca6f 100644 (file)
 
 struct ParallelLookup;
 
-struct RECLAIM_TICKETS_ConsumeHandle {
+
+/**
+ * A reference to a ticket stored in GNS
+ */
+struct TicketReference
+{
+  /**
+   * DLL
+   */
+  struct TicketReference *next;
+
+  /**
+   * DLL
+   */
+  struct TicketReference *prev;
+
+  /**
+   * Attributes
+   */
+  struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs;
+
+  /**
+   * Tickets
+   */
+  struct GNUNET_RECLAIM_Ticket ticket;
+};
+
+
+struct RECLAIM_TICKETS_ConsumeHandle
+{
   /**
    * Ticket
    */
@@ -90,7 +119,8 @@ struct RECLAIM_TICKETS_ConsumeHandle {
 /**
  * Handle for a parallel GNS lookup job
  */
-struct ParallelLookup {
+struct ParallelLookup
+{
   /* DLL */
   struct ParallelLookup *next;
 
@@ -113,36 +143,11 @@ struct ParallelLookup {
 };
 
 
-/**
- * A reference to a ticket stored in GNS
- */
-struct TicketReference {
-  /**
-   * DLL
-   */
-  struct TicketReference *next;
-
-  /**
-   * DLL
-   */
-  struct TicketReference *prev;
-
-  /**
-   * Attributes
-   */
-  struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs;
-
-  /**
-   * Tickets
-   */
-  struct GNUNET_RECLAIM_Ticket ticket;
-};
-
-
 /**
  * Ticket issue request handle
  */
-struct TicketIssueHandle {
+struct TicketIssueHandle
+{
   /**
    * Attributes to issue
    */
@@ -163,21 +168,6 @@ struct TicketIssueHandle {
    */
   struct GNUNET_NAMESTORE_QueueEntry *ns_qe;
 
-  /**
-   * Ticket reference list
-   */
-  struct TicketReference *ticket_refs_head;
-
-  /**
-   * Ticket reference list
-   */
-  struct TicketReference *ticket_refs_tail;
-
-  /**
-   * Number of references
-   */
-  uint32_t ticket_ref_num;
-
   /**
    * Callback
    */
@@ -192,21 +182,12 @@ struct TicketIssueHandle {
 /**
  * Ticket iterator
  */
-struct RECLAIM_TICKETS_Iterator {
-  /**
-   * Issuer Key
-   */
-  struct GNUNET_CRYPTO_EcdsaPrivateKey identity;
-
-  /**
-   * Issuer pubkey
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey identity_pub;
-
+struct RECLAIM_TICKETS_Iterator
+{
   /**
    * Namestore queue entry
    */
-  struct GNUNET_NAMESTORE_QueueEntry *ns_qe;
+  struct GNUNET_NAMESTORE_ZoneIterator *ns_it;
 
   /**
    * Iter callback
@@ -217,20 +198,11 @@ struct RECLAIM_TICKETS_Iterator {
    * Iter cls
    */
   void *cb_cls;
-
-  /**
-   * Ticket reference list
-   */
-  struct TicketReference *tickets_head;
-
-  /**
-   * Ticket reference list
-   */
-  struct TicketReference *tickets_tail;
 };
 
 
-struct RevokedAttributeEntry {
+struct RevokedAttributeEntry
+{
   /**
    * DLL
    */
@@ -253,42 +225,11 @@ struct RevokedAttributeEntry {
 };
 
 
-struct TicketRecordsEntry {
-  /**
-   * DLL
-   */
-  struct TicketRecordsEntry *next;
-
-  /**
-   * DLL
-   */
-  struct TicketRecordsEntry *prev;
-
-  /**
-   * Record count
-   */
-  unsigned int rd_count;
-
-  /**
-   * Data
-   */
-  char *data;
-
-  /**
-   * Data size
-   */
-  size_t data_size;
-
-  /**
-   * Label
-   */
-  char *label;
-};
-
 /**
  * Ticket revocation request handle
  */
-struct RECLAIM_TICKETS_RevokeHandle {
+struct RECLAIM_TICKETS_RevokeHandle
+{
   /**
    * Issuer Key
    */
@@ -411,7 +352,6 @@ del_attr_finished (void *cls, int32_t success, const char *emsg)
     cleanup_rvk (rvk);
     return;
   }
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Continuing\n");
   rvk->move_attr = rvk->move_attr->next;
   GNUNET_SCHEDULER_add_now (&move_attrs_cont, rvk);
 }
@@ -430,7 +370,7 @@ move_attr_finished (void *cls, int32_t success, const char *emsg)
   }
   label = GNUNET_STRINGS_data_to_string_alloc (&rvk->move_attr->old_id,
                                                sizeof (uint64_t));
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Removing attribute %s\n", label);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Removing attribute %s\n", label);
   rvk->ns_qe = GNUNET_NAMESTORE_records_store (nsh, &rvk->identity, label, 0,
                                                NULL, &del_attr_finished, rvk);
 }
@@ -442,8 +382,11 @@ rvk_move_attr_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone,
                   const struct GNUNET_GNSRECORD_Data *rd)
 {
   struct RECLAIM_TICKETS_RevokeHandle *rvk = cls;
+  struct GNUNET_RECLAIM_ATTRIBUTE_Claim *claim;
+  struct GNUNET_GNSRECORD_Data new_rd;
   struct RevokedAttributeEntry *le;
   char *new_label;
+  char *attr_data;
   rvk->ns_qe = NULL;
   if (0 == rd_count) {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
@@ -458,12 +401,24 @@ rvk_move_attr_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone,
   /** find a new place for this attribute **/
   rvk->move_attr->new_id =
       GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_STRONG, UINT64_MAX);
+  new_rd = *rd;
+  claim = GNUNET_RECLAIM_ATTRIBUTE_deserialize (rd->data, rd->data_size);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Attribute to update: Name=%s, ID=%" PRIu64 "\n", claim->name,
+              claim->id);
+  claim->id = rvk->move_attr->new_id;
+  new_rd.data_size = GNUNET_RECLAIM_ATTRIBUTE_serialize_get_size (claim);
+  attr_data = GNUNET_malloc (rd->data_size);
+  new_rd.data_size = GNUNET_RECLAIM_ATTRIBUTE_serialize (claim, attr_data);
+  new_rd.data = attr_data;
   new_label = GNUNET_STRINGS_data_to_string_alloc (&rvk->move_attr->new_id,
                                                    sizeof (uint64_t));
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Adding attribute %s\n", new_label);
-  rvk->ns_qe = GNUNET_NAMESTORE_records_store (nsh, &rvk->identity, new_label,
-                                               1, rd, &move_attr_finished, rvk);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding attribute %s\n", new_label);
+  rvk->ns_qe = GNUNET_NAMESTORE_records_store (
+      nsh, &rvk->identity, new_label, 1, &new_rd, &move_attr_finished, rvk);
   GNUNET_free (new_label);
+  GNUNET_free (claim);
+  GNUNET_free (attr_data);
 }
 
 
@@ -523,7 +478,7 @@ process_tickets (void *cls)
   struct TicketRecordsEntry *le;
   struct RevokedAttributeEntry *ae;
   if (NULL == rvk->tickets_to_update_head) {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Finished updatding tickets, success\n");
     rvk->cb (rvk->cb_cls, GNUNET_OK);
     cleanup_rvk (rvk);
@@ -592,7 +547,7 @@ move_attrs (struct RECLAIM_TICKETS_RevokeHandle *rvk)
   char *label;
 
   if (NULL == rvk->move_attr) {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Finished moving attributes\n");
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Finished moving attributes\n");
     rvk->ns_it = GNUNET_NAMESTORE_zone_iteration_start (
         nsh, &rvk->identity, &rvk_ns_iter_err, rvk, &rvk_ticket_update, rvk,
         &rvk_ticket_update_finished, rvk);
@@ -600,7 +555,7 @@ move_attrs (struct RECLAIM_TICKETS_RevokeHandle *rvk)
   }
   label = GNUNET_STRINGS_data_to_string_alloc (&rvk->move_attr->old_id,
                                                sizeof (uint64_t));
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Moving attribute %s\n", label);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Moving attribute %s\n", label);
 
   rvk->ns_qe = GNUNET_NAMESTORE_records_lookup (
       nsh, &rvk->identity, label, &rvk_ns_err, rvk, &rvk_move_attr_cb, rvk);
@@ -805,8 +760,10 @@ lookup_authz_cb (void *cls, uint32_t rd_count,
                             GNUNET_YES);
 
   for (int i = 0; i < rd_count; i++) {
+    if (GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR_REF != rd[i].record_type)
+      continue;
     lbl = GNUNET_STRINGS_data_to_string_alloc (rd[i].data, rd[i].data_size);
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Attribute ref found %s\n", lbl);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Attribute ref found %s\n", lbl);
     parallel_lookup = GNUNET_new (struct ParallelLookup);
     parallel_lookup->handle = cth;
     parallel_lookup->label = lbl;
@@ -818,9 +775,14 @@ lookup_authz_cb (void *cls, uint32_t rd_count,
     GNUNET_CONTAINER_DLL_insert (cth->parallel_lookups_head,
                                  cth->parallel_lookups_tail, parallel_lookup);
   }
-  cth->kill_task = GNUNET_SCHEDULER_add_delayed (
-      GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 3),
-      &abort_parallel_lookups, cth);
+  if (NULL != cth->parallel_lookups_head) {
+    cth->kill_task = GNUNET_SCHEDULER_add_delayed (
+        GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 3),
+        &abort_parallel_lookups, cth);
+    return;
+  }
+  cth->cb (cth->cb_cls, &cth->ticket.identity, cth->attrs, GNUNET_OK, NULL);
+  cleanup_cth (cth);
 }
 
 
@@ -841,7 +803,7 @@ RECLAIM_TICKETS_consume (const struct GNUNET_CRYPTO_EcdsaPrivateKey *id,
   cth->cb_cls = cb_cls;
   label =
       GNUNET_STRINGS_data_to_string_alloc (&cth->ticket.rnd, sizeof (uint64_t));
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Looking for AuthZ info under %s\n",
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Looking for AuthZ info under %s\n",
               label);
   cth->lookup_start_time = GNUNET_TIME_absolute_get ();
   cth->lookup_request = GNUNET_GNS_lookup (
@@ -870,112 +832,12 @@ RECLAIM_TICKETS_consume_cancel (struct RECLAIM_TICKETS_ConsumeHandle *cth)
 static void
 cleanup_issue_handle (struct TicketIssueHandle *handle)
 {
-  struct TicketReference *tr;
-  struct TicketReference *tr_tmp;
-  if (NULL != handle->attrs)
-    GNUNET_RECLAIM_ATTRIBUTE_list_destroy (handle->attrs);
   if (NULL != handle->ns_qe)
     GNUNET_NAMESTORE_cancel (handle->ns_qe);
-  for (tr = handle->ticket_refs_head; NULL != tr;) {
-    if (NULL != tr->attrs)
-      GNUNET_RECLAIM_ATTRIBUTE_list_destroy (tr->attrs);
-    tr_tmp = tr;
-    tr = tr->next;
-    GNUNET_free (tr_tmp);
-  }
   GNUNET_free (handle);
 }
 
 
-static void
-store_ticket_refs_cont (void *cls, int32_t success, const char *emsg)
-{
-  struct TicketIssueHandle *handle = cls;
-  handle->ns_qe = NULL;
-  if (GNUNET_OK != success) {
-    handle->cb (handle->cb_cls, NULL, GNUNET_SYSERR,
-                "Error storing updated ticket refs in GNS");
-    cleanup_issue_handle (handle);
-    return;
-  }
-  handle->cb (handle->cb_cls, &handle->ticket, GNUNET_OK, NULL);
-  cleanup_issue_handle (handle);
-}
-
-
-static void
-update_ticket_refs (void *cls)
-{
-  struct TicketIssueHandle *handle = cls;
-  struct GNUNET_GNSRECORD_Data refs_rd[handle->ticket_ref_num];
-  struct TicketReference *tr;
-
-  tr = handle->ticket_refs_head;
-  for (int i = 0; i < handle->ticket_ref_num; i++) {
-    refs_rd[i].data = &tr->ticket;
-    refs_rd[i].data_size = sizeof (struct GNUNET_RECLAIM_Ticket);
-    refs_rd[i].expiration_time = GNUNET_TIME_UNIT_DAYS.rel_value_us;
-    refs_rd[i].record_type = GNUNET_GNSRECORD_TYPE_RECLAIM_TICKETREF;
-    refs_rd[i].flags =
-        GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION | GNUNET_GNSRECORD_RF_PRIVATE;
-    tr = tr->next;
-  }
-
-  handle->ns_qe = GNUNET_NAMESTORE_records_store (
-      nsh, &handle->identity, GNUNET_GNS_EMPTY_LABEL_AT, handle->ticket_ref_num,
-      refs_rd, &store_ticket_refs_cont, handle);
-}
-
-
-static void
-ticket_lookup_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone,
-                  const char *label, unsigned int rd_count,
-                  const struct GNUNET_GNSRECORD_Data *rd)
-{
-  struct TicketIssueHandle *handle = cls;
-  struct TicketReference *tr;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Received tickets from local namestore.\n");
-  handle->ns_qe = NULL;
-  for (int i = 0; i < rd_count; i++) {
-    if (GNUNET_GNSRECORD_TYPE_RECLAIM_TICKETREF != rd[i].record_type)
-      continue;
-    tr = GNUNET_new (struct TicketReference);
-    memcpy (&tr->ticket, rd[i].data, sizeof (struct GNUNET_RECLAIM_Ticket));
-    if (0 != memcmp (&tr->ticket.identity, &handle->ticket.identity,
-                     sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey))) {
-      // Not our ticket
-      GNUNET_free (tr);
-      continue;
-    }
-    GNUNET_CONTAINER_DLL_insert (handle->ticket_refs_head,
-                                 handle->ticket_refs_tail, tr);
-    handle->ticket_ref_num++;
-  }
-  tr = GNUNET_new (struct TicketReference);
-  tr->ticket = handle->ticket;
-  tr->attrs = GNUNET_RECLAIM_ATTRIBUTE_list_dup (handle->attrs);
-  GNUNET_CONTAINER_DLL_insert (handle->ticket_refs_head,
-                               handle->ticket_refs_tail, tr);
-  handle->ticket_ref_num++;
-  GNUNET_SCHEDULER_add_now (&update_ticket_refs, handle);
-}
-
-
-/**
- * TODO maybe we should cleanup the ATTRREFS here?
- */
-static void
-ticket_lookup_error_cb (void *cls)
-{
-  struct TicketIssueHandle *handle = cls;
-  handle->ns_qe = NULL;
-  handle->cb (handle->cb_cls, &handle->ticket, GNUNET_SYSERR,
-              "Error checking for ticketsin GNS\n");
-  cleanup_issue_handle (handle);
-}
-
 static void
 store_ticket_issue_cont (void *cls, int32_t success, const char *emsg)
 {
@@ -987,10 +849,8 @@ store_ticket_issue_cont (void *cls, int32_t success, const char *emsg)
                 "Error storing AuthZ ticket in GNS");
     return;
   }
-  /* First, local references to tickets */
-  handle->ns_qe = GNUNET_NAMESTORE_records_lookup (
-      nsh, &handle->identity, GNUNET_GNS_EMPTY_LABEL_AT,
-      &ticket_lookup_error_cb, handle, &ticket_lookup_cb, handle);
+  handle->cb (handle->cb_cls, &handle->ticket, GNUNET_OK, NULL);
+  cleanup_issue_handle (handle);
 }
 
 
@@ -1000,7 +860,7 @@ issue_ticket (struct TicketIssueHandle *ih)
   struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry *le;
   struct GNUNET_GNSRECORD_Data *attrs_record;
   char *label;
-  size_t list_len = 0;
+  size_t list_len = 1;
   int i;
 
   for (le = ih->attrs->list_head; NULL != le; le = le->next)
@@ -1017,6 +877,12 @@ issue_ticket (struct TicketIssueHandle *ih)
     attrs_record[i].flags = GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
     i++;
   }
+  attrs_record[i].data = &ih->ticket;
+  attrs_record[i].data_size = sizeof (struct GNUNET_RECLAIM_Ticket);
+  attrs_record[i].expiration_time = GNUNET_TIME_UNIT_DAYS.rel_value_us;
+  attrs_record[i].record_type = GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET;
+  attrs_record[i].flags =
+      GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION | GNUNET_GNSRECORD_RF_PRIVATE;
 
   label =
       GNUNET_STRINGS_data_to_string_alloc (&ih->ticket.rnd, sizeof (uint64_t));
@@ -1055,49 +921,11 @@ RECLAIM_TICKETS_issue (const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
 static void
 cleanup_iter (struct RECLAIM_TICKETS_Iterator *iter)
 {
-  struct TicketReference *tr;
-  struct TicketReference *tr_tmp;
-  if (NULL != iter->ns_qe)
-    GNUNET_NAMESTORE_cancel (iter->ns_qe);
-  for (tr = iter->tickets_head; NULL != tr;) {
-    if (NULL != tr->attrs)
-      GNUNET_RECLAIM_ATTRIBUTE_list_destroy (tr->attrs);
-    tr_tmp = tr;
-    tr = tr->next;
-    GNUNET_free (tr_tmp);
-  }
+  if (NULL != iter->ns_it)
+    GNUNET_NAMESTORE_zone_iteration_stop (iter->ns_it);
   GNUNET_free (iter);
 }
 
-static void
-do_cleanup_iter (void *cls)
-{
-  struct RECLAIM_TICKETS_Iterator *iter = cls;
-  cleanup_iter (iter);
-}
-
-/**
- * Perform ticket iteration step
- *
- * @param ti ticket iterator to process
- */
-static void
-run_ticket_iteration_round (struct RECLAIM_TICKETS_Iterator *iter)
-{
-  struct TicketReference *tr;
-  if (NULL == iter->tickets_head) {
-    // No more tickets
-    iter->cb (iter->cb_cls, NULL);
-    GNUNET_SCHEDULER_add_now (&do_cleanup_iter, iter);
-    return;
-  }
-  tr = iter->tickets_head;
-  GNUNET_CONTAINER_DLL_remove (iter->tickets_head, iter->tickets_tail, tr);
-  iter->cb (iter->cb_cls, &tr->ticket);
-  if (NULL != tr->attrs)
-    GNUNET_RECLAIM_ATTRIBUTE_list_destroy (tr->attrs);
-  GNUNET_free (tr);
-}
 
 static void
 collect_tickets_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone,
@@ -1105,46 +933,52 @@ collect_tickets_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone,
                     const struct GNUNET_GNSRECORD_Data *rd)
 {
   struct RECLAIM_TICKETS_Iterator *iter = cls;
-  struct TicketReference *tr;
-  iter->ns_qe = NULL;
 
   for (int i = 0; i < rd_count; i++) {
-    if (GNUNET_GNSRECORD_TYPE_RECLAIM_TICKETREF != rd[i].record_type)
-      continue;
-    tr = GNUNET_new (struct TicketReference);
-    memcpy (&tr->ticket, rd[i].data, sizeof (struct GNUNET_RECLAIM_Ticket));
-    if (0 != memcmp (&tr->ticket.identity, &iter->identity_pub,
-                     sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey))) {
-      // Not our ticket
-      GNUNET_free (tr);
+    if (GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET != rd[i].record_type)
       continue;
-    }
-    GNUNET_CONTAINER_DLL_insert (iter->tickets_head, iter->tickets_tail, tr);
+    iter->cb (iter->cb_cls, (struct GNUNET_RECLAIM_Ticket *)rd[i].data);
+    return;
   }
-  run_ticket_iteration_round (iter);
+  GNUNET_NAMESTORE_zone_iterator_next (iter->ns_it, 1);
 }
 
+
+static void
+collect_tickets_finished_cb (void *cls)
+{
+  struct RECLAIM_TICKETS_Iterator *iter = cls;
+  iter->ns_it = NULL;
+  iter->cb (iter->cb_cls, NULL);
+  cleanup_iter (iter);
+}
+
+
 static void
 collect_tickets_error_cb (void *cls)
 {
   struct RECLAIM_TICKETS_Iterator *iter = cls;
-  iter->ns_qe = NULL;
+  iter->ns_it = NULL;
   iter->cb (iter->cb_cls, NULL);
   cleanup_iter (iter);
 }
 
+
 void
 RECLAIM_TICKETS_iteration_next (struct RECLAIM_TICKETS_Iterator *iter)
 {
-  run_ticket_iteration_round (iter);
+  GNUNET_NAMESTORE_zone_iterator_next (iter->ns_it, 1);
 }
 
+
 void
 RECLAIM_TICKETS_iteration_stop (struct RECLAIM_TICKETS_Iterator *iter)
 {
+  GNUNET_NAMESTORE_zone_iteration_stop (iter->ns_it);
   cleanup_iter (iter);
 }
 
+
 struct RECLAIM_TICKETS_Iterator *
 RECLAIM_TICKETS_iteration_start (
     const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
@@ -1153,13 +987,11 @@ RECLAIM_TICKETS_iteration_start (
   struct RECLAIM_TICKETS_Iterator *iter;
 
   iter = GNUNET_new (struct RECLAIM_TICKETS_Iterator);
-  iter->identity = *identity;
-  GNUNET_CRYPTO_ecdsa_key_get_public (identity, &iter->identity_pub);
   iter->cb = cb;
   iter->cb_cls = cb_cls;
-  iter->ns_qe = GNUNET_NAMESTORE_records_lookup (
-      nsh, identity, GNUNET_GNS_EMPTY_LABEL_AT, &collect_tickets_error_cb, iter,
-      &collect_tickets_cb, iter);
+  iter->ns_it = GNUNET_NAMESTORE_zone_iteration_start (
+      nsh, identity, &collect_tickets_error_cb, iter, &collect_tickets_cb, iter,
+      &collect_tickets_finished_cb, iter);
   return iter;
 }