diff options
author | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2019-04-13 22:57:06 +0200 |
---|---|---|
committer | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2019-04-14 10:01:24 +0200 |
commit | af90492d9f86b3bcce93a8459383744939318bc3 (patch) | |
tree | f1302668151763b247f0044691516343f3508209 /src/reclaim/gnunet-service-reclaim_tickets.c | |
parent | 38f1f248ac9666bd24655ef4b55ec38b909715ad (diff) | |
download | gnunet-af90492d9f86b3bcce93a8459383744939318bc3.tar.gz gnunet-af90492d9f86b3bcce93a8459383744939318bc3.zip |
RECLAIM: refactor revoke
Diffstat (limited to 'src/reclaim/gnunet-service-reclaim_tickets.c')
-rw-r--r-- | src/reclaim/gnunet-service-reclaim_tickets.c | 539 |
1 files changed, 508 insertions, 31 deletions
diff --git a/src/reclaim/gnunet-service-reclaim_tickets.c b/src/reclaim/gnunet-service-reclaim_tickets.c index 33b58280a..5a3190c7f 100644 --- a/src/reclaim/gnunet-service-reclaim_tickets.c +++ b/src/reclaim/gnunet-service-reclaim_tickets.c | |||
@@ -24,6 +24,8 @@ | |||
24 | * @brief reclaim tickets | 24 | * @brief reclaim tickets |
25 | * | 25 | * |
26 | */ | 26 | */ |
27 | #include <inttypes.h> | ||
28 | |||
27 | #include "gnunet-service-reclaim_tickets.h" | 29 | #include "gnunet-service-reclaim_tickets.h" |
28 | 30 | ||
29 | struct ParallelLookup; | 31 | struct ParallelLookup; |
@@ -227,6 +229,128 @@ struct RECLAIM_TICKETS_Iterator { | |||
227 | struct TicketReference *tickets_tail; | 229 | struct TicketReference *tickets_tail; |
228 | }; | 230 | }; |
229 | 231 | ||
232 | |||
233 | struct RevokedAttributeEntry { | ||
234 | /** | ||
235 | * DLL | ||
236 | */ | ||
237 | struct RevokedAttributeEntry *next; | ||
238 | |||
239 | /** | ||
240 | * DLL | ||
241 | */ | ||
242 | struct RevokedAttributeEntry *prev; | ||
243 | |||
244 | /** | ||
245 | * Old ID of the attribute | ||
246 | */ | ||
247 | uint64_t old_id; | ||
248 | |||
249 | /** | ||
250 | * New ID of the attribute | ||
251 | */ | ||
252 | uint64_t new_id; | ||
253 | }; | ||
254 | |||
255 | |||
256 | struct TicketRecordsEntry { | ||
257 | /** | ||
258 | * DLL | ||
259 | */ | ||
260 | struct TicketRecordsEntry *next; | ||
261 | |||
262 | /** | ||
263 | * DLL | ||
264 | */ | ||
265 | struct TicketRecordsEntry *prev; | ||
266 | |||
267 | /** | ||
268 | * Record count | ||
269 | */ | ||
270 | unsigned int rd_count; | ||
271 | |||
272 | /** | ||
273 | * Data | ||
274 | */ | ||
275 | char *data; | ||
276 | |||
277 | /** | ||
278 | * Data size | ||
279 | */ | ||
280 | size_t data_size; | ||
281 | |||
282 | /** | ||
283 | * Label | ||
284 | */ | ||
285 | char *label; | ||
286 | }; | ||
287 | |||
288 | /** | ||
289 | * Ticket revocation request handle | ||
290 | */ | ||
291 | struct RECLAIM_TICKETS_RevokeHandle { | ||
292 | /** | ||
293 | * Issuer Key | ||
294 | */ | ||
295 | struct GNUNET_CRYPTO_EcdsaPrivateKey identity; | ||
296 | |||
297 | /** | ||
298 | * Callback | ||
299 | */ | ||
300 | RECLAIM_TICKETS_RevokeCallback cb; | ||
301 | |||
302 | /** | ||
303 | * Callback cls | ||
304 | */ | ||
305 | void *cb_cls; | ||
306 | |||
307 | /** | ||
308 | * Ticket to issue | ||
309 | */ | ||
310 | struct GNUNET_RECLAIM_Ticket ticket; | ||
311 | |||
312 | /** | ||
313 | * QueueEntry | ||
314 | */ | ||
315 | struct GNUNET_NAMESTORE_QueueEntry *ns_qe; | ||
316 | |||
317 | /** | ||
318 | * Namestore iterator | ||
319 | */ | ||
320 | struct GNUNET_NAMESTORE_ZoneIterator *ns_it; | ||
321 | |||
322 | /** | ||
323 | * Revoked attributes | ||
324 | */ | ||
325 | struct RevokedAttributeEntry *attrs_head; | ||
326 | |||
327 | /** | ||
328 | * Revoked attributes | ||
329 | */ | ||
330 | struct RevokedAttributeEntry *attrs_tail; | ||
331 | |||
332 | /** | ||
333 | * Current attribute to move | ||
334 | */ | ||
335 | struct RevokedAttributeEntry *move_attr; | ||
336 | |||
337 | /** | ||
338 | * Number of attributes in ticket | ||
339 | */ | ||
340 | unsigned int ticket_attrs; | ||
341 | |||
342 | /** | ||
343 | * Tickets to update | ||
344 | */ | ||
345 | struct TicketRecordsEntry *tickets_to_update_head; | ||
346 | |||
347 | /** | ||
348 | * Tickets to update | ||
349 | */ | ||
350 | struct TicketRecordsEntry *tickets_to_update_tail; | ||
351 | }; | ||
352 | |||
353 | |||
230 | /* Namestore handle */ | 354 | /* Namestore handle */ |
231 | static struct GNUNET_NAMESTORE_Handle *nsh; | 355 | static struct GNUNET_NAMESTORE_Handle *nsh; |
232 | 356 | ||
@@ -236,12 +360,349 @@ static struct GNUNET_GNS_Handle *gns; | |||
236 | /* Handle to the statistics service */ | 360 | /* Handle to the statistics service */ |
237 | static struct GNUNET_STATISTICS_Handle *stats; | 361 | static struct GNUNET_STATISTICS_Handle *stats; |
238 | 362 | ||
363 | static void | ||
364 | move_attrs (struct RECLAIM_TICKETS_RevokeHandle *rh); | ||
365 | |||
366 | static void | ||
367 | move_attrs_cont (void *cls) | ||
368 | { | ||
369 | move_attrs ((struct RECLAIM_TICKETS_RevokeHandle *)cls); | ||
370 | } | ||
371 | |||
372 | /** | ||
373 | * Cleanup revoke handle | ||
374 | * | ||
375 | * @param rh the ticket revocation handle | ||
376 | */ | ||
377 | static void | ||
378 | cleanup_rvk (struct RECLAIM_TICKETS_RevokeHandle *rh) | ||
379 | { | ||
380 | struct RevokedAttributeEntry *ae; | ||
381 | struct TicketRecordsEntry *le; | ||
382 | if (NULL != rh->ns_qe) | ||
383 | GNUNET_NAMESTORE_cancel (rh->ns_qe); | ||
384 | if (NULL != rh->ns_it) | ||
385 | GNUNET_NAMESTORE_zone_iteration_stop (rh->ns_it); | ||
386 | while (NULL != (ae = rh->attrs_head)) { | ||
387 | GNUNET_CONTAINER_DLL_remove (rh->attrs_head, rh->attrs_tail, ae); | ||
388 | GNUNET_free (ae); | ||
389 | } | ||
390 | while (NULL != (le = rh->tickets_to_update_head)) { | ||
391 | GNUNET_CONTAINER_DLL_remove (rh->tickets_to_update_head, | ||
392 | rh->tickets_to_update_head, le); | ||
393 | if (NULL != le->data) | ||
394 | GNUNET_free (le->data); | ||
395 | if (NULL != le->label) | ||
396 | GNUNET_free (le->label); | ||
397 | GNUNET_free (le); | ||
398 | } | ||
399 | GNUNET_free (rh); | ||
400 | } | ||
401 | |||
402 | static void | ||
403 | del_attr_finished (void *cls, int32_t success, const char *emsg) | ||
404 | { | ||
405 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
406 | rvk->ns_qe = NULL; | ||
407 | if (GNUNET_SYSERR == success) { | ||
408 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Error removing attribute: %s\n", | ||
409 | emsg); | ||
410 | rvk->cb (rvk->cb_cls, GNUNET_SYSERR); | ||
411 | cleanup_rvk (rvk); | ||
412 | return; | ||
413 | } | ||
414 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Continuing\n"); | ||
415 | rvk->move_attr = rvk->move_attr->next; | ||
416 | GNUNET_SCHEDULER_add_now (&move_attrs_cont, rvk); | ||
417 | } | ||
418 | |||
419 | static void | ||
420 | move_attr_finished (void *cls, int32_t success, const char *emsg) | ||
421 | { | ||
422 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
423 | char *label; | ||
424 | rvk->ns_qe = NULL; | ||
425 | if (GNUNET_SYSERR == success) { | ||
426 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Error moving attribute: %s\n", emsg); | ||
427 | rvk->cb (rvk->cb_cls, GNUNET_SYSERR); | ||
428 | cleanup_rvk (rvk); | ||
429 | return; | ||
430 | } | ||
431 | label = GNUNET_STRINGS_data_to_string_alloc (&rvk->move_attr->old_id, | ||
432 | sizeof (uint64_t)); | ||
433 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Removing attribute %s\n", label); | ||
434 | rvk->ns_qe = GNUNET_NAMESTORE_records_store (nsh, &rvk->identity, label, 0, | ||
435 | NULL, &del_attr_finished, rvk); | ||
436 | } | ||
437 | |||
438 | |||
439 | static void | ||
440 | rvk_move_attr_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, | ||
441 | const char *label, unsigned int rd_count, | ||
442 | const struct GNUNET_GNSRECORD_Data *rd) | ||
443 | { | ||
444 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
445 | struct RevokedAttributeEntry *le; | ||
446 | char *new_label; | ||
447 | rvk->ns_qe = NULL; | ||
448 | if (0 == rd_count) { | ||
449 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
450 | "The attribute %s no longer exists!\n", label); | ||
451 | le = rvk->move_attr; | ||
452 | rvk->move_attr = le->next; | ||
453 | GNUNET_CONTAINER_DLL_remove (rvk->attrs_head, rvk->attrs_tail, le); | ||
454 | GNUNET_free (le); | ||
455 | GNUNET_SCHEDULER_add_now (&move_attrs_cont, rvk); | ||
456 | return; | ||
457 | } | ||
458 | /** find a new place for this attribute **/ | ||
459 | rvk->move_attr->new_id = | ||
460 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_STRONG, UINT64_MAX); | ||
461 | new_label = GNUNET_STRINGS_data_to_string_alloc (&rvk->move_attr->new_id, | ||
462 | sizeof (uint64_t)); | ||
463 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Adding attribute %s\n", new_label); | ||
464 | rvk->ns_qe = GNUNET_NAMESTORE_records_store (nsh, &rvk->identity, new_label, | ||
465 | 1, rd, &move_attr_finished, rvk); | ||
466 | GNUNET_free (new_label); | ||
467 | } | ||
468 | |||
469 | |||
470 | static void | ||
471 | rvk_ticket_update (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, | ||
472 | const char *label, unsigned int rd_count, | ||
473 | const struct GNUNET_GNSRECORD_Data *rd) | ||
474 | { | ||
475 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
476 | struct TicketRecordsEntry *le; | ||
477 | struct RevokedAttributeEntry *ae; | ||
478 | int has_changed = GNUNET_NO; | ||
479 | |||
480 | /** Let everything point to the old record **/ | ||
481 | for (int i = 0; i < rd_count; i++) { | ||
482 | if (GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR_REF != rd[i].record_type) | ||
483 | continue; | ||
484 | for (ae = rvk->attrs_head; NULL != ae; ae = ae->next) { | ||
485 | if (0 != memcmp (rd[i].data, &ae->old_id, sizeof (uint64_t))) | ||
486 | continue; | ||
487 | has_changed = GNUNET_YES; | ||
488 | break; | ||
489 | } | ||
490 | if (GNUNET_YES == has_changed) | ||
491 | break; | ||
492 | } | ||
493 | if (GNUNET_YES == has_changed) { | ||
494 | le = GNUNET_new (struct TicketRecordsEntry); | ||
495 | le->data_size = GNUNET_GNSRECORD_records_get_size (rd_count, rd); | ||
496 | le->data = GNUNET_malloc (le->data_size); | ||
497 | le->rd_count = rd_count; | ||
498 | le->label = GNUNET_strdup (label); | ||
499 | GNUNET_GNSRECORD_records_serialize (rd_count, rd, le->data_size, le->data); | ||
500 | GNUNET_CONTAINER_DLL_insert (rvk->tickets_to_update_head, | ||
501 | rvk->tickets_to_update_tail, le); | ||
502 | } | ||
503 | GNUNET_NAMESTORE_zone_iterator_next (rvk->ns_it, 1); | ||
504 | } | ||
505 | |||
506 | |||
507 | static void | ||
508 | process_tickets (void *cls); | ||
509 | |||
510 | |||
511 | static void | ||
512 | ticket_processed (void *cls, int32_t success, const char *emsg) | ||
513 | { | ||
514 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
515 | rvk->ns_qe = NULL; | ||
516 | GNUNET_SCHEDULER_add_now (&process_tickets, rvk); | ||
517 | } | ||
518 | |||
519 | static void | ||
520 | process_tickets (void *cls) | ||
521 | { | ||
522 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
523 | struct TicketRecordsEntry *le; | ||
524 | struct RevokedAttributeEntry *ae; | ||
525 | if (NULL == rvk->tickets_to_update_head) { | ||
526 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
527 | "Finished updatding tickets, success\n"); | ||
528 | rvk->cb (rvk->cb_cls, GNUNET_OK); | ||
529 | cleanup_rvk (rvk); | ||
530 | return; | ||
531 | } | ||
532 | le = rvk->tickets_to_update_head; | ||
533 | GNUNET_CONTAINER_DLL_remove (rvk->tickets_to_update_head, | ||
534 | rvk->tickets_to_update_tail, le); | ||
535 | struct GNUNET_GNSRECORD_Data rd[le->rd_count]; | ||
536 | GNUNET_GNSRECORD_records_deserialize (le->data_size, le->data, le->rd_count, | ||
537 | rd); | ||
538 | for (int i = 0; i < le->rd_count; i++) { | ||
539 | if (GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR_REF != rd[i].record_type) | ||
540 | continue; | ||
541 | for (ae = rvk->attrs_head; NULL != ae; ae = ae->next) { | ||
542 | if (0 != memcmp (rd[i].data, &ae->old_id, sizeof (uint64_t))) | ||
543 | continue; | ||
544 | rd[i].data = &ae->new_id; | ||
545 | } | ||
546 | } | ||
547 | rvk->ns_qe = GNUNET_NAMESTORE_records_store ( | ||
548 | nsh, &rvk->identity, le->label, le->rd_count, rd, &ticket_processed, rvk); | ||
549 | GNUNET_free (le->label); | ||
550 | GNUNET_free (le->data); | ||
551 | GNUNET_free (le); | ||
552 | } | ||
553 | |||
554 | static void | ||
555 | rvk_ticket_update_finished (void *cls) | ||
556 | { | ||
557 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
558 | rvk->ns_it = NULL; | ||
559 | GNUNET_SCHEDULER_add_now (&process_tickets, rvk); | ||
560 | } | ||
561 | |||
562 | |||
563 | static void | ||
564 | rvk_ns_iter_err (void *cls) | ||
565 | { | ||
566 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
567 | rvk->ns_it = NULL; | ||
568 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
569 | "Namestore error on revocation (id=%" PRIu64 "\n", | ||
570 | rvk->move_attr->old_id); | ||
571 | rvk->cb (rvk->cb_cls, GNUNET_SYSERR); | ||
572 | cleanup_rvk (rvk); | ||
573 | } | ||
574 | |||
575 | |||
576 | static void | ||
577 | rvk_ns_err (void *cls) | ||
578 | { | ||
579 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
580 | rvk->ns_qe = NULL; | ||
581 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
582 | "Namestore error on revocation (id=%" PRIu64 "\n", | ||
583 | rvk->move_attr->old_id); | ||
584 | rvk->cb (rvk->cb_cls, GNUNET_SYSERR); | ||
585 | cleanup_rvk (rvk); | ||
586 | } | ||
587 | |||
588 | |||
589 | static void | ||
590 | move_attrs (struct RECLAIM_TICKETS_RevokeHandle *rvk) | ||
591 | { | ||
592 | char *label; | ||
593 | |||
594 | if (NULL == rvk->move_attr) { | ||
595 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Finished moving attributes\n"); | ||
596 | rvk->ns_it = GNUNET_NAMESTORE_zone_iteration_start ( | ||
597 | nsh, &rvk->identity, &rvk_ns_iter_err, rvk, &rvk_ticket_update, rvk, | ||
598 | &rvk_ticket_update_finished, rvk); | ||
599 | return; | ||
600 | } | ||
601 | label = GNUNET_STRINGS_data_to_string_alloc (&rvk->move_attr->old_id, | ||
602 | sizeof (uint64_t)); | ||
603 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Moving attribute %s\n", label); | ||
604 | |||
605 | rvk->ns_qe = GNUNET_NAMESTORE_records_lookup ( | ||
606 | nsh, &rvk->identity, label, &rvk_ns_err, rvk, &rvk_move_attr_cb, rvk); | ||
607 | GNUNET_free (label); | ||
608 | } | ||
609 | |||
610 | |||
611 | static void | ||
612 | remove_ticket_cont (void *cls, int32_t success, const char *emsg) | ||
613 | { | ||
614 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
615 | rvk->ns_qe = NULL; | ||
616 | if (GNUNET_SYSERR == success) { | ||
617 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s\n", emsg); | ||
618 | rvk->cb (rvk->cb_cls, GNUNET_SYSERR); | ||
619 | cleanup_rvk (rvk); | ||
620 | return; | ||
621 | } | ||
622 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Deleted ticket\n"); | ||
623 | if (0 == rvk->ticket_attrs) { | ||
624 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
625 | "No attributes to move... strange\n"); | ||
626 | rvk->cb (rvk->cb_cls, GNUNET_OK); | ||
627 | cleanup_rvk (rvk); | ||
628 | return; | ||
629 | } | ||
630 | rvk->move_attr = rvk->attrs_head; | ||
631 | move_attrs (rvk); | ||
632 | } | ||
633 | |||
634 | |||
635 | static void | ||
636 | revoke_attrs_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, | ||
637 | const char *label, unsigned int rd_count, | ||
638 | const struct GNUNET_GNSRECORD_Data *rd) | ||
639 | |||
640 | { | ||
641 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
642 | struct RevokedAttributeEntry *le; | ||
643 | rvk->ns_qe = NULL; | ||
644 | for (int i = 0; i < rd_count; i++) { | ||
645 | if (GNUNET_GNSRECORD_TYPE_RECLAIM_ATTR_REF != rd[i].record_type) | ||
646 | continue; | ||
647 | le = GNUNET_new (struct RevokedAttributeEntry); | ||
648 | le->old_id = *((uint64_t *)rd[i].data); | ||
649 | GNUNET_CONTAINER_DLL_insert (rvk->attrs_head, rvk->attrs_tail, le); | ||
650 | rvk->ticket_attrs++; | ||
651 | } | ||
652 | |||
653 | /** Now, remove ticket **/ | ||
654 | rvk->ns_qe = GNUNET_NAMESTORE_records_store (nsh, &rvk->identity, label, 0, | ||
655 | NULL, &remove_ticket_cont, rvk); | ||
656 | } | ||
657 | |||
658 | |||
659 | static void | ||
660 | rvk_attrs_err_cb (void *cls) | ||
661 | { | ||
662 | struct RECLAIM_TICKETS_RevokeHandle *rvk = cls; | ||
663 | rvk->cb (rvk->cb_cls, GNUNET_SYSERR); | ||
664 | cleanup_rvk (rvk); | ||
665 | } | ||
666 | |||
667 | |||
668 | struct RECLAIM_TICKETS_RevokeHandle * | ||
669 | RECLAIM_TICKETS_revoke (const struct GNUNET_RECLAIM_Ticket *ticket, | ||
670 | const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, | ||
671 | RECLAIM_TICKETS_RevokeCallback cb, void *cb_cls) | ||
672 | { | ||
673 | struct RECLAIM_TICKETS_RevokeHandle *rvk; | ||
674 | char *label; | ||
675 | |||
676 | rvk = GNUNET_new (struct RECLAIM_TICKETS_RevokeHandle); | ||
677 | rvk->cb = cb; | ||
678 | rvk->cb_cls = cb_cls; | ||
679 | rvk->identity = *identity; | ||
680 | rvk->ticket = *ticket; | ||
681 | GNUNET_CRYPTO_ecdsa_key_get_public (&rvk->identity, &rvk->ticket.identity); | ||
682 | /** Get shared attributes **/ | ||
683 | label = GNUNET_STRINGS_data_to_string_alloc (&ticket->rnd, sizeof (uint64_t)); | ||
684 | |||
685 | rvk->ns_qe = GNUNET_NAMESTORE_records_lookup ( | ||
686 | nsh, identity, label, &rvk_attrs_err_cb, rvk, &revoke_attrs_cb, rvk); | ||
687 | return rvk; | ||
688 | } | ||
689 | |||
690 | |||
691 | void | ||
692 | RECLAIM_TICKETS_revoke_cancel (struct RECLAIM_TICKETS_RevokeHandle *rh) | ||
693 | { | ||
694 | cleanup_rvk (rh); | ||
695 | } | ||
696 | /******************************* | ||
697 | * Ticket consume | ||
698 | *******************************/ | ||
239 | 699 | ||
240 | /** | 700 | /** |
241 | * Cleanup ticket consume handle | 701 | * Cleanup ticket consume handle |
242 | * @param cth the handle to clean up | 702 | * @param cth the handle to clean up |
243 | */ | 703 | */ |
244 | static void cleanup_cth (struct RECLAIM_TICKETS_ConsumeHandle *cth) | 704 | static void |
705 | cleanup_cth (struct RECLAIM_TICKETS_ConsumeHandle *cth) | ||
245 | { | 706 | { |
246 | struct ParallelLookup *lu; | 707 | struct ParallelLookup *lu; |
247 | struct ParallelLookup *tmp; | 708 | struct ParallelLookup *tmp; |
@@ -305,7 +766,8 @@ process_parallel_lookup_result (void *cls, uint32_t rd_count, | |||
305 | } | 766 | } |
306 | 767 | ||
307 | 768 | ||
308 | static void abort_parallel_lookups (void *cls) | 769 | static void |
770 | abort_parallel_lookups (void *cls) | ||
309 | { | 771 | { |
310 | struct RECLAIM_TICKETS_ConsumeHandle *cth = cls; | 772 | struct RECLAIM_TICKETS_ConsumeHandle *cth = cls; |
311 | struct ParallelLookup *lu; | 773 | struct ParallelLookup *lu; |
@@ -325,8 +787,9 @@ static void abort_parallel_lookups (void *cls) | |||
325 | } | 787 | } |
326 | 788 | ||
327 | 789 | ||
328 | static void lookup_authz_cb (void *cls, uint32_t rd_count, | 790 | static void |
329 | const struct GNUNET_GNSRECORD_Data *rd) | 791 | lookup_authz_cb (void *cls, uint32_t rd_count, |
792 | const struct GNUNET_GNSRECORD_Data *rd) | ||
330 | { | 793 | { |
331 | struct RECLAIM_TICKETS_ConsumeHandle *cth = cls; | 794 | struct RECLAIM_TICKETS_ConsumeHandle *cth = cls; |
332 | struct ParallelLookup *parallel_lookup; | 795 | struct ParallelLookup *parallel_lookup; |
@@ -388,7 +851,8 @@ RECLAIM_TICKETS_consume (const struct GNUNET_CRYPTO_EcdsaPrivateKey *id, | |||
388 | return cth; | 851 | return cth; |
389 | } | 852 | } |
390 | 853 | ||
391 | void RECLAIM_TICKETS_consume_cancel (struct RECLAIM_TICKETS_ConsumeHandle *cth) | 854 | void |
855 | RECLAIM_TICKETS_consume_cancel (struct RECLAIM_TICKETS_ConsumeHandle *cth) | ||
392 | { | 856 | { |
393 | cleanup_cth (cth); | 857 | cleanup_cth (cth); |
394 | return; | 858 | return; |
@@ -403,7 +867,8 @@ void RECLAIM_TICKETS_consume_cancel (struct RECLAIM_TICKETS_ConsumeHandle *cth) | |||
403 | * Cleanup ticket consume handle | 867 | * Cleanup ticket consume handle |
404 | * @param handle the handle to clean up | 868 | * @param handle the handle to clean up |
405 | */ | 869 | */ |
406 | static void cleanup_issue_handle (struct TicketIssueHandle *handle) | 870 | static void |
871 | cleanup_issue_handle (struct TicketIssueHandle *handle) | ||
407 | { | 872 | { |
408 | struct TicketReference *tr; | 873 | struct TicketReference *tr; |
409 | struct TicketReference *tr_tmp; | 874 | struct TicketReference *tr_tmp; |
@@ -422,8 +887,8 @@ static void cleanup_issue_handle (struct TicketIssueHandle *handle) | |||
422 | } | 887 | } |
423 | 888 | ||
424 | 889 | ||
425 | static void store_ticket_refs_cont (void *cls, int32_t success, | 890 | static void |
426 | const char *emsg) | 891 | store_ticket_refs_cont (void *cls, int32_t success, const char *emsg) |
427 | { | 892 | { |
428 | struct TicketIssueHandle *handle = cls; | 893 | struct TicketIssueHandle *handle = cls; |
429 | handle->ns_qe = NULL; | 894 | handle->ns_qe = NULL; |
@@ -438,7 +903,8 @@ static void store_ticket_refs_cont (void *cls, int32_t success, | |||
438 | } | 903 | } |
439 | 904 | ||
440 | 905 | ||
441 | static void update_ticket_refs (void *cls) | 906 | static void |
907 | update_ticket_refs (void *cls) | ||
442 | { | 908 | { |
443 | struct TicketIssueHandle *handle = cls; | 909 | struct TicketIssueHandle *handle = cls; |
444 | struct GNUNET_GNSRECORD_Data refs_rd[handle->ticket_ref_num]; | 910 | struct GNUNET_GNSRECORD_Data refs_rd[handle->ticket_ref_num]; |
@@ -461,10 +927,10 @@ static void update_ticket_refs (void *cls) | |||
461 | } | 927 | } |
462 | 928 | ||
463 | 929 | ||
464 | static void ticket_lookup_cb (void *cls, | 930 | static void |
465 | const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, | 931 | ticket_lookup_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, |
466 | const char *label, unsigned int rd_count, | 932 | const char *label, unsigned int rd_count, |
467 | const struct GNUNET_GNSRECORD_Data *rd) | 933 | const struct GNUNET_GNSRECORD_Data *rd) |
468 | { | 934 | { |
469 | struct TicketIssueHandle *handle = cls; | 935 | struct TicketIssueHandle *handle = cls; |
470 | struct TicketReference *tr; | 936 | struct TicketReference *tr; |
@@ -500,7 +966,8 @@ static void ticket_lookup_cb (void *cls, | |||
500 | /** | 966 | /** |
501 | * TODO maybe we should cleanup the ATTRREFS here? | 967 | * TODO maybe we should cleanup the ATTRREFS here? |
502 | */ | 968 | */ |
503 | static void ticket_lookup_error_cb (void *cls) | 969 | static void |
970 | ticket_lookup_error_cb (void *cls) | ||
504 | { | 971 | { |
505 | struct TicketIssueHandle *handle = cls; | 972 | struct TicketIssueHandle *handle = cls; |
506 | handle->ns_qe = NULL; | 973 | handle->ns_qe = NULL; |
@@ -509,8 +976,8 @@ static void ticket_lookup_error_cb (void *cls) | |||
509 | cleanup_issue_handle (handle); | 976 | cleanup_issue_handle (handle); |
510 | } | 977 | } |
511 | 978 | ||
512 | static void store_ticket_issue_cont (void *cls, int32_t success, | 979 | static void |
513 | const char *emsg) | 980 | store_ticket_issue_cont (void *cls, int32_t success, const char *emsg) |
514 | { | 981 | { |
515 | struct TicketIssueHandle *handle = cls; | 982 | struct TicketIssueHandle *handle = cls; |
516 | 983 | ||
@@ -527,7 +994,8 @@ static void store_ticket_issue_cont (void *cls, int32_t success, | |||
527 | } | 994 | } |
528 | 995 | ||
529 | 996 | ||
530 | static void issue_ticket (struct TicketIssueHandle *ih) | 997 | static void |
998 | issue_ticket (struct TicketIssueHandle *ih) | ||
531 | { | 999 | { |
532 | struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry *le; | 1000 | struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry *le; |
533 | struct GNUNET_GNSRECORD_Data *attrs_record; | 1001 | struct GNUNET_GNSRECORD_Data *attrs_record; |
@@ -561,11 +1029,11 @@ static void issue_ticket (struct TicketIssueHandle *ih) | |||
561 | } | 1029 | } |
562 | 1030 | ||
563 | 1031 | ||
564 | void RECLAIM_TICKETS_issue ( | 1032 | void |
565 | const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, | 1033 | RECLAIM_TICKETS_issue (const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, |
566 | const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs, | 1034 | const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs, |
567 | const struct GNUNET_CRYPTO_EcdsaPublicKey *audience, | 1035 | const struct GNUNET_CRYPTO_EcdsaPublicKey *audience, |
568 | RECLAIM_TICKETS_TicketResult cb, void *cb_cls) | 1036 | RECLAIM_TICKETS_TicketResult cb, void *cb_cls) |
569 | { | 1037 | { |
570 | struct TicketIssueHandle *tih; | 1038 | struct TicketIssueHandle *tih; |
571 | tih = GNUNET_new (struct TicketIssueHandle); | 1039 | tih = GNUNET_new (struct TicketIssueHandle); |
@@ -584,7 +1052,8 @@ void RECLAIM_TICKETS_issue ( | |||
584 | * Ticket iteration | 1052 | * Ticket iteration |
585 | ************************************/ | 1053 | ************************************/ |
586 | 1054 | ||
587 | static void cleanup_iter (struct RECLAIM_TICKETS_Iterator *iter) | 1055 | static void |
1056 | cleanup_iter (struct RECLAIM_TICKETS_Iterator *iter) | ||
588 | { | 1057 | { |
589 | struct TicketReference *tr; | 1058 | struct TicketReference *tr; |
590 | struct TicketReference *tr_tmp; | 1059 | struct TicketReference *tr_tmp; |
@@ -600,7 +1069,8 @@ static void cleanup_iter (struct RECLAIM_TICKETS_Iterator *iter) | |||
600 | GNUNET_free (iter); | 1069 | GNUNET_free (iter); |
601 | } | 1070 | } |
602 | 1071 | ||
603 | static void do_cleanup_iter (void *cls) | 1072 | static void |
1073 | do_cleanup_iter (void *cls) | ||
604 | { | 1074 | { |
605 | struct RECLAIM_TICKETS_Iterator *iter = cls; | 1075 | struct RECLAIM_TICKETS_Iterator *iter = cls; |
606 | cleanup_iter (iter); | 1076 | cleanup_iter (iter); |
@@ -611,7 +1081,8 @@ static void do_cleanup_iter (void *cls) | |||
611 | * | 1081 | * |
612 | * @param ti ticket iterator to process | 1082 | * @param ti ticket iterator to process |
613 | */ | 1083 | */ |
614 | static void run_ticket_iteration_round (struct RECLAIM_TICKETS_Iterator *iter) | 1084 | static void |
1085 | run_ticket_iteration_round (struct RECLAIM_TICKETS_Iterator *iter) | ||
615 | { | 1086 | { |
616 | struct TicketReference *tr; | 1087 | struct TicketReference *tr; |
617 | if (NULL == iter->tickets_head) { | 1088 | if (NULL == iter->tickets_head) { |
@@ -653,7 +1124,8 @@ collect_tickets_cb (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, | |||
653 | run_ticket_iteration_round (iter); | 1124 | run_ticket_iteration_round (iter); |
654 | } | 1125 | } |
655 | 1126 | ||
656 | static void collect_tickets_error_cb (void *cls) | 1127 | static void |
1128 | collect_tickets_error_cb (void *cls) | ||
657 | { | 1129 | { |
658 | struct RECLAIM_TICKETS_Iterator *iter = cls; | 1130 | struct RECLAIM_TICKETS_Iterator *iter = cls; |
659 | iter->ns_qe = NULL; | 1131 | iter->ns_qe = NULL; |
@@ -661,17 +1133,20 @@ static void collect_tickets_error_cb (void *cls) | |||
661 | cleanup_iter (iter); | 1133 | cleanup_iter (iter); |
662 | } | 1134 | } |
663 | 1135 | ||
664 | void RECLAIM_TICKETS_iteration_next (struct RECLAIM_TICKETS_Iterator *iter) | 1136 | void |
1137 | RECLAIM_TICKETS_iteration_next (struct RECLAIM_TICKETS_Iterator *iter) | ||
665 | { | 1138 | { |
666 | run_ticket_iteration_round (iter); | 1139 | run_ticket_iteration_round (iter); |
667 | } | 1140 | } |
668 | 1141 | ||
669 | void RECLAIM_TICKETS_iteration_stop (struct RECLAIM_TICKETS_Iterator *iter) | 1142 | void |
1143 | RECLAIM_TICKETS_iteration_stop (struct RECLAIM_TICKETS_Iterator *iter) | ||
670 | { | 1144 | { |
671 | cleanup_iter (iter); | 1145 | cleanup_iter (iter); |
672 | } | 1146 | } |
673 | 1147 | ||
674 | struct RECLAIM_TICKETS_Iterator *RECLAIM_TICKETS_iteration_start ( | 1148 | struct RECLAIM_TICKETS_Iterator * |
1149 | RECLAIM_TICKETS_iteration_start ( | ||
675 | const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, | 1150 | const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, |
676 | RECLAIM_TICKETS_TicketIter cb, void *cb_cls) | 1151 | RECLAIM_TICKETS_TicketIter cb, void *cb_cls) |
677 | { | 1152 | { |
@@ -689,7 +1164,8 @@ struct RECLAIM_TICKETS_Iterator *RECLAIM_TICKETS_iteration_start ( | |||
689 | } | 1164 | } |
690 | 1165 | ||
691 | 1166 | ||
692 | int RECLAIM_TICKETS_init (const struct GNUNET_CONFIGURATION_Handle *c) | 1167 | int |
1168 | RECLAIM_TICKETS_init (const struct GNUNET_CONFIGURATION_Handle *c) | ||
693 | { | 1169 | { |
694 | // Connect to identity and namestore services | 1170 | // Connect to identity and namestore services |
695 | nsh = GNUNET_NAMESTORE_connect (c); | 1171 | nsh = GNUNET_NAMESTORE_connect (c); |
@@ -707,7 +1183,8 @@ int RECLAIM_TICKETS_init (const struct GNUNET_CONFIGURATION_Handle *c) | |||
707 | return GNUNET_OK; | 1183 | return GNUNET_OK; |
708 | } | 1184 | } |
709 | 1185 | ||
710 | void RECLAIM_TICKETS_deinit (void) | 1186 | void |
1187 | RECLAIM_TICKETS_deinit (void) | ||
711 | { | 1188 | { |
712 | if (NULL != nsh) | 1189 | if (NULL != nsh) |
713 | GNUNET_NAMESTORE_disconnect (nsh); | 1190 | GNUNET_NAMESTORE_disconnect (nsh); |