diff options
author | Martin Schanzenbach <schanzen@gnunet.org> | 2020-12-26 14:15:58 +0900 |
---|---|---|
committer | Martin Schanzenbach <schanzen@gnunet.org> | 2020-12-26 14:15:58 +0900 |
commit | 75a3a90fb765da872383b8f85b2d4087186dc3db (patch) | |
tree | 820526e2cc461196cb3d89c45496d654529a6929 | |
parent | 1e37e8edc0c23674df6c2144e3f2d83e3dbc1bc2 (diff) | |
download | gnunet-75a3a90fb765da872383b8f85b2d4087186dc3db.tar.gz gnunet-75a3a90fb765da872383b8f85b2d4087186dc3db.zip |
RECLAIM: automatically purge dangling references
-rw-r--r-- | src/reclaim/gnunet-service-reclaim.c | 411 |
1 files changed, 278 insertions, 133 deletions
diff --git a/src/reclaim/gnunet-service-reclaim.c b/src/reclaim/gnunet-service-reclaim.c index 5614f05db..913b667b7 100644 --- a/src/reclaim/gnunet-service-reclaim.c +++ b/src/reclaim/gnunet-service-reclaim.c | |||
@@ -300,6 +300,16 @@ struct AttributeDeleteHandle | |||
300 | struct TicketRecordsEntry *tickets_to_update_tail; | 300 | struct TicketRecordsEntry *tickets_to_update_tail; |
301 | 301 | ||
302 | /** | 302 | /** |
303 | * Existing attributes | ||
304 | */ | ||
305 | struct GNUNET_RECLAIM_AttributeList *existing_attributes; | ||
306 | |||
307 | /** | ||
308 | * Existing credentials | ||
309 | */ | ||
310 | struct GNUNET_RECLAIM_CredentialList *existing_credentials; | ||
311 | |||
312 | /** | ||
303 | * Attribute label | 313 | * Attribute label |
304 | */ | 314 | */ |
305 | char *label; | 315 | char *label; |
@@ -490,6 +500,10 @@ cleanup_adh (struct AttributeDeleteHandle *adh) | |||
490 | GNUNET_free (adh->claim); | 500 | GNUNET_free (adh->claim); |
491 | if (NULL != adh->credential) | 501 | if (NULL != adh->credential) |
492 | GNUNET_free (adh->credential); | 502 | GNUNET_free (adh->credential); |
503 | if (NULL != adh->existing_credentials) | ||
504 | GNUNET_RECLAIM_credential_list_destroy (adh->existing_credentials); | ||
505 | if (NULL != adh->existing_attributes) | ||
506 | GNUNET_RECLAIM_attribute_list_destroy (adh->existing_attributes); | ||
493 | while (NULL != (le = adh->tickets_to_update_head)) | 507 | while (NULL != (le = adh->tickets_to_update_head)) |
494 | { | 508 | { |
495 | GNUNET_CONTAINER_DLL_remove (adh->tickets_to_update_head, | 509 | GNUNET_CONTAINER_DLL_remove (adh->tickets_to_update_head, |
@@ -1301,7 +1315,7 @@ send_delete_response (struct AttributeDeleteHandle *adh, int32_t success) | |||
1301 | * @param rd record data | 1315 | * @param rd record data |
1302 | */ | 1316 | */ |
1303 | static void | 1317 | static void |
1304 | ticket_iter (void *cls, | 1318 | consistency_iter (void *cls, |
1305 | const struct GNUNET_IDENTITY_PrivateKey *zone, | 1319 | const struct GNUNET_IDENTITY_PrivateKey *zone, |
1306 | const char *label, | 1320 | const char *label, |
1307 | unsigned int rd_count, | 1321 | unsigned int rd_count, |
@@ -1309,26 +1323,42 @@ ticket_iter (void *cls, | |||
1309 | { | 1323 | { |
1310 | struct AttributeDeleteHandle *adh = cls; | 1324 | struct AttributeDeleteHandle *adh = cls; |
1311 | struct TicketRecordsEntry *le; | 1325 | struct TicketRecordsEntry *le; |
1312 | int has_changed = GNUNET_NO; | 1326 | struct GNUNET_RECLAIM_AttributeListEntry *ale; |
1327 | struct GNUNET_RECLAIM_CredentialListEntry *cle; | ||
1328 | int is_ticket = GNUNET_NO; | ||
1313 | for (int i = 0; i < rd_count; i++) | 1329 | for (int i = 0; i < rd_count; i++) |
1314 | { | 1330 | { |
1315 | if (GNUNET_GNSRECORD_TYPE_RECLAIM_ATTRIBUTE_REF != rd[i].record_type) | 1331 | switch (rd[i].record_type) { |
1316 | continue; | 1332 | case GNUNET_GNSRECORD_TYPE_RECLAIM_ATTRIBUTE: |
1317 | if (adh->claim != NULL) | 1333 | ale = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry); |
1318 | if (GNUNET_YES != GNUNET_RECLAIM_id_is_equal (rd[i].data, | 1334 | GNUNET_RECLAIM_attribute_deserialize (rd[i].data, |
1319 | &adh->claim->id)) | 1335 | rd[i].data_size, |
1320 | continue; | 1336 | &ale->attribute); |
1321 | if (adh->credential != NULL) | 1337 | GNUNET_CONTAINER_DLL_insert (adh->existing_attributes->list_head, |
1322 | if (GNUNET_YES != GNUNET_RECLAIM_id_is_equal (rd[i].data, | 1338 | adh->existing_attributes->list_tail, |
1323 | &adh->credential->id)) | 1339 | ale); |
1324 | continue; | 1340 | break; |
1325 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1341 | case GNUNET_GNSRECORD_TYPE_RECLAIM_CREDENTIAL: |
1326 | "Attribute to delete found (%s)\n", | 1342 | cle = GNUNET_new (struct GNUNET_RECLAIM_CredentialListEntry); |
1327 | adh->label); | 1343 | cle->credential = GNUNET_RECLAIM_credential_deserialize (rd[i].data, |
1328 | has_changed = GNUNET_YES; | 1344 | rd[i].data_size); |
1329 | break; | 1345 | GNUNET_CONTAINER_DLL_insert (adh->existing_credentials->list_head, |
1346 | adh->existing_credentials->list_tail, | ||
1347 | cle); | ||
1348 | break; | ||
1349 | case GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET: | ||
1350 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1351 | "Ticket to delete found (%s)\n", | ||
1352 | label); | ||
1353 | is_ticket = GNUNET_YES; | ||
1354 | break; | ||
1355 | default: | ||
1356 | break; | ||
1357 | } | ||
1358 | if (GNUNET_YES == is_ticket) | ||
1359 | break; | ||
1330 | } | 1360 | } |
1331 | if (GNUNET_YES == has_changed) | 1361 | if (GNUNET_YES == is_ticket) |
1332 | { | 1362 | { |
1333 | le = GNUNET_new (struct TicketRecordsEntry); | 1363 | le = GNUNET_new (struct TicketRecordsEntry); |
1334 | le->data_size = GNUNET_GNSRECORD_records_get_size (rd_count, rd); | 1364 | le->data_size = GNUNET_GNSRECORD_records_get_size (rd_count, rd); |
@@ -1384,15 +1414,12 @@ update_tickets (void *cls) | |||
1384 | 1414 | ||
1385 | if (NULL == adh->tickets_to_update_head) | 1415 | if (NULL == adh->tickets_to_update_head) |
1386 | { | 1416 | { |
1387 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1417 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1388 | "Finished updating tickets, success\n"); | 1418 | "Finished updating tickets, success\n"); |
1389 | send_delete_response (adh, GNUNET_OK); | 1419 | send_delete_response (adh, GNUNET_OK); |
1390 | cleanup_adh (adh); | 1420 | cleanup_adh (adh); |
1391 | return; | 1421 | return; |
1392 | } | 1422 | } |
1393 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
1394 | "Updating %s\n", | ||
1395 | adh->tickets_to_update_head->label); | ||
1396 | le = adh->tickets_to_update_head; | 1423 | le = adh->tickets_to_update_head; |
1397 | GNUNET_CONTAINER_DLL_remove (adh->tickets_to_update_head, | 1424 | GNUNET_CONTAINER_DLL_remove (adh->tickets_to_update_head, |
1398 | adh->tickets_to_update_tail, | 1425 | adh->tickets_to_update_tail, |
@@ -1411,21 +1438,53 @@ update_tickets (void *cls) | |||
1411 | return; | 1438 | return; |
1412 | } | 1439 | } |
1413 | int j = 0; | 1440 | int j = 0; |
1414 | for (int i = 0; i < le->rd_count; i++) | 1441 | int i = 0; |
1442 | struct GNUNET_RECLAIM_AttributeListEntry *ale; | ||
1443 | struct GNUNET_RECLAIM_CredentialListEntry *cle; | ||
1444 | struct GNUNET_RECLAIM_Presentation *presentation; | ||
1445 | for (i = 0; i < le->rd_count; i++) | ||
1415 | { | 1446 | { |
1416 | if (adh->claim != NULL) | 1447 | switch (rd[i].record_type) { |
1417 | if ((GNUNET_GNSRECORD_TYPE_RECLAIM_ATTRIBUTE_REF == rd[i].record_type) | 1448 | case GNUNET_GNSRECORD_TYPE_RECLAIM_ATTRIBUTE_REF: |
1418 | && (GNUNET_YES == GNUNET_RECLAIM_id_is_equal (rd[i].data, | 1449 | for (ale = adh->existing_attributes->list_head; NULL != ale; ale = ale->next) { |
1419 | &adh->claim->id))) | 1450 | if (GNUNET_YES == GNUNET_RECLAIM_id_is_equal (rd[i].data, |
1420 | continue; | 1451 | &ale->attribute->id)) { |
1421 | if (adh->credential != NULL) | 1452 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1422 | if ((GNUNET_GNSRECORD_TYPE_RECLAIM_ATTRIBUTE_REF == rd[i].record_type) | 1453 | "Found attribute %s, readding...\n", |
1423 | && (GNUNET_YES == GNUNET_RECLAIM_id_is_equal (rd[i].data, | 1454 | ale->attribute->name); |
1424 | &adh->credential->id))) | 1455 | rd_new[j] = rd[i]; |
1425 | continue; | 1456 | j++; |
1426 | rd_new[j] = rd[i]; | 1457 | break; //Found and added |
1427 | j++; | 1458 | } |
1459 | } | ||
1460 | break; | ||
1461 | case GNUNET_GNSRECORD_TYPE_RECLAIM_PRESENTATION: | ||
1462 | presentation = GNUNET_RECLAIM_presentation_deserialize (rd[i].data, | ||
1463 | rd[i].data_size); | ||
1464 | for (cle = adh->existing_credentials->list_head; NULL != cle; cle = cle->next) { | ||
1465 | if (GNUNET_YES == GNUNET_RECLAIM_id_is_equal (&presentation->credential_id, | ||
1466 | &cle->credential->id)) { | ||
1467 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1468 | "Found presentation for credential %s, readding...\n", | ||
1469 | cle->credential->name); | ||
1470 | rd_new[j] = rd[i]; | ||
1471 | j++; | ||
1472 | break; //Found and added | ||
1473 | } | ||
1474 | } | ||
1475 | GNUNET_free (presentation); | ||
1476 | break; | ||
1477 | case GNUNET_GNSRECORD_TYPE_RECLAIM_TICKET: | ||
1478 | rd_new[j] = rd[i]; | ||
1479 | j++; | ||
1480 | break; //Found and added | ||
1481 | default: | ||
1482 | GNUNET_break (0); | ||
1483 | } | ||
1428 | } | 1484 | } |
1485 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1486 | "Updating ticket with %d entries (%d before)...\n", | ||
1487 | j, i); | ||
1429 | adh->ns_qe = GNUNET_NAMESTORE_records_store (nsh, | 1488 | adh->ns_qe = GNUNET_NAMESTORE_records_store (nsh, |
1430 | &adh->identity, | 1489 | &adh->identity, |
1431 | le->label, | 1490 | le->label, |
@@ -1438,6 +1497,90 @@ update_tickets (void *cls) | |||
1438 | GNUNET_free (le); | 1497 | GNUNET_free (le); |
1439 | } | 1498 | } |
1440 | 1499 | ||
1500 | /** | ||
1501 | * Delete all attributes which reference credentials | ||
1502 | * that no longer exist | ||
1503 | */ | ||
1504 | static void | ||
1505 | purge_attributes (void *cls);; | ||
1506 | |||
1507 | static void | ||
1508 | offending_attr_delete_cont (void *cls, int32_t success, const char *emsg) | ||
1509 | { | ||
1510 | struct AttributeDeleteHandle *adh = cls; | ||
1511 | |||
1512 | adh->ns_qe = NULL; | ||
1513 | if (GNUNET_SYSERR == success) | ||
1514 | { | ||
1515 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
1516 | "Error deleting attribute %s\n", | ||
1517 | adh->label); | ||
1518 | send_delete_response (adh, GNUNET_SYSERR); | ||
1519 | cleanup_adh (adh); | ||
1520 | return; | ||
1521 | } | ||
1522 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Continuing consistency check...\n"); | ||
1523 | GNUNET_SCHEDULER_add_now (&purge_attributes, adh); | ||
1524 | } | ||
1525 | |||
1526 | |||
1527 | |||
1528 | /** | ||
1529 | * Delete all attributes which reference credentials | ||
1530 | * that no longer exist | ||
1531 | */ | ||
1532 | static void | ||
1533 | purge_attributes (void *cls) | ||
1534 | { | ||
1535 | struct AttributeDeleteHandle *adh = cls; | ||
1536 | struct GNUNET_RECLAIM_AttributeListEntry *ale; | ||
1537 | struct GNUNET_RECLAIM_CredentialListEntry *cle; | ||
1538 | |||
1539 | for (ale = adh->existing_attributes->list_head; NULL != ale; ale = ale->next) | ||
1540 | { | ||
1541 | if (GNUNET_YES == | ||
1542 | GNUNET_RECLAIM_id_is_zero (&ale->attribute->credential)) | ||
1543 | continue; | ||
1544 | |||
1545 | for (cle = adh->existing_credentials->list_head; | ||
1546 | NULL != cle; cle = cle->next) { | ||
1547 | if (GNUNET_YES != | ||
1548 | GNUNET_RECLAIM_id_is_equal (&cle->credential->id, | ||
1549 | &ale->attribute->credential)) | ||
1550 | continue; | ||
1551 | break; | ||
1552 | } | ||
1553 | if (NULL == cle) { | ||
1554 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
1555 | "Found attribute with missing credential\n"); | ||
1556 | break; | ||
1557 | } | ||
1558 | } | ||
1559 | if (NULL == ale) { | ||
1560 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1561 | "Attributes consistent, updating tickets.\n"); | ||
1562 | GNUNET_SCHEDULER_add_now (&update_tickets, adh); | ||
1563 | return; | ||
1564 | } | ||
1565 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1566 | "Attributes inconsistent, deleting offending attribute.\n"); | ||
1567 | char *label | ||
1568 | = GNUNET_STRINGS_data_to_string_alloc (&ale->attribute->id, | ||
1569 | sizeof(ale->attribute->id)); | ||
1570 | |||
1571 | adh->ns_qe = GNUNET_NAMESTORE_records_store (nsh, | ||
1572 | &adh->identity, | ||
1573 | label, | ||
1574 | 0, | ||
1575 | NULL, | ||
1576 | &offending_attr_delete_cont, | ||
1577 | adh); | ||
1578 | GNUNET_CONTAINER_DLL_remove (adh->existing_attributes->list_head, | ||
1579 | adh->existing_attributes->list_tail, | ||
1580 | ale); | ||
1581 | GNUNET_free (ale); | ||
1582 | GNUNET_free (label); | ||
1583 | } | ||
1441 | 1584 | ||
1442 | /** | 1585 | /** |
1443 | * Done collecting affected tickets, start updating. | 1586 | * Done collecting affected tickets, start updating. |
@@ -1445,11 +1588,11 @@ update_tickets (void *cls) | |||
1445 | * @param cls our attribute deletion handle | 1588 | * @param cls our attribute deletion handle |
1446 | */ | 1589 | */ |
1447 | static void | 1590 | static void |
1448 | ticket_iter_fin (void *cls) | 1591 | consistency_iter_fin (void *cls) |
1449 | { | 1592 | { |
1450 | struct AttributeDeleteHandle *adh = cls; | 1593 | struct AttributeDeleteHandle *adh = cls; |
1451 | adh->ns_it = NULL; | 1594 | adh->ns_it = NULL; |
1452 | GNUNET_SCHEDULER_add_now (&update_tickets, adh); | 1595 | GNUNET_SCHEDULER_add_now (&purge_attributes, adh); |
1453 | } | 1596 | } |
1454 | 1597 | ||
1455 | 1598 | ||
@@ -1459,14 +1602,13 @@ ticket_iter_fin (void *cls) | |||
1459 | * @param cls our attribute deletion handle | 1602 | * @param cls our attribute deletion handle |
1460 | */ | 1603 | */ |
1461 | static void | 1604 | static void |
1462 | ticket_iter_err (void *cls) | 1605 | consistency_iter_err (void *cls) |
1463 | { | 1606 | { |
1464 | struct AttributeDeleteHandle *adh = cls; | 1607 | struct AttributeDeleteHandle *adh = cls; |
1465 | 1608 | ||
1466 | adh->ns_it = NULL; | 1609 | adh->ns_it = NULL; |
1467 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1610 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
1468 | "Namestore error on delete %s\n", | 1611 | "Namestore error on consistency check\n"); |
1469 | adh->label); | ||
1470 | send_delete_response (adh, GNUNET_SYSERR); | 1612 | send_delete_response (adh, GNUNET_SYSERR); |
1471 | cleanup_adh (adh); | 1613 | cleanup_adh (adh); |
1472 | } | 1614 | } |
@@ -1479,17 +1621,20 @@ ticket_iter_err (void *cls) | |||
1479 | * @param cls attribute deletion handle | 1621 | * @param cls attribute deletion handle |
1480 | */ | 1622 | */ |
1481 | static void | 1623 | static void |
1482 | start_ticket_update (void *cls) | 1624 | start_consistency_update (void *cls) |
1483 | { | 1625 | { |
1484 | struct AttributeDeleteHandle *adh = cls; | 1626 | struct AttributeDeleteHandle *adh = cls; |
1485 | 1627 | ||
1628 | adh->existing_attributes = GNUNET_new (struct GNUNET_RECLAIM_AttributeList); | ||
1629 | adh->existing_credentials = GNUNET_new (struct GNUNET_RECLAIM_CredentialList); | ||
1630 | |||
1486 | adh->ns_it = GNUNET_NAMESTORE_zone_iteration_start (nsh, | 1631 | adh->ns_it = GNUNET_NAMESTORE_zone_iteration_start (nsh, |
1487 | &adh->identity, | 1632 | &adh->identity, |
1488 | &ticket_iter_err, | 1633 | &consistency_iter_err, |
1489 | adh, | 1634 | adh, |
1490 | &ticket_iter, | 1635 | &consistency_iter, |
1491 | adh, | 1636 | adh, |
1492 | &ticket_iter_fin, | 1637 | &consistency_iter_fin, |
1493 | adh); | 1638 | adh); |
1494 | } | 1639 | } |
1495 | 1640 | ||
@@ -1517,7 +1662,7 @@ attr_delete_cont (void *cls, int32_t success, const char *emsg) | |||
1517 | return; | 1662 | return; |
1518 | } | 1663 | } |
1519 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Updating tickets...\n"); | 1664 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Updating tickets...\n"); |
1520 | GNUNET_SCHEDULER_add_now (&start_ticket_update, adh); | 1665 | GNUNET_SCHEDULER_add_now (&start_consistency_update, adh); |
1521 | } | 1666 | } |
1522 | 1667 | ||
1523 | 1668 | ||
@@ -1586,12 +1731,12 @@ handle_attribute_delete_message (void *cls, | |||
1586 | 1731 | ||
1587 | 1732 | ||
1588 | /** | 1733 | /** |
1589 | * Credential deleted callback | 1734 | * Credential deleted callback |
1590 | * | 1735 | * |
1591 | * @param cls our handle | 1736 | * @param cls our handle |
1592 | * @param success success status | 1737 | * @param success success status |
1593 | * @param emsg error message (NULL if success=GNUNET_OK) | 1738 | * @param emsg error message (NULL if success=GNUNET_OK) |
1594 | */ | 1739 | */ |
1595 | static void | 1740 | static void |
1596 | cred_delete_cont (void *cls, int32_t success, const char *emsg) | 1741 | cred_delete_cont (void *cls, int32_t success, const char *emsg) |
1597 | { | 1742 | { |
@@ -1608,7 +1753,7 @@ cred_delete_cont (void *cls, int32_t success, const char *emsg) | |||
1608 | return; | 1753 | return; |
1609 | } | 1754 | } |
1610 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Updating tickets...\n"); | 1755 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Updating tickets...\n"); |
1611 | GNUNET_SCHEDULER_add_now (&start_ticket_update, adh); | 1756 | GNUNET_SCHEDULER_add_now (&start_consistency_update, adh); |
1612 | } | 1757 | } |
1613 | 1758 | ||
1614 | 1759 | ||
@@ -1642,7 +1787,7 @@ check_credential_delete_message (void *cls, | |||
1642 | */ | 1787 | */ |
1643 | static void | 1788 | static void |
1644 | handle_credential_delete_message (void *cls, | 1789 | handle_credential_delete_message (void *cls, |
1645 | const struct AttributeDeleteMessage *dam) | 1790 | const struct AttributeDeleteMessage *dam) |
1646 | { | 1791 | { |
1647 | struct AttributeDeleteHandle *adh; | 1792 | struct AttributeDeleteHandle *adh; |
1648 | struct IdpClient *idp = cls; | 1793 | struct IdpClient *idp = cls; |
@@ -1676,8 +1821,8 @@ handle_credential_delete_message (void *cls, | |||
1676 | 1821 | ||
1677 | 1822 | ||
1678 | /************************************************* | 1823 | /************************************************* |
1679 | * Attrubute iteration | 1824 | * Attrubute iteration |
1680 | *************************************************/ | 1825 | *************************************************/ |
1681 | 1826 | ||
1682 | 1827 | ||
1683 | /** | 1828 | /** |
@@ -1860,8 +2005,8 @@ handle_iteration_next (void *cls, | |||
1860 | 2005 | ||
1861 | 2006 | ||
1862 | /************************************************* | 2007 | /************************************************* |
1863 | * Credential iteration | 2008 | * Credential iteration |
1864 | *************************************************/ | 2009 | *************************************************/ |
1865 | 2010 | ||
1866 | 2011 | ||
1867 | /** | 2012 | /** |
@@ -2050,8 +2195,8 @@ handle_credential_iteration_next (void *cls, | |||
2050 | 2195 | ||
2051 | 2196 | ||
2052 | /****************************************************** | 2197 | /****************************************************** |
2053 | * Ticket iteration | 2198 | * Ticket iteration |
2054 | ******************************************************/ | 2199 | ******************************************************/ |
2055 | 2200 | ||
2056 | /** | 2201 | /** |
2057 | * Got a ticket. Return to client | 2202 | * Got a ticket. Return to client |
@@ -2094,8 +2239,8 @@ ticket_iter_cb (void *cls, struct GNUNET_RECLAIM_Ticket *ticket) | |||
2094 | */ | 2239 | */ |
2095 | static void | 2240 | static void |
2096 | handle_ticket_iteration_start ( | 2241 | handle_ticket_iteration_start ( |
2097 | void *cls, | 2242 | void *cls, |
2098 | const struct TicketIterationStartMessage *tis_msg) | 2243 | const struct TicketIterationStartMessage *tis_msg) |
2099 | { | 2244 | { |
2100 | struct IdpClient *client = cls; | 2245 | struct IdpClient *client = cls; |
2101 | struct TicketIteration *ti; | 2246 | struct TicketIteration *ti; |
@@ -2267,76 +2412,76 @@ client_connect_cb (void *cls, | |||
2267 | * Define "main" method using service macro. | 2412 | * Define "main" method using service macro. |
2268 | */ | 2413 | */ |
2269 | GNUNET_SERVICE_MAIN ( | 2414 | GNUNET_SERVICE_MAIN ( |
2270 | "reclaim", | 2415 | "reclaim", |
2271 | GNUNET_SERVICE_OPTION_NONE, | 2416 | GNUNET_SERVICE_OPTION_NONE, |
2272 | &run, | 2417 | &run, |
2273 | &client_connect_cb, | 2418 | &client_connect_cb, |
2274 | &client_disconnect_cb, | 2419 | &client_disconnect_cb, |
2275 | NULL, | 2420 | NULL, |
2276 | GNUNET_MQ_hd_var_size (attribute_store_message, | 2421 | GNUNET_MQ_hd_var_size (attribute_store_message, |
2277 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_STORE, | 2422 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_STORE, |
2278 | struct AttributeStoreMessage, | 2423 | struct AttributeStoreMessage, |
2279 | NULL), | 2424 | NULL), |
2280 | GNUNET_MQ_hd_var_size (credential_store_message, | 2425 | GNUNET_MQ_hd_var_size (credential_store_message, |
2281 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_STORE, | 2426 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_STORE, |
2282 | struct AttributeStoreMessage, | 2427 | struct AttributeStoreMessage, |
2283 | NULL), | 2428 | NULL), |
2284 | GNUNET_MQ_hd_var_size (attribute_delete_message, | 2429 | GNUNET_MQ_hd_var_size (attribute_delete_message, |
2285 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_DELETE, | 2430 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_DELETE, |
2286 | struct AttributeDeleteMessage, | 2431 | struct AttributeDeleteMessage, |
2287 | NULL), | 2432 | NULL), |
2288 | GNUNET_MQ_hd_var_size (credential_delete_message, | 2433 | GNUNET_MQ_hd_var_size (credential_delete_message, |
2289 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_DELETE, | 2434 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_DELETE, |
2290 | struct AttributeDeleteMessage, | 2435 | struct AttributeDeleteMessage, |
2291 | NULL), | 2436 | NULL), |
2292 | GNUNET_MQ_hd_fixed_size (iteration_start, | 2437 | GNUNET_MQ_hd_fixed_size (iteration_start, |
2293 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_START, | 2438 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_START, |
2294 | struct AttributeIterationStartMessage, | 2439 | struct AttributeIterationStartMessage, |
2295 | NULL), | 2440 | NULL), |
2296 | GNUNET_MQ_hd_fixed_size (iteration_next, | 2441 | GNUNET_MQ_hd_fixed_size (iteration_next, |
2297 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_NEXT, | 2442 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_NEXT, |
2298 | struct AttributeIterationNextMessage, | 2443 | struct AttributeIterationNextMessage, |
2299 | NULL), | 2444 | NULL), |
2300 | GNUNET_MQ_hd_fixed_size (iteration_stop, | 2445 | GNUNET_MQ_hd_fixed_size (iteration_stop, |
2301 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_STOP, | 2446 | GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_STOP, |
2302 | struct AttributeIterationStopMessage, | 2447 | struct AttributeIterationStopMessage, |
2303 | NULL), | 2448 | NULL), |
2304 | GNUNET_MQ_hd_fixed_size (credential_iteration_start, | 2449 | GNUNET_MQ_hd_fixed_size (credential_iteration_start, |
2305 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_ITERATION_START, | 2450 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_ITERATION_START, |
2306 | struct CredentialIterationStartMessage, | 2451 | struct CredentialIterationStartMessage, |
2307 | NULL), | 2452 | NULL), |
2308 | GNUNET_MQ_hd_fixed_size (credential_iteration_next, | 2453 | GNUNET_MQ_hd_fixed_size (credential_iteration_next, |
2309 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_ITERATION_NEXT, | 2454 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_ITERATION_NEXT, |
2310 | struct CredentialIterationNextMessage, | 2455 | struct CredentialIterationNextMessage, |
2311 | NULL), | 2456 | NULL), |
2312 | GNUNET_MQ_hd_fixed_size (credential_iteration_stop, | 2457 | GNUNET_MQ_hd_fixed_size (credential_iteration_stop, |
2313 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_ITERATION_STOP, | 2458 | GNUNET_MESSAGE_TYPE_RECLAIM_CREDENTIAL_ITERATION_STOP, |
2314 | struct CredentialIterationStopMessage, | 2459 | struct CredentialIterationStopMessage, |
2315 | NULL), | 2460 | NULL), |
2316 | 2461 | ||
2317 | GNUNET_MQ_hd_var_size (issue_ticket_message, | 2462 | GNUNET_MQ_hd_var_size (issue_ticket_message, |
2318 | GNUNET_MESSAGE_TYPE_RECLAIM_ISSUE_TICKET, | 2463 | GNUNET_MESSAGE_TYPE_RECLAIM_ISSUE_TICKET, |
2319 | struct IssueTicketMessage, | 2464 | struct IssueTicketMessage, |
2320 | NULL), | 2465 | NULL), |
2321 | GNUNET_MQ_hd_var_size (consume_ticket_message, | 2466 | GNUNET_MQ_hd_var_size (consume_ticket_message, |
2322 | GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET, | 2467 | GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET, |
2323 | struct ConsumeTicketMessage, | 2468 | struct ConsumeTicketMessage, |
2324 | NULL), | 2469 | NULL), |
2325 | GNUNET_MQ_hd_fixed_size (ticket_iteration_start, | 2470 | GNUNET_MQ_hd_fixed_size (ticket_iteration_start, |
2326 | GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_START, | 2471 | GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_START, |
2327 | struct TicketIterationStartMessage, | 2472 | struct TicketIterationStartMessage, |
2328 | NULL), | 2473 | NULL), |
2329 | GNUNET_MQ_hd_fixed_size (ticket_iteration_next, | 2474 | GNUNET_MQ_hd_fixed_size (ticket_iteration_next, |
2330 | GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_NEXT, | 2475 | GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_NEXT, |
2331 | struct TicketIterationNextMessage, | 2476 | struct TicketIterationNextMessage, |
2332 | NULL), | 2477 | NULL), |
2333 | GNUNET_MQ_hd_fixed_size (ticket_iteration_stop, | 2478 | GNUNET_MQ_hd_fixed_size (ticket_iteration_stop, |
2334 | GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_STOP, | 2479 | GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_STOP, |
2335 | struct TicketIterationStopMessage, | 2480 | struct TicketIterationStopMessage, |
2336 | NULL), | 2481 | NULL), |
2337 | GNUNET_MQ_hd_var_size (revoke_ticket_message, | 2482 | GNUNET_MQ_hd_var_size (revoke_ticket_message, |
2338 | GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET, | 2483 | GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET, |
2339 | struct RevokeTicketMessage, | 2484 | struct RevokeTicketMessage, |
2340 | NULL), | 2485 | NULL), |
2341 | GNUNET_MQ_handler_end ()); | 2486 | GNUNET_MQ_handler_end ()); |
2342 | /* end of gnunet-service-reclaim.c */ | 2487 | /* end of gnunet-service-reclaim.c */ |