From eb2d072aa1096c9d77cbfde239a1004cab642e64 Mon Sep 17 00:00:00 2001 From: "Schanzenbach, Martin" Date: Sun, 14 Apr 2019 00:09:18 +0200 Subject: RECLAIM: Simplify logic --- src/reclaim/gnunet-reclaim.c | 68 +++++--- src/reclaim/gnunet-service-reclaim.c | 1 + src/reclaim/gnunet-service-reclaim_tickets.c | 237 ++++----------------------- src/reclaim/plugin_gnsrecord_reclaim.c | 27 +-- 4 files changed, 97 insertions(+), 236 deletions(-) (limited to 'src/reclaim') diff --git a/src/reclaim/gnunet-reclaim.c b/src/reclaim/gnunet-reclaim.c index 0e5591d69..1c3b4174d 100644 --- a/src/reclaim/gnunet-reclaim.c +++ b/src/reclaim/gnunet-reclaim.c @@ -157,7 +157,8 @@ static struct GNUNET_SCHEDULER_Task *cleanup_task; */ struct GNUNET_RECLAIM_ATTRIBUTE_Claim *claim; -static void do_cleanup (void *cls) +static void +do_cleanup (void *cls) { cleanup_task = NULL; if (NULL != timeout) @@ -178,8 +179,8 @@ static void do_cleanup (void *cls) GNUNET_free (attr_list); } -static void ticket_issue_cb (void *cls, - const struct GNUNET_RECLAIM_Ticket *ticket) +static void +ticket_issue_cb (void *cls, const struct GNUNET_RECLAIM_Ticket *ticket) { char *ticket_str; reclaim_op = NULL; @@ -192,7 +193,8 @@ static void ticket_issue_cb (void *cls, cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); } -static void store_attr_cont (void *cls, int32_t success, const char *emsg) +static void +store_attr_cont (void *cls, int32_t success, const char *emsg) { reclaim_op = NULL; if (GNUNET_SYSERR == success) { @@ -201,9 +203,9 @@ static void store_attr_cont (void *cls, int32_t success, const char *emsg) cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); } -static void process_attrs (void *cls, - const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, - const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr) +static void +process_attrs (void *cls, const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, + const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr) { char *value_str; const char *attr_type; @@ -224,33 +226,45 @@ static void process_attrs (void *cls, attr_type, attr->version, attr->id); } -static void ticket_iter_err (void *cls) +static void +ticket_iter_err (void *cls) { ticket_iterator = NULL; fprintf (stderr, "Failed to iterate over tickets\n"); cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); } -static void ticket_iter_fin (void *cls) +static void +ticket_iter_fin (void *cls) { ticket_iterator = NULL; cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); } -static void ticket_iter (void *cls, const struct GNUNET_RECLAIM_Ticket *ticket) +static void +ticket_iter (void *cls, const struct GNUNET_RECLAIM_Ticket *ticket) { - fprintf (stdout, "Found ticket\n"); + char *aud; + char *ref; + + aud = GNUNET_STRINGS_data_to_string_alloc ( + &ticket->audience, sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)); + ref = GNUNET_STRINGS_data_to_string_alloc (&ticket->rnd, sizeof (uint64_t)); + + fprintf (stdout, "Ticket ID: %s | Audience: %s\n", ref, aud); GNUNET_RECLAIM_ticket_iteration_next (ticket_iterator); } -static void iter_error (void *cls) +static void +iter_error (void *cls) { attr_iterator = NULL; fprintf (stderr, "Failed to iterate over attributes\n"); cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); } -static void timeout_task (void *cls) +static void +timeout_task (void *cls) { timeout = NULL; ret = 1; @@ -259,7 +273,8 @@ static void timeout_task (void *cls) cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); } -static void process_rvk (void *cls, int success, const char *msg) +static void +process_rvk (void *cls, int success, const char *msg) { reclaim_op = NULL; if (GNUNET_OK != success) { @@ -269,7 +284,8 @@ static void process_rvk (void *cls, int success, const char *msg) cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); } -static void iter_finished (void *cls) +static void +iter_finished (void *cls) { char *data; size_t data_size; @@ -325,9 +341,9 @@ static void iter_finished (void *cls) cleanup_task = GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); } -static void iter_cb (void *cls, - const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, - const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr) +static void +iter_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, + const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr) { struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry *le; char *attrs_tmp; @@ -367,7 +383,8 @@ static void iter_cb (void *cls, GNUNET_RECLAIM_get_attributes_next (attr_iterator); } -static void start_process () +static void +start_process () { if (NULL == pkey) { fprintf (stderr, "Ego %s not found\n", ego_name); @@ -402,8 +419,9 @@ static void start_process () static int init = GNUNET_YES; -static void ego_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, - const char *name) +static void +ego_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, + const char *name) { if (NULL == name) { if (GNUNET_YES == init) { @@ -418,8 +436,9 @@ static void ego_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, } -static void run (void *cls, char *const *args, const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *c) +static void +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *c) { ret = 0; if (NULL == ego_name) { @@ -446,7 +465,8 @@ static void run (void *cls, char *const *args, const char *cfgfile, } -int main (int argc, char *const argv[]) +int +main (int argc, char *const argv[]) { exp_interval = GNUNET_TIME_UNIT_HOURS; struct GNUNET_GETOPT_CommandLineOption options[] = { diff --git a/src/reclaim/gnunet-service-reclaim.c b/src/reclaim/gnunet-service-reclaim.c index 2c74193d1..2bb4f5a74 100644 --- a/src/reclaim/gnunet-service-reclaim.c +++ b/src/reclaim/gnunet-service-reclaim.c @@ -925,6 +925,7 @@ ticket_iter_cb (void *cls, struct GNUNET_RECLAIM_Ticket *ticket) } else { env = GNUNET_MQ_msg_extra (trm, sizeof (struct GNUNET_RECLAIM_Ticket), GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT); + memcpy (&trm[1], ticket, sizeof (struct GNUNET_RECLAIM_Ticket)); } trm->id = htonl (ti->r_id); GNUNET_MQ_send (ti->client->mq, env); diff --git a/src/reclaim/gnunet-service-reclaim_tickets.c b/src/reclaim/gnunet-service-reclaim_tickets.c index 5a3190c7f..4a307e635 100644 --- a/src/reclaim/gnunet-service-reclaim_tickets.c +++ b/src/reclaim/gnunet-service-reclaim_tickets.c @@ -163,21 +163,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 */ @@ -193,20 +178,10 @@ struct TicketIssueHandle { * Ticket iterator */ struct RECLAIM_TICKETS_Iterator { - /** - * Issuer Key - */ - struct GNUNET_CRYPTO_EcdsaPrivateKey identity; - - /** - * Issuer pubkey - */ - struct GNUNET_CRYPTO_EcdsaPublicKey identity_pub; - /** * Namestore queue entry */ - struct GNUNET_NAMESTORE_QueueEntry *ns_qe; + struct GNUNET_NAMESTORE_ZoneIterator *ns_it; /** * Iter callback @@ -217,16 +192,6 @@ struct RECLAIM_TICKETS_Iterator { * Iter cls */ void *cb_cls; - - /** - * Ticket reference list - */ - struct TicketReference *tickets_head; - - /** - * Ticket reference list - */ - struct TicketReference *tickets_tail; }; @@ -870,112 +835,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 +852,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 +863,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 +880,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 +924,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 +936,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) + if (GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET != 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); - 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 +990,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; } diff --git a/src/reclaim/plugin_gnsrecord_reclaim.c b/src/reclaim/plugin_gnsrecord_reclaim.c index 612fec3bd..48cdd9811 100644 --- a/src/reclaim/plugin_gnsrecord_reclaim.c +++ b/src/reclaim/plugin_gnsrecord_reclaim.c @@ -39,8 +39,8 @@ * @param data_size number of bytes in @a data * @return NULL on error, otherwise human-readable representation of the value */ -static char *value_to_string (void *cls, uint32_t type, const void *data, - size_t data_size) +static char * +value_to_string (void *cls, uint32_t type, const void *data, size_t data_size) { switch (type) { case GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR: @@ -49,7 +49,7 @@ static char *value_to_string (void *cls, uint32_t type, const void *data, case GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_CLIENT: return GNUNET_strndup (data, data_size); case GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR_REF: - case GNUNET_GNSRECORD_TYPE_RECLAIM_TICKETREF: + case GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET: case GNUNET_GNSRECORD_TYPE_RECLAIM_MASTER: return GNUNET_STRINGS_data_to_string_alloc (data, data_size); default: @@ -69,8 +69,9 @@ static char *value_to_string (void *cls, uint32_t type, const void *data, * @param data_size set to number of bytes in @a data * @return #GNUNET_OK on success */ -static int string_to_value (void *cls, uint32_t type, const char *s, - void **data, size_t *data_size) +static int +string_to_value (void *cls, uint32_t type, const char *s, void **data, + size_t *data_size) { if (NULL == s) return GNUNET_SYSERR; @@ -84,7 +85,7 @@ static int string_to_value (void *cls, uint32_t type, const char *s, return GNUNET_OK; case GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR_REF: case GNUNET_GNSRECORD_TYPE_RECLAIM_MASTER: - case GNUNET_GNSRECORD_TYPE_RECLAIM_TICKETREF: + case GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET: return GNUNET_STRINGS_string_to_data (s, strlen (s), *data, *data_size); default: return GNUNET_SYSERR; @@ -105,7 +106,7 @@ static struct { {"RECLAIM_MASTER", GNUNET_GNSRECORD_TYPE_RECLAIM_MASTER}, {"RECLAIM_OIDC_CLIENT", GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_CLIENT}, {"RECLAIM_OIDC_REDIRECT", GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_REDIRECT}, - {"RECLAIM_TICKETREF", GNUNET_GNSRECORD_TYPE_RECLAIM_TICKETREF}, + {"RECLAIM_TICKET", GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET}, {NULL, UINT32_MAX}}; @@ -116,7 +117,8 @@ static struct { * @param dns_typename name to convert * @return corresponding number, UINT32_MAX on error */ -static uint32_t typename_to_number (void *cls, const char *dns_typename) +static uint32_t +typename_to_number (void *cls, const char *dns_typename) { unsigned int i; @@ -135,7 +137,8 @@ static uint32_t typename_to_number (void *cls, const char *dns_typename) * @param type number of a type to convert * @return corresponding typestring, NULL on error */ -static const char *number_to_typename (void *cls, uint32_t type) +static const char * +number_to_typename (void *cls, uint32_t type) { unsigned int i; @@ -152,7 +155,8 @@ static const char *number_to_typename (void *cls, uint32_t type) * @param cls NULL * @return the exported block API */ -void *libgnunet_plugin_gnsrecord_reclaim_init (void *cls) +void * +libgnunet_plugin_gnsrecord_reclaim_init (void *cls) { struct GNUNET_GNSRECORD_PluginFunctions *api; @@ -171,7 +175,8 @@ void *libgnunet_plugin_gnsrecord_reclaim_init (void *cls) * @param cls the return value from #libgnunet_plugin_block_test_init * @return NULL */ -void *libgnunet_plugin_gnsrecord_reclaim_done (void *cls) +void * +libgnunet_plugin_gnsrecord_reclaim_done (void *cls) { struct GNUNET_GNSRECORD_PluginFunctions *api = cls; -- cgit v1.2.3