From 3c9b188d98081bbf0b274f1bce5c9f80d4dc1a56 Mon Sep 17 00:00:00 2001 From: "Schanzenbach, Martin" Date: Sun, 14 Apr 2019 09:51:33 +0200 Subject: [PATCH] RECLAIM: remove sqlite plugin; housekeeping --- src/include/gnunet_reclaim_service.h | 272 +++++----- src/reclaim/Makefile.am | 17 - src/reclaim/plugin_reclaim_sqlite.c | 736 --------------------------- src/reclaim/reclaim.conf | 4 - src/reclaim/reclaim_api.c | 501 +++++++----------- 5 files changed, 315 insertions(+), 1215 deletions(-) delete mode 100644 src/reclaim/plugin_reclaim_sqlite.c diff --git a/src/include/gnunet_reclaim_service.h b/src/include/gnunet_reclaim_service.h index 3029e1f4d..d179485bb 100644 --- a/src/include/gnunet_reclaim_service.h +++ b/src/include/gnunet_reclaim_service.h @@ -11,7 +11,7 @@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. - + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . @@ -31,43 +31,47 @@ #define GNUNET_RECLAIM_SERVICE_H #ifdef __cplusplus -extern "C" -{ -#if 0 /* keep Emacsens' auto-indent happy */ +extern "C" { +#if 0 /* keep Emacsens' auto-indent happy */ } #endif #endif -#include "gnunet_util_lib.h" #include "gnunet_reclaim_attribute_lib.h" +#include "gnunet_util_lib.h" /** - * Version number of GNUnet Identity Provider API. + * Version number of the re:claimID API. */ #define GNUNET_RECLAIM_VERSION 0x00000000 /** - * Handle to access the identity service. + * Opaque handle to access the service. */ struct GNUNET_RECLAIM_Handle; + /** - * Handle for a token. + * Opaque handle for an operation at the re:claimID service. */ -struct GNUNET_RECLAIM_Token; +struct GNUNET_RECLAIM_Operation; + /** - * The ticket + * The an authorization ticket. This ticket is meant to be transferred + * out of band the a relying party. + * The contents of a ticket must be protected and should be treated as a + * SHARED SECRET between user and relying party. */ struct GNUNET_RECLAIM_Ticket { /** - * The ticket issuer + * The ticket issuer (= the user) */ struct GNUNET_CRYPTO_EcdsaPublicKey identity; /** - * The ticket audience + * The ticket audience (= relying party) */ struct GNUNET_CRYPTO_EcdsaPublicKey audience; @@ -77,74 +81,77 @@ struct GNUNET_RECLAIM_Ticket uint64_t rnd; }; -/** - * Handle for an operation with the identity provider service. - */ -struct GNUNET_RECLAIM_Operation; - /** - * Connect to the identity provider service. + * Method called when a token has been issued. + * On success returns a ticket that can be given to the relying party to retrive + * the token * - * @param cfg Configuration to contact the identity provider service. - * @return handle to communicate with identity provider service + * @param cls closure + * @param ticket the ticket */ -struct GNUNET_RECLAIM_Handle * -GNUNET_RECLAIM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); +typedef void (*GNUNET_RECLAIM_TicketCallback) ( + void *cls, const struct GNUNET_RECLAIM_Ticket *ticket); + /** * Continuation called to notify client about result of the * operation. * - * @param cls closure - * @param success #GNUNET_SYSERR on failure (including timeout/queue drop/failure to validate) - * #GNUNET_NO if content was already there or not found - * #GNUNET_YES (or other positive value) on success + * @param cls The callback closure + * @param success #GNUNET_SYSERR on failure * @param emsg NULL on success, otherwise an error message */ -typedef void -(*GNUNET_RECLAIM_ContinuationWithStatus) (void *cls, - int32_t success, - const char *emsg); +typedef void (*GNUNET_RECLAIM_ContinuationWithStatus) (void *cls, + int32_t success, + const char *emsg); /** - * Store an attribute. If the attribute is already present, - * it is replaced with the new attribute. + * Callback used to notify the client of attribute results. * - * @param h handle to the identity provider - * @param pkey private key of the identity - * @param attr the attribute - * @param exp_interval the relative expiration interval for the attribute - * @param cont continuation to call when done - * @param cont_cls closure for @a cont - * @return handle to abort the request + * @param cls The callback closure + * @param identity The identity authoritative over the attributes + * @param attr The attribute */ -struct GNUNET_RECLAIM_Operation * -GNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, - const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr, - const struct GNUNET_TIME_Relative *exp_interval, - GNUNET_RECLAIM_ContinuationWithStatus cont, - void *cont_cls); +typedef void (*GNUNET_RECLAIM_AttributeResult) ( + void *cls, const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, + const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr); /** - * Process an attribute that was stored in the idp. + * Connect to the re:claimID service. * - * @param cls closure - * @param identity the identity - * @param attr the attribute + * @param cfg Configuration to contact the re:claimID service. + * @return handle to communicate with the service */ -typedef void -(*GNUNET_RECLAIM_AttributeResult) (void *cls, - const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, - const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr); +struct GNUNET_RECLAIM_Handle * +GNUNET_RECLAIM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); + +/** + * Store an attribute. If the attribute is already present, + * it is replaced with the new attribute. + * + * @param h handle to the re:claimID service + * @param pkey Private key of the identity to add an attribute to + * @param attr The attribute + * @param exp_interval The relative expiration interval for the attribute + * @param cont Continuation to call when done + * @param cont_cls Closure for @a cont + * @return handle Used to to abort the request + */ +struct GNUNET_RECLAIM_Operation * +GNUNET_RECLAIM_attribute_store ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, + const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr, + const struct GNUNET_TIME_Relative *exp_interval, + GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls); /** - * List all attributes for a local identity. + * List all attributes for a local identity. * This MUST lock the `struct GNUNET_RECLAIM_Handle` * for any other calls than #GNUNET_RECLAIM_get_attributes_next() and * #GNUNET_RECLAIM_get_attributes_stop. @a proc will be called once @@ -155,87 +162,76 @@ typedef void * On normal completion, @a finish_cb proc will be * invoked. * - * @param h handle to the idp - * @param identity identity to access - * @param error_cb function to call on error (i.e. disconnect), + * @param h Handle to the re:claimID service + * @param identity Identity to iterate over + * @param error_cb Function to call on error (i.e. disconnect), * the handle is afterwards invalid - * @param error_cb_cls closure for @a error_cb - * @param proc function to call on each attribute; it - * will be called repeatedly with a value (if available) - * @param proc_cls closure for @a proc - * @param finish_cb function to call on completion + * @param error_cb_cls Closure for @a error_cb + * @param proc Function to call on each attribute + * @param proc_cls Closure for @a proc + * @param finish_cb Function to call on completion * the handle is afterwards invalid - * @param finish_cb_cls closure for @a finish_cb - * @return an iterator handle to use for iteration + * @param finish_cb_cls Closure for @a finish_cb + * @return an iterator Handle to use for iteration */ struct GNUNET_RECLAIM_AttributeIterator * -GNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, - GNUNET_SCHEDULER_TaskCallback error_cb, - void *error_cb_cls, - GNUNET_RECLAIM_AttributeResult proc, - void *proc_cls, - GNUNET_SCHEDULER_TaskCallback finish_cb, - void *finish_cb_cls); +GNUNET_RECLAIM_get_attributes_start ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, + GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, + GNUNET_RECLAIM_AttributeResult proc, void *proc_cls, + GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls); /** * Calls the record processor specified in #GNUNET_RECLAIM_get_attributes_start * for the next record. * - * @param it the iterator + * @param it The iterator */ void -GNUNET_RECLAIM_get_attributes_next (struct GNUNET_RECLAIM_AttributeIterator *it); +GNUNET_RECLAIM_get_attributes_next ( + struct GNUNET_RECLAIM_AttributeIterator *it); /** - * Stops iteration and releases the idp handle for further calls. Must + * Stops iteration and releases the handle for further calls. Must * be called on any iteration that has not yet completed prior to calling * #GNUNET_RECLAIM_disconnect. * * @param it the iterator */ void -GNUNET_RECLAIM_get_attributes_stop (struct GNUNET_RECLAIM_AttributeIterator *it); +GNUNET_RECLAIM_get_attributes_stop ( + struct GNUNET_RECLAIM_AttributeIterator *it); /** - * Method called when a token has been issued. - * On success returns a ticket that can be given to the audience to retrive the - * token - * - * @param cls closure - * @param ticket the ticket - */ -typedef void -(*GNUNET_RECLAIM_TicketCallback)(void *cls, - const struct GNUNET_RECLAIM_Ticket *ticket); - -/** - * Issues a ticket to another identity. The identity may use + * Issues a ticket to a relying party. The identity may use * GNUNET_RECLAIM_ticket_consume to consume the ticket - * and retrieve the attributes specified in the AttributeList. + * and retrieve the attributes specified in the attribute list. * * @param h the identity provider to use - * @param iss the issuing identity - * @param rp the subject of the ticket (the relying party) + * @param iss the issuing identity (= the user) + * @param rp the subject of the ticket (= the relying party) * @param attrs the attributes that the relying party is given access to * @param cb the callback * @param cb_cls the callback closure * @return handle to abort the operation */ struct GNUNET_RECLAIM_Operation * -GNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss, - const struct GNUNET_CRYPTO_EcdsaPublicKey *rp, - const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs, - GNUNET_RECLAIM_TicketCallback cb, - void *cb_cls); +GNUNET_RECLAIM_ticket_issue ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss, + const struct GNUNET_CRYPTO_EcdsaPublicKey *rp, + const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs, + GNUNET_RECLAIM_TicketCallback cb, void *cb_cls); /** * Revoked an issued ticket. The relying party will be unable to retrieve - * updated attributes. + * attributes. Other issued tickets remain unaffected. + * This includes tickets issued to other relying parties as well as to + * other tickets issued to the audience specified in this ticket. * * @param h the identity provider to use * @param identity the issuing identity @@ -245,31 +241,31 @@ GNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h, * @return handle to abort the operation */ struct GNUNET_RECLAIM_Operation * -GNUNET_RECLAIM_ticket_revoke (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, - const struct GNUNET_RECLAIM_Ticket *ticket, - GNUNET_RECLAIM_ContinuationWithStatus cb, - void *cb_cls); - +GNUNET_RECLAIM_ticket_revoke ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, + const struct GNUNET_RECLAIM_Ticket *ticket, + GNUNET_RECLAIM_ContinuationWithStatus cb, void *cb_cls); /** - * Consumes an issued ticket. The ticket is persisted - * and used to retrieve identity information from the issuer + * Consumes an issued ticket. The ticket is used to retrieve identity + * information from the issuer * * @param h the identity provider to use - * @param identity the identity that is the subject of the issued ticket (the audience) + * @param identity the identity that is the subject of the issued ticket (the + * relying party) * @param ticket the issued ticket to consume * @param cb the callback to call * @param cb_cls the callback closure * @return handle to abort the operation */ struct GNUNET_RECLAIM_Operation * -GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, - const struct GNUNET_RECLAIM_Ticket *ticket, - GNUNET_RECLAIM_AttributeResult cb, - void *cb_cls); +GNUNET_RECLAIM_ticket_consume ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, + const struct GNUNET_RECLAIM_Ticket *ticket, + GNUNET_RECLAIM_AttributeResult cb, void *cb_cls); /** * Lists all tickets that have been issued to remote @@ -289,45 +285,17 @@ GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h, * @return an iterator handle to use for iteration */ struct GNUNET_RECLAIM_TicketIterator * -GNUNET_RECLAIM_ticket_iteration_start (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, - GNUNET_SCHEDULER_TaskCallback error_cb, - void *error_cb_cls, - GNUNET_RECLAIM_TicketCallback proc, - void *proc_cls, - GNUNET_SCHEDULER_TaskCallback finish_cb, - void *finish_cb_cls); +GNUNET_RECLAIM_ticket_iteration_start ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, + GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, + GNUNET_RECLAIM_TicketCallback proc, void *proc_cls, + GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls); -/** - * Lists all tickets that have been issued to remote - * identites (relying parties) - * - * @param h the identity provider to use - * @param identity the issuing identity - * @param error_cb function to call on error (i.e. disconnect), - * the handle is afterwards invalid - * @param error_cb_cls closure for @a error_cb - * @param proc function to call on each ticket; it - * will be called repeatedly with a value (if available) - * @param proc_cls closure for @a proc - * @param finish_cb function to call on completion - * the handle is afterwards invalid - * @param finish_cb_cls closure for @a finish_cb - * @return an iterator handle to use for iteration - */ -struct GNUNET_RECLAIM_TicketIterator * -GNUNET_RECLAIM_ticket_iteration_start_rp (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, - GNUNET_SCHEDULER_TaskCallback error_cb, - void *error_cb_cls, - GNUNET_RECLAIM_TicketCallback proc, - void *proc_cls, - GNUNET_SCHEDULER_TaskCallback finish_cb, - void *finish_cb_cls); /** - * Calls the record processor specified in #GNUNET_RECLAIM_ticket_iteration_start - * for the next record. + * Calls the ticket processor specified in + * #GNUNET_RECLAIM_ticket_iteration_start for the next record. * * @param it the iterator */ @@ -335,7 +303,7 @@ void GNUNET_RECLAIM_ticket_iteration_next (struct GNUNET_RECLAIM_TicketIterator *it); /** - * Stops iteration and releases the idp handle for further calls. Must + * Stops iteration and releases the handle for further calls. Must * be called on any iteration that has not yet completed prior to calling * #GNUNET_RECLAIM_disconnect. * @@ -364,7 +332,7 @@ GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h); void GNUNET_RECLAIM_cancel (struct GNUNET_RECLAIM_Operation *op); -#if 0 /* keep Emacsens' auto-indent happy */ +#if 0 /* keep Emacsens' auto-indent happy */ { #endif #ifdef __cplusplus diff --git a/src/reclaim/Makefile.am b/src/reclaim/Makefile.am index 7e8686734..67d640357 100644 --- a/src/reclaim/Makefile.am +++ b/src/reclaim/Makefile.am @@ -12,9 +12,6 @@ if USE_COVERAGE XLIB = -lgcov endif -if HAVE_SQLITE -SQLITE_PLUGIN = libgnunet_plugin_reclaim_sqlite.la -endif if HAVE_MHD if HAVE_JSON @@ -41,7 +38,6 @@ lib_LTLIBRARIES = \ libgnunetreclaim.la plugin_LTLIBRARIES = \ libgnunet_plugin_gnsrecord_reclaim.la \ - $(SQLITE_PLUGIN) \ $(REST_PLUGIN) bin_PROGRAMS = \ @@ -93,19 +89,6 @@ libgnunet_plugin_gnsrecord_reclaim_la_LIBADD = \ libgnunet_plugin_gnsrecord_reclaim_la_LDFLAGS = \ $(GN_PLUGIN_LDFLAGS) -libgnunet_plugin_reclaim_sqlite_la_SOURCES = \ - plugin_reclaim_sqlite.c -libgnunet_plugin_reclaim_sqlite_la_LIBADD = \ - libgnunetreclaim.la \ - $(top_builddir)/src/sq/libgnunetsq.la \ - $(top_builddir)/src/statistics/libgnunetstatistics.la \ - $(top_builddir)/src/reclaim-attribute/libgnunetreclaimattribute.la \ - $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) -lsqlite3 \ - $(LTLIBINTL) -libgnunet_plugin_reclaim_sqlite_la_LDFLAGS = \ - $(GN_PLUGIN_LDFLAGS) - - gnunet_service_reclaim_SOURCES = \ gnunet-service-reclaim.c \ diff --git a/src/reclaim/plugin_reclaim_sqlite.c b/src/reclaim/plugin_reclaim_sqlite.c deleted file mode 100644 index f6e1436cc..000000000 --- a/src/reclaim/plugin_reclaim_sqlite.c +++ /dev/null @@ -1,736 +0,0 @@ - /* - * This file is part of GNUnet - * Copyright (C) 2009-2017 GNUnet e.V. - * - * GNUnet is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published - * by the Free Software Foundation, either version 3 of the License, - * or (at your option) any later version. - * - * GNUnet is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - - SPDX-License-Identifier: AGPL3.0-or-later - */ - -/** - * @file reclaim/plugin_reclaim_sqlite.c - * @brief sqlite-based idp backend - * @author Martin Schanzenbach - */ - -#include "platform.h" -#include "gnunet_reclaim_service.h" -#include "gnunet_reclaim_plugin.h" -#include "gnunet_reclaim_attribute_lib.h" -#include "gnunet_sq_lib.h" -#include - -/** - * After how many ms "busy" should a DB operation fail for good? A - * low value makes sure that we are more responsive to requests - * (especially PUTs). A high value guarantees a higher success rate - * (SELECTs in iterate can take several seconds despite LIMIT=1). - * - * The default value of 1s should ensure that users do not experience - * huge latencies while at the same time allowing operations to - * succeed with reasonable probability. - */ -#define BUSY_TIMEOUT_MS 1000 - - -/** - * Log an error message at log-level 'level' that indicates - * a failure of the command 'cmd' on file 'filename' - * with the message given by strerror(errno). - */ -#define LOG_SQLITE(db, level, cmd) do { GNUNET_log_from (level, "reclaim", _("`%s' failed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__, sqlite3_errmsg(db->dbh)); } while(0) - -#define LOG(kind,...) GNUNET_log_from (kind, "reclaim-sqlite", __VA_ARGS__) - - -/** - * Context for all functions in this plugin. - */ -struct Plugin -{ - - const struct GNUNET_CONFIGURATION_Handle *cfg; - - /** - * Database filename. - */ - char *fn; - - /** - * Native SQLite database handle. - */ - sqlite3 *dbh; - - /** - * Precompiled SQL to store ticket. - */ - sqlite3_stmt *store_ticket; - - /** - * Precompiled SQL to delete existing ticket. - */ - sqlite3_stmt *delete_ticket; - - /** - * Precompiled SQL to iterate tickets. - */ - sqlite3_stmt *iterate_tickets; - - /** - * Precompiled SQL to get ticket attributes. - */ - sqlite3_stmt *get_ticket_attrs; - - /** - * Precompiled SQL to iterate tickets by audience. - */ - sqlite3_stmt *iterate_tickets_by_audience; -}; - - -/** - * @brief Prepare a SQL statement - * - * @param dbh handle to the database - * @param zSql SQL statement, UTF-8 encoded - * @param ppStmt set to the prepared statement - * @return 0 on success - */ -static int -sq_prepare (sqlite3 *dbh, - const char *zSql, - sqlite3_stmt **ppStmt) -{ - char *dummy; - int result; - - result = - sqlite3_prepare_v2 (dbh, - zSql, - strlen (zSql), - ppStmt, - (const char **) &dummy); - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Prepared `%s' / %p: %d\n", - zSql, - *ppStmt, - result); - return result; -} - -/** - * Create our database indices. - * - * @param dbh handle to the database - */ -static void -create_indices (sqlite3 * dbh) -{ - /* create indices */ - if ( (SQLITE_OK != - sqlite3_exec (dbh, - "CREATE INDEX IF NOT EXISTS identity_reverse ON identity001tickets (identity,audience)", - NULL, NULL, NULL)) || - (SQLITE_OK != - sqlite3_exec (dbh, - "CREATE INDEX IF NOT EXISTS it_iter ON identity001tickets (rnd)", - NULL, NULL, NULL)) ) - LOG (GNUNET_ERROR_TYPE_ERROR, - "Failed to create indices: %s\n", - sqlite3_errmsg (dbh)); -} - - - -#if 0 -#define CHECK(a) GNUNET_break(a) -#define ENULL NULL -#else -#define ENULL &e -#define ENULL_DEFINED 1 -#define CHECK(a) if (! (a)) { GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "%s\n", e); sqlite3_free(e); } -#endif - - -/** - * Initialize the database connections and associated - * data structures (create tables and indices - * as needed as well). - * - * @param plugin the plugin context (state for this module) - * @return #GNUNET_OK on success - */ -static int -database_setup (struct Plugin *plugin) -{ - sqlite3_stmt *stmt; - char *afsdir; -#if ENULL_DEFINED - char *e; -#endif - - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_filename (plugin->cfg, - "reclaim-sqlite", - "FILENAME", - &afsdir)) - { - GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, - "reclaim-sqlite", - "FILENAME"); - return GNUNET_SYSERR; - } - if (GNUNET_OK != - GNUNET_DISK_file_test (afsdir)) - { - if (GNUNET_OK != - GNUNET_DISK_directory_create_for_file (afsdir)) - { - GNUNET_break (0); - GNUNET_free (afsdir); - return GNUNET_SYSERR; - } - } - /* afsdir should be UTF-8-encoded. If it isn't, it's a bug */ - plugin->fn = afsdir; - - /* Open database and precompile statements */ - if (sqlite3_open (plugin->fn, &plugin->dbh) != SQLITE_OK) - { - LOG (GNUNET_ERROR_TYPE_ERROR, - _("Unable to initialize SQLite: %s.\n"), - sqlite3_errmsg (plugin->dbh)); - return GNUNET_SYSERR; - } - CHECK (SQLITE_OK == - sqlite3_exec (plugin->dbh, - "PRAGMA temp_store=MEMORY", NULL, NULL, - ENULL)); - CHECK (SQLITE_OK == - sqlite3_exec (plugin->dbh, - "PRAGMA synchronous=NORMAL", NULL, NULL, - ENULL)); - CHECK (SQLITE_OK == - sqlite3_exec (plugin->dbh, - "PRAGMA legacy_file_format=OFF", NULL, NULL, - ENULL)); - CHECK (SQLITE_OK == - sqlite3_exec (plugin->dbh, - "PRAGMA auto_vacuum=INCREMENTAL", NULL, - NULL, ENULL)); - CHECK (SQLITE_OK == - sqlite3_exec (plugin->dbh, - "PRAGMA encoding=\"UTF-8\"", NULL, - NULL, ENULL)); - CHECK (SQLITE_OK == - sqlite3_exec (plugin->dbh, - "PRAGMA locking_mode=EXCLUSIVE", NULL, NULL, - ENULL)); - CHECK (SQLITE_OK == - sqlite3_exec (plugin->dbh, - "PRAGMA page_size=4092", NULL, NULL, - ENULL)); - - CHECK (SQLITE_OK == - sqlite3_busy_timeout (plugin->dbh, - BUSY_TIMEOUT_MS)); - - - /* Create table */ - CHECK (SQLITE_OK == - sq_prepare (plugin->dbh, - "SELECT 1 FROM sqlite_master WHERE tbl_name = 'identity001tickets'", - &stmt)); - if ((sqlite3_step (stmt) == SQLITE_DONE) && - (sqlite3_exec - (plugin->dbh, - "CREATE TABLE identity001tickets (" - " identity BLOB NOT NULL DEFAULT ''," - " audience BLOB NOT NULL DEFAULT ''," - " rnd INT8 NOT NULL DEFAULT ''," - " attributes BLOB NOT NULL DEFAULT ''" - ")", - NULL, NULL, NULL) != SQLITE_OK)) - { - LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR, - "sqlite3_exec"); - sqlite3_finalize (stmt); - return GNUNET_SYSERR; - } - sqlite3_finalize (stmt); - - create_indices (plugin->dbh); - - if ( (SQLITE_OK != - sq_prepare (plugin->dbh, - "INSERT INTO identity001tickets (identity, audience, rnd, attributes)" - " VALUES (?, ?, ?, ?)", - &plugin->store_ticket)) || - (SQLITE_OK != - sq_prepare (plugin->dbh, - "DELETE FROM identity001tickets WHERE identity=? AND rnd=?", - &plugin->delete_ticket)) || - (SQLITE_OK != - sq_prepare (plugin->dbh, - "SELECT identity,audience,rnd,attributes" - " FROM identity001tickets WHERE identity=? AND rnd=?", - &plugin->get_ticket_attrs)) || - (SQLITE_OK != - sq_prepare (plugin->dbh, - "SELECT identity,audience,rnd,attributes" - " FROM identity001tickets WHERE identity=?" - " ORDER BY rnd LIMIT 1 OFFSET ?", - &plugin->iterate_tickets)) || - (SQLITE_OK != - sq_prepare (plugin->dbh, - "SELECT identity,audience,rnd,attributes" - " FROM identity001tickets WHERE audience=?" - " ORDER BY rnd LIMIT 1 OFFSET ?", - &plugin->iterate_tickets_by_audience)) ) - { - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR, - "precompiling"); - return GNUNET_SYSERR; - } - return GNUNET_OK; -} - - -/** - * Shutdown database connection and associate data - * structures. - * @param plugin the plugin context (state for this module) - */ -static void -database_shutdown (struct Plugin *plugin) -{ - int result; - sqlite3_stmt *stmt; - - if (NULL != plugin->store_ticket) - sqlite3_finalize (plugin->store_ticket); - if (NULL != plugin->delete_ticket) - sqlite3_finalize (plugin->delete_ticket); - if (NULL != plugin->iterate_tickets) - sqlite3_finalize (plugin->iterate_tickets); - if (NULL != plugin->iterate_tickets_by_audience) - sqlite3_finalize (plugin->iterate_tickets_by_audience); - if (NULL != plugin->get_ticket_attrs) - sqlite3_finalize (plugin->get_ticket_attrs); - result = sqlite3_close (plugin->dbh); - if (result == SQLITE_BUSY) - { - LOG (GNUNET_ERROR_TYPE_WARNING, - _("Tried to close sqlite without finalizing all prepared statements.\n")); - stmt = sqlite3_next_stmt (plugin->dbh, - NULL); - while (NULL != stmt) - { - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, - "sqlite", - "Closing statement %p\n", - stmt); - result = sqlite3_finalize (stmt); - if (result != SQLITE_OK) - GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING, - "sqlite", - "Failed to close statement %p: %d\n", - stmt, - result); - stmt = sqlite3_next_stmt (plugin->dbh, - NULL); - } - result = sqlite3_close (plugin->dbh); - } - if (SQLITE_OK != result) - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR, - "sqlite3_close"); - - GNUNET_free_non_null (plugin->fn); -} - - -/** - * Store a ticket in the database. - * - * @param cls closure (internal context for the plugin) - * @param ticket the ticket to persist - * @param attrs the attributes associated with the ticket - * @return #GNUNET_OK on success, else #GNUNET_SYSERR - */ -static int -reclaim_sqlite_store_ticket (void *cls, - const struct GNUNET_RECLAIM_Ticket *ticket, - const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs) -{ - struct Plugin *plugin = cls; - size_t attrs_len; - char *attrs_ser; - int n; - - { - /* First delete duplicates */ - struct GNUNET_SQ_QueryParam dparams[] = { - GNUNET_SQ_query_param_auto_from_type (&ticket->identity), - GNUNET_SQ_query_param_uint64 (&ticket->rnd), - GNUNET_SQ_query_param_end - }; - if (GNUNET_OK != - GNUNET_SQ_bind (plugin->delete_ticket, - dparams)) - { - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "sqlite3_bind_XXXX"); - GNUNET_SQ_reset (plugin->dbh, - plugin->delete_ticket); - return GNUNET_SYSERR; - } - n = sqlite3_step (plugin->delete_ticket); - GNUNET_SQ_reset (plugin->dbh, - plugin->delete_ticket); - - attrs_len = GNUNET_RECLAIM_ATTRIBUTE_list_serialize_get_size (attrs); - attrs_ser = GNUNET_malloc (attrs_len); - GNUNET_RECLAIM_ATTRIBUTE_list_serialize (attrs, - attrs_ser); - struct GNUNET_SQ_QueryParam sparams[] = { - GNUNET_SQ_query_param_auto_from_type (&ticket->identity), - GNUNET_SQ_query_param_auto_from_type (&ticket->audience), - GNUNET_SQ_query_param_uint64 (&ticket->rnd), - GNUNET_SQ_query_param_fixed_size (attrs_ser, attrs_len), - GNUNET_SQ_query_param_end - }; - - if (GNUNET_OK != - GNUNET_SQ_bind (plugin->store_ticket, - sparams)) - { - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "sqlite3_bind_XXXX"); - GNUNET_SQ_reset (plugin->dbh, - plugin->store_ticket); - return GNUNET_SYSERR; - } - n = sqlite3_step (plugin->store_ticket); - GNUNET_SQ_reset (plugin->dbh, - plugin->store_ticket); - GNUNET_free (attrs_ser); - } - switch (n) - { - case SQLITE_DONE: - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, - "sqlite", - "Ticket stored\n"); - return GNUNET_OK; - case SQLITE_BUSY: - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, - "sqlite3_step"); - return GNUNET_NO; - default: - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "sqlite3_step"); - return GNUNET_SYSERR; - } -} - - -/** - * Store a ticket in the database. - * - * @param cls closure (internal context for the plugin) - * @param ticket the ticket to delete - * @return #GNUNET_OK on success, else #GNUNET_SYSERR - */ -static int -reclaim_sqlite_delete_ticket (void *cls, - const struct GNUNET_RECLAIM_Ticket *ticket) -{ - struct Plugin *plugin = cls; - int n; - - { - struct GNUNET_SQ_QueryParam sparams[] = { - GNUNET_SQ_query_param_auto_from_type (&ticket->identity), - GNUNET_SQ_query_param_uint64 (&ticket->rnd), - GNUNET_SQ_query_param_end - }; - - if (GNUNET_OK != - GNUNET_SQ_bind (plugin->delete_ticket, - sparams)) - { - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "sqlite3_bind_XXXX"); - GNUNET_SQ_reset (plugin->dbh, - plugin->store_ticket); - return GNUNET_SYSERR; - } - n = sqlite3_step (plugin->delete_ticket); - GNUNET_SQ_reset (plugin->dbh, - plugin->delete_ticket); - } - switch (n) - { - case SQLITE_DONE: - GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, - "sqlite", - "Ticket deleted\n"); - return GNUNET_OK; - case SQLITE_BUSY: - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, - "sqlite3_step"); - return GNUNET_NO; - default: - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "sqlite3_step"); - return GNUNET_SYSERR; - } -} - - -/** - * The given 'sqlite' statement has been prepared to be run. - * It will return a record which should be given to the iterator. - * Runs the statement and parses the returned record. - * - * @param plugin plugin context - * @param stmt to run (and then clean up) - * @param iter iterator to call with the result - * @param iter_cls closure for @a iter - * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error - */ -static int -get_ticket_and_call_iterator (struct Plugin *plugin, - sqlite3_stmt *stmt, - GNUNET_RECLAIM_TicketIterator iter, - void *iter_cls) -{ - struct GNUNET_RECLAIM_Ticket ticket; - struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs; - int ret; - int sret; - size_t attrs_len; - char *attrs_ser; - - ret = GNUNET_NO; - if (SQLITE_ROW == (sret = sqlite3_step (stmt))) - { - struct GNUNET_SQ_ResultSpec rs[] = { - GNUNET_SQ_result_spec_auto_from_type (&ticket.identity), - GNUNET_SQ_result_spec_auto_from_type (&ticket.audience), - GNUNET_SQ_result_spec_uint64 (&ticket.rnd), - GNUNET_SQ_result_spec_variable_size ((void**)&attrs_ser, - &attrs_len), - GNUNET_SQ_result_spec_end - - }; - ret = GNUNET_SQ_extract_result (stmt, - rs); - if (GNUNET_OK != ret) - { - GNUNET_break (0); - ret = GNUNET_SYSERR; - } - else - { - attrs = GNUNET_RECLAIM_ATTRIBUTE_list_deserialize (attrs_ser, - attrs_len); - if (NULL != iter) - iter (iter_cls, - &ticket, - attrs); - GNUNET_RECLAIM_ATTRIBUTE_list_destroy (attrs); - ret = GNUNET_YES; - } - GNUNET_SQ_cleanup_result (rs); - } - else - { - if (SQLITE_DONE != sret) - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR, - "sqlite_step"); - } - GNUNET_SQ_reset (plugin->dbh, - stmt); - return ret; -} - - -/** - * Lookup tickets in the datastore. - * - * @param cls closure (internal context for the plugin) - * @param ticket the ticket to retrieve attributes for - * @param iter function to call with the result - * @param iter_cls closure for @a iter - * @return #GNUNET_OK on success, else #GNUNET_SYSERR - */ -static int -reclaim_sqlite_ticket_get_attrs (void *cls, - const struct GNUNET_RECLAIM_Ticket *ticket, - GNUNET_RECLAIM_TicketIterator iter, - void *iter_cls) -{ - struct Plugin *plugin = cls; - struct GNUNET_SQ_QueryParam params[] = { - GNUNET_SQ_query_param_auto_from_type (&ticket->identity), - GNUNET_SQ_query_param_uint64 (&ticket->rnd), - GNUNET_SQ_query_param_end - }; - - if (GNUNET_OK != - GNUNET_SQ_bind (plugin->get_ticket_attrs, - params)) - { - LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "sqlite3_bind_XXXX"); - GNUNET_SQ_reset (plugin->dbh, - plugin->get_ticket_attrs); - return GNUNET_SYSERR; - } - return get_ticket_and_call_iterator (plugin, - plugin->get_ticket_attrs, - iter, - iter_cls); -} - - -/** - * Iterate over the results for a particular key and zone in the - * datastore. Will return at most one result to the iterator. - * - * @param cls closure (internal context for the plugin) - * @param identity the issuing identity or audience (depending on audience switch) - * @param audience GNUNET_YES if identity is audience - * @param offset offset in the list of all matching records - * @param iter function to call with the result - * @param iter_cls closure for @a iter - * @return #GNUNET_OK on success, #GNUNET_NO if there were no results, #GNUNET_SYSERR on error - */ -static int -reclaim_sqlite_iterate_tickets (void *cls, - const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, - int audience, - uint64_t offset, - GNUNET_RECLAIM_TicketIterator iter, - void *iter_cls) -{ - struct Plugin *plugin = cls; - sqlite3_stmt *stmt; - int err; - - if (NULL == identity) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } - struct GNUNET_SQ_QueryParam params[] = { - GNUNET_SQ_query_param_auto_from_type (identity), - GNUNET_SQ_query_param_uint64 (&offset), - GNUNET_SQ_query_param_end - }; - if (GNUNET_YES == audience) - { - stmt = plugin->iterate_tickets_by_audience; - err = GNUNET_SQ_bind (stmt, - params); - } - else - { - stmt = plugin->iterate_tickets; - err = GNUNET_SQ_bind (stmt, - params); - } - if (GNUNET_OK != err) - { - LOG_SQLITE (plugin, - GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, - "sqlite3_bind_XXXX"); - GNUNET_SQ_reset (plugin->dbh, - stmt); - return GNUNET_SYSERR; - } - return get_ticket_and_call_iterator (plugin, - stmt, - iter, - iter_cls); -} - - -/** - * Entry point for the plugin. - * - * @param cls the "struct GNUNET_RECLAIM_PluginEnvironment*" - * @return NULL on error, otherwise the plugin context - */ -void * -libgnunet_plugin_reclaim_sqlite_init (void *cls) -{ - static struct Plugin plugin; - const struct GNUNET_CONFIGURATION_Handle *cfg = cls; - struct GNUNET_RECLAIM_PluginFunctions *api; - - if (NULL != plugin.cfg) - return NULL; /* can only initialize once! */ - memset (&plugin, 0, sizeof (struct Plugin)); - plugin.cfg = cfg; - if (GNUNET_OK != database_setup (&plugin)) - { - database_shutdown (&plugin); - return NULL; - } - api = GNUNET_new (struct GNUNET_RECLAIM_PluginFunctions); - api->cls = &plugin; - api->store_ticket = &reclaim_sqlite_store_ticket; - api->delete_ticket = &reclaim_sqlite_delete_ticket; - api->iterate_tickets = &reclaim_sqlite_iterate_tickets; - api->get_ticket_attributes = &reclaim_sqlite_ticket_get_attrs; - LOG (GNUNET_ERROR_TYPE_INFO, - _("Sqlite database running\n")); - return api; -} - - -/** - * Exit point from the plugin. - * - * @param cls the plugin context (as returned by "init") - * @return always NULL - */ -void * -libgnunet_plugin_reclaim_sqlite_done (void *cls) -{ - struct GNUNET_RECLAIM_PluginFunctions *api = cls; - struct Plugin *plugin = api->cls; - - database_shutdown (plugin); - plugin->cfg = NULL; - GNUNET_free (api); - LOG (GNUNET_ERROR_TYPE_DEBUG, - "sqlite plugin is finished\n"); - return NULL; -} - -/* end of plugin_reclaim_sqlite.c */ diff --git a/src/reclaim/reclaim.conf b/src/reclaim/reclaim.conf index 5073199ca..605a63d5e 100644 --- a/src/reclaim/reclaim.conf +++ b/src/reclaim/reclaim.conf @@ -10,7 +10,6 @@ UNIXPATH = $GNUNET_USER_RUNTIME_DIR/gnunet-service-reclaim.sock UNIX_MATCH_UID = NO UNIX_MATCH_GID = YES TOKEN_EXPIRATION_INTERVAL = 30 m -DATABASE = sqlite [reclaim-rest-plugin] #ADDRESS = https://identity.gnu:8000#/login @@ -18,6 +17,3 @@ ADDRESS = https://ui.reclaim/#/login PSW = secret JWT_SECRET = secret EXPIRATION_TIME = 1d - -[reclaim-sqlite] -FILENAME = $GNUNET_DATA_HOME/reclaim/sqlite.db diff --git a/src/reclaim/reclaim_api.c b/src/reclaim/reclaim_api.c index dd6a249b5..0edae76c2 100644 --- a/src/reclaim/reclaim_api.c +++ b/src/reclaim/reclaim_api.c @@ -24,15 +24,17 @@ * @author Martin Schanzenbach */ #include "platform.h" + #include "gnunet_util_lib.h" + #include "gnunet_constants.h" -#include "gnunet_protocols.h" #include "gnunet_mq_lib.h" -#include "gnunet_reclaim_service.h" +#include "gnunet_protocols.h" #include "gnunet_reclaim_attribute_lib.h" +#include "gnunet_reclaim_service.h" #include "reclaim.h" -#define LOG(kind,...) GNUNET_log_from (kind, "reclaim-api",__VA_ARGS__) +#define LOG(kind, ...) GNUNET_log_from (kind, "reclaim-api", __VA_ARGS__) /** @@ -96,9 +98,9 @@ struct GNUNET_RECLAIM_Operation * Closure for @e cont or @e cb. */ void *cls; - }; + /** * Handle for a ticket iterator operation */ @@ -126,7 +128,7 @@ struct GNUNET_RECLAIM_TicketIterator GNUNET_SCHEDULER_TaskCallback finish_cb; /** - * Closure for @e error_cb. + * Closure for @e finish_cb. */ void *finish_cb_cls; @@ -160,7 +162,6 @@ struct GNUNET_RECLAIM_TicketIterator * The operation id this zone iteration operation has */ uint32_t r_id; - }; @@ -181,7 +182,7 @@ struct GNUNET_RECLAIM_AttributeIterator struct GNUNET_RECLAIM_AttributeIterator *prev; /** - * Main handle to access the idp. + * Main handle to access the service. */ struct GNUNET_RECLAIM_Handle *h; @@ -191,7 +192,7 @@ struct GNUNET_RECLAIM_AttributeIterator GNUNET_SCHEDULER_TaskCallback finish_cb; /** - * Closure for @e error_cb. + * Closure for @e finish_cb. */ void *finish_cb_cls; @@ -230,12 +231,11 @@ struct GNUNET_RECLAIM_AttributeIterator * The operation id this zone iteration operation has */ uint32_t r_id; - }; /** - * Handle for the service. + * Handle to the service. */ struct GNUNET_RECLAIM_Handle { @@ -284,7 +284,6 @@ struct GNUNET_RECLAIM_Handle */ struct GNUNET_RECLAIM_TicketIterator *ticket_it_tail; - /** * Currently pending transmission request, or NULL for none. */ @@ -293,7 +292,7 @@ struct GNUNET_RECLAIM_Handle /** * Task doing exponential back-off trying to reconnect. */ - struct GNUNET_SCHEDULER_Task * reconnect_task; + struct GNUNET_SCHEDULER_Task *reconnect_task; /** * Time for next connect retry. @@ -314,9 +313,9 @@ struct GNUNET_RECLAIM_Handle * Are we polling for incoming messages right now? */ int in_receive; - }; + /** * Try again to connect to the service. * @@ -325,6 +324,7 @@ struct GNUNET_RECLAIM_Handle static void reconnect (struct GNUNET_RECLAIM_Handle *h); + /** * Reconnect * @@ -350,14 +350,13 @@ force_reconnect (struct GNUNET_RECLAIM_Handle *handle) { GNUNET_MQ_destroy (handle->mq); handle->mq = NULL; - handle->reconnect_backoff - = GNUNET_TIME_STD_BACKOFF (handle->reconnect_backoff); - handle->reconnect_task - = GNUNET_SCHEDULER_add_delayed (handle->reconnect_backoff, - &reconnect_task, - handle); + handle->reconnect_backoff = + GNUNET_TIME_STD_BACKOFF (handle->reconnect_backoff); + handle->reconnect_task = GNUNET_SCHEDULER_add_delayed ( + handle->reconnect_backoff, &reconnect_task, handle); } + /** * Free @a it. * @@ -368,22 +367,25 @@ free_it (struct GNUNET_RECLAIM_AttributeIterator *it) { struct GNUNET_RECLAIM_Handle *h = it->h; - GNUNET_CONTAINER_DLL_remove (h->it_head, - h->it_tail, - it); + GNUNET_CONTAINER_DLL_remove (h->it_head, h->it_tail, it); if (NULL != it->env) GNUNET_MQ_discard (it->env); GNUNET_free (it); } +/** + * Free @a op + * + * @param op the operation to free + */ static void -free_op (struct GNUNET_RECLAIM_Operation* op) +free_op (struct GNUNET_RECLAIM_Operation *op) { if (NULL == op) return; if (NULL != op->env) GNUNET_MQ_discard (op->env); - GNUNET_free(op); + GNUNET_free (op); } @@ -396,13 +398,13 @@ free_op (struct GNUNET_RECLAIM_Operation* op) * @param error error code */ static void -mq_error_handler (void *cls, - enum GNUNET_MQ_Error error) +mq_error_handler (void *cls, enum GNUNET_MQ_Error error) { struct GNUNET_RECLAIM_Handle *handle = cls; force_reconnect (handle); } + /** * Handle an incoming message of type * #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE @@ -412,7 +414,7 @@ mq_error_handler (void *cls, */ static void handle_attribute_store_response (void *cls, - const struct AttributeStoreResultMessage *msg) + const struct AttributeStoreResultMessage *msg) { struct GNUNET_RECLAIM_Handle *h = cls; struct GNUNET_RECLAIM_Operation *op; @@ -428,23 +430,17 @@ handle_attribute_store_response (void *cls, res = ntohl (msg->op_result); LOG (GNUNET_ERROR_TYPE_DEBUG, - "Received ATTRIBUTE_STORE_RESPONSE with result %d\n", - res); + "Received ATTRIBUTE_STORE_RESPONSE with result %d\n", res); /* TODO: add actual error message to response... */ if (GNUNET_SYSERR == res) - emsg = _("failed to store record\n"); + emsg = _ ("failed to store record\n"); else emsg = NULL; if (NULL != op->as_cb) - op->as_cb (op->cls, - res, - emsg); - GNUNET_CONTAINER_DLL_remove (h->op_head, - h->op_tail, - op); + op->as_cb (op->cls, res, emsg); + GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op); free_op (op); - } @@ -465,8 +461,7 @@ check_consume_ticket_result (void *cls, msg_len = ntohs (msg->header.size); attrs_len = ntohs (msg->attrs_len); - if (msg_len != sizeof (struct ConsumeTicketResultMessage) + attrs_len) - { + if (msg_len != sizeof (struct ConsumeTicketResultMessage) + attrs_len) { GNUNET_break (0); return GNUNET_SYSERR; } @@ -491,8 +486,7 @@ handle_consume_ticket_result (void *cls, uint32_t r_id = ntohl (msg->id); attrs_len = ntohs (msg->attrs_len); - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Processing attribute result.\n"); + LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attribute result.\n"); for (op = h->op_head; NULL != op; op = op->next) @@ -504,33 +498,20 @@ handle_consume_ticket_result (void *cls, { struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs; struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry *le; - attrs = GNUNET_RECLAIM_ATTRIBUTE_list_deserialize ((char*)&msg[1], - attrs_len); - if (NULL != op->ar_cb) - { - if (NULL == attrs) - { - op->ar_cb (op->cls, - &msg->identity, - NULL); - } - else - { + attrs = + GNUNET_RECLAIM_ATTRIBUTE_list_deserialize ((char *)&msg[1], attrs_len); + if (NULL != op->ar_cb) { + if (NULL == attrs) { + op->ar_cb (op->cls, &msg->identity, NULL); + } else { for (le = attrs->list_head; NULL != le; le = le->next) - op->ar_cb (op->cls, - &msg->identity, - le->claim); + op->ar_cb (op->cls, &msg->identity, le->claim); GNUNET_RECLAIM_ATTRIBUTE_list_destroy (attrs); } } - if (NULL != op) - { - op->ar_cb (op->cls, - NULL, - NULL); - GNUNET_CONTAINER_DLL_remove (h->op_head, - h->op_tail, - op); + if (NULL != op) { + op->ar_cb (op->cls, NULL, NULL); + GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op); free_op (op); } return; @@ -548,16 +529,14 @@ handle_consume_ticket_result (void *cls, * @return #GNUNET_OK on success, #GNUNET_SYSERR on error */ static int -check_attribute_result (void *cls, - const struct AttributeResultMessage *msg) +check_attribute_result (void *cls, const struct AttributeResultMessage *msg) { size_t msg_len; size_t attr_len; msg_len = ntohs (msg->header.size); attr_len = ntohs (msg->attr_len); - if (msg_len != sizeof (struct AttributeResultMessage) + attr_len) - { + if (msg_len != sizeof (struct AttributeResultMessage) + attr_len) { GNUNET_break (0); return GNUNET_SYSERR; } @@ -573,8 +552,7 @@ check_attribute_result (void *cls, * @param msg the message we received */ static void -handle_attribute_result (void *cls, - const struct AttributeResultMessage *msg) +handle_attribute_result (void *cls, const struct AttributeResultMessage *msg) { static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy; struct GNUNET_RECLAIM_Handle *h = cls; @@ -584,8 +562,7 @@ handle_attribute_result (void *cls, uint32_t r_id = ntohl (msg->id); attr_len = ntohs (msg->attr_len); - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Processing attribute result.\n"); + LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attribute result.\n"); for (it = h->it_head; NULL != it; it = it->next) @@ -597,54 +574,36 @@ handle_attribute_result (void *cls, if ((NULL == it) && (NULL == op)) return; - if ( (0 == (memcmp (&msg->identity, - &identity_dummy, - sizeof (identity_dummy)))) ) - { - if ((NULL == it) && (NULL == op)) - { + if ((0 == + (memcmp (&msg->identity, &identity_dummy, sizeof (identity_dummy))))) { + if ((NULL == it) && (NULL == op)) { GNUNET_break (0); force_reconnect (h); return; } - if (NULL != it) - { + if (NULL != it) { if (NULL != it->finish_cb) it->finish_cb (it->finish_cb_cls); free_it (it); } - if (NULL != op) - { + if (NULL != op) { if (NULL != op->ar_cb) - op->ar_cb (op->cls, - NULL, - NULL); - GNUNET_CONTAINER_DLL_remove (h->op_head, - h->op_tail, - op); + op->ar_cb (op->cls, NULL, NULL); + GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op); free_op (op); - } return; } { struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr; - attr = GNUNET_RECLAIM_ATTRIBUTE_deserialize ((char*)&msg[1], - attr_len); - if (NULL != it) - { + attr = GNUNET_RECLAIM_ATTRIBUTE_deserialize ((char *)&msg[1], attr_len); + if (NULL != it) { if (NULL != it->proc) - it->proc (it->proc_cls, - &msg->identity, - attr); - } else if (NULL != op) - { + it->proc (it->proc_cls, &msg->identity, attr); + } else if (NULL != op) { if (NULL != op->ar_cb) - op->ar_cb (op->cls, - &msg->identity, - attr); - + op->ar_cb (op->cls, &msg->identity, attr); } GNUNET_free (attr); return; @@ -661,14 +620,12 @@ handle_attribute_result (void *cls, * @return #GNUNET_OK on success, #GNUNET_SYSERR on error */ static int -check_ticket_result (void *cls, - const struct TicketResultMessage *msg) +check_ticket_result (void *cls, const struct TicketResultMessage *msg) { size_t msg_len; msg_len = ntohs (msg->header.size); - if (msg_len < sizeof (struct TicketResultMessage)) - { + if (msg_len < sizeof (struct TicketResultMessage)) { GNUNET_break (0); return GNUNET_SYSERR; } @@ -676,7 +633,6 @@ check_ticket_result (void *cls, } - /** * Handle an incoming message of type * #GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT @@ -685,8 +641,7 @@ check_ticket_result (void *cls, * @param msg the message we received */ static void -handle_ticket_result (void *cls, - const struct TicketResultMessage *msg) +handle_ticket_result (void *cls, const struct TicketResultMessage *msg) { struct GNUNET_RECLAIM_Handle *handle = cls; struct GNUNET_RECLAIM_Operation *op; @@ -704,13 +659,9 @@ handle_ticket_result (void *cls, if ((NULL == op) && (NULL == it)) return; msg_len = ntohs (msg->header.size); - if (NULL != op) - { - GNUNET_CONTAINER_DLL_remove (handle->op_head, - handle->op_tail, - op); - if (msg_len == sizeof (struct TicketResultMessage)) - { + if (NULL != op) { + GNUNET_CONTAINER_DLL_remove (handle->op_head, handle->op_tail, op); + if (msg_len == sizeof (struct TicketResultMessage)) { if (NULL != op->tr_cb) op->tr_cb (op->cls, NULL); } else { @@ -721,12 +672,10 @@ handle_ticket_result (void *cls, free_op (op); return; } else if (NULL != it) { - if (msg_len == sizeof (struct TicketResultMessage)) - { + if (msg_len == sizeof (struct TicketResultMessage)) { if (NULL != it->tr_cb) GNUNET_CONTAINER_DLL_remove (handle->ticket_it_head, - handle->ticket_it_tail, - it); + handle->ticket_it_tail, it); it->finish_cb (it->finish_cb_cls); GNUNET_free (it); } else { @@ -756,8 +705,7 @@ handle_revoke_ticket_result (void *cls, uint32_t r_id = ntohl (msg->id); int32_t success; - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Processing revocation result.\n"); + LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing revocation result.\n"); for (op = h->op_head; NULL != op; op = op->next) @@ -767,15 +715,10 @@ handle_revoke_ticket_result (void *cls, return; success = ntohl (msg->success); { - if (NULL != op->rvk_cb) - { - op->rvk_cb (op->cls, - success, - NULL); + if (NULL != op->rvk_cb) { + op->rvk_cb (op->cls, success, NULL); } - GNUNET_CONTAINER_DLL_remove (h->op_head, - h->op_tail, - op); + GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op); free_op (op); return; } @@ -783,7 +726,6 @@ handle_revoke_ticket_result (void *cls, } - /** * Try again to connect to the service. * @@ -793,44 +735,34 @@ static void reconnect (struct GNUNET_RECLAIM_Handle *h) { struct GNUNET_MQ_MessageHandler handlers[] = { - GNUNET_MQ_hd_fixed_size (attribute_store_response, - GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_STORE_RESPONSE, - struct AttributeStoreResultMessage, - h), - GNUNET_MQ_hd_var_size (attribute_result, - GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT, - struct AttributeResultMessage, - h), - GNUNET_MQ_hd_var_size (ticket_result, - GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT, - struct TicketResultMessage, - h), - GNUNET_MQ_hd_var_size (consume_ticket_result, - GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT, - struct ConsumeTicketResultMessage, - h), - GNUNET_MQ_hd_fixed_size (revoke_ticket_result, - GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET_RESULT, - struct RevokeTicketResultMessage, - h), - GNUNET_MQ_handler_end () - }; + GNUNET_MQ_hd_fixed_size ( + attribute_store_response, + GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_STORE_RESPONSE, + struct AttributeStoreResultMessage, h), + GNUNET_MQ_hd_var_size (attribute_result, + GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT, + struct AttributeResultMessage, h), + GNUNET_MQ_hd_var_size (ticket_result, + GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT, + struct TicketResultMessage, h), + GNUNET_MQ_hd_var_size (consume_ticket_result, + GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT, + struct ConsumeTicketResultMessage, h), + GNUNET_MQ_hd_fixed_size (revoke_ticket_result, + GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET_RESULT, + struct RevokeTicketResultMessage, h), + GNUNET_MQ_handler_end ()}; struct GNUNET_RECLAIM_Operation *op; GNUNET_assert (NULL == h->mq); - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Connecting to reclaim service.\n"); + LOG (GNUNET_ERROR_TYPE_DEBUG, "Connecting to reclaim service.\n"); - h->mq = GNUNET_CLIENT_connect (h->cfg, - "reclaim", - handlers, - &mq_error_handler, - h); + h->mq = + GNUNET_CLIENT_connect (h->cfg, "reclaim", handlers, &mq_error_handler, h); if (NULL == h->mq) return; for (op = h->op_head; NULL != op; op = op->next) - GNUNET_MQ_send_copy (h->mq, - op->env); + GNUNET_MQ_send_copy (h->mq, op->env); } @@ -848,8 +780,7 @@ GNUNET_RECLAIM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg) h = GNUNET_new (struct GNUNET_RECLAIM_Handle); h->cfg = cfg; reconnect (h); - if (NULL == h->mq) - { + if (NULL == h->mq) { GNUNET_free (h); return NULL; } @@ -870,9 +801,7 @@ GNUNET_RECLAIM_cancel (struct GNUNET_RECLAIM_Operation *op) { struct GNUNET_RECLAIM_Handle *h = op->h; - GNUNET_CONTAINER_DLL_remove (h->op_head, - h->op_tail, - op); + GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op); free_op (op); } @@ -886,13 +815,11 @@ void GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h) { GNUNET_assert (NULL != h); - if (NULL != h->mq) - { + if (NULL != h->mq) { GNUNET_MQ_destroy (h->mq); h->mq = NULL; } - if (NULL != h->reconnect_task) - { + if (NULL != h->reconnect_task) { GNUNET_SCHEDULER_cancel (h->reconnect_task); h->reconnect_task = NULL; } @@ -904,7 +831,7 @@ GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h) * Store an attribute. If the attribute is already present, * it is replaced with the new attribute. * - * @param h handle to the reclaim + * @param h handle to the re:claimID service * @param pkey private key of the identity * @param attr the attribute value * @param exp_interval the relative expiration interval for the attribute @@ -913,12 +840,12 @@ GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h) * @return handle to abort the request */ struct GNUNET_RECLAIM_Operation * -GNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, - const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr, - const struct GNUNET_TIME_Relative *exp_interval, - GNUNET_RECLAIM_ContinuationWithStatus cont, - void *cont_cls) +GNUNET_RECLAIM_attribute_store ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, + const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr, + const struct GNUNET_TIME_Relative *exp_interval, + GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls) { struct GNUNET_RECLAIM_Operation *op; struct AttributeStoreMessage *sam; @@ -929,26 +856,20 @@ GNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h, op->as_cb = cont; op->cls = cont_cls; op->r_id = h->r_id_gen++; - GNUNET_CONTAINER_DLL_insert_tail (h->op_head, - h->op_tail, - op); + GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op); attr_len = GNUNET_RECLAIM_ATTRIBUTE_serialize_get_size (attr); - op->env = GNUNET_MQ_msg_extra (sam, - attr_len, + op->env = GNUNET_MQ_msg_extra (sam, attr_len, GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_STORE); sam->identity = *pkey; sam->id = htonl (op->r_id); sam->exp = GNUNET_htonll (exp_interval->rel_value_us); - GNUNET_RECLAIM_ATTRIBUTE_serialize (attr, - (char*)&sam[1]); + GNUNET_RECLAIM_ATTRIBUTE_serialize (attr, (char *)&sam[1]); sam->attr_len = htons (attr_len); if (NULL != h->mq) - GNUNET_MQ_send_copy (h->mq, - op->env); + GNUNET_MQ_send_copy (h->mq, op->env); return op; - } @@ -964,28 +885,25 @@ GNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h, * On normal completion, @a finish_cb proc will be * invoked. * - * @param h handle to the idp - * @param identity identity to access - * @param error_cb function to call on error (i.e. disconnect), + * @param h Handle to the re:claimID service + * @param identity Identity to iterate over + * @param error_cb Function to call on error (i.e. disconnect), * the handle is afterwards invalid - * @param error_cb_cls closure for @a error_cb - * @param proc function to call on each attribute; it - * will be called repeatedly with a value (if available) - * @param proc_cls closure for @a proc - * @param finish_cb function to call on completion + * @param error_cb_cls Closure for @a error_cb + * @param proc Function to call on each attribute + * @param proc_cls Closure for @a proc + * @param finish_cb Function to call on completion * the handle is afterwards invalid - * @param finish_cb_cls closure for @a finish_cb - * @return an iterator handle to use for iteration + * @param finish_cb_cls Closure for @a finish_cb + * @return an iterator Handle to use for iteration */ struct GNUNET_RECLAIM_AttributeIterator * -GNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, - GNUNET_SCHEDULER_TaskCallback error_cb, - void *error_cb_cls, - GNUNET_RECLAIM_AttributeResult proc, - void *proc_cls, - GNUNET_SCHEDULER_TaskCallback finish_cb, - void *finish_cb_cls) +GNUNET_RECLAIM_get_attributes_start ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, + GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, + GNUNET_RECLAIM_AttributeResult proc, void *proc_cls, + GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls) { struct GNUNET_RECLAIM_AttributeIterator *it; struct GNUNET_MQ_Envelope *env; @@ -1003,9 +921,7 @@ GNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h, it->proc_cls = proc_cls; it->r_id = rid; it->identity = *identity; - GNUNET_CONTAINER_DLL_insert_tail (h->it_head, - h->it_tail, - it); + GNUNET_CONTAINER_DLL_insert_tail (h->it_head, h->it_tail, it); env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_START); msg->id = htonl (rid); @@ -1013,8 +929,7 @@ GNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h, if (NULL == h->mq) it->env = env; else - GNUNET_MQ_send (h->mq, - env); + GNUNET_MQ_send (h->mq, env); return it; } @@ -1032,16 +947,15 @@ GNUNET_RECLAIM_get_attributes_next (struct GNUNET_RECLAIM_AttributeIterator *it) struct AttributeIterationNextMessage *msg; struct GNUNET_MQ_Envelope *env; - env = GNUNET_MQ_msg (msg, - GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_NEXT); + env = + GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_NEXT); msg->id = htonl (it->r_id); - GNUNET_MQ_send (h->mq, - env); + GNUNET_MQ_send (h->mq, env); } /** - * Stops iteration and releases the idp handle for further calls. Must + * Stops iteration and releases the handle for further calls. Must * be called on any iteration that has not yet completed prior to calling * #GNUNET_RECLAIM_disconnect. * @@ -1054,38 +968,36 @@ GNUNET_RECLAIM_get_attributes_stop (struct GNUNET_RECLAIM_AttributeIterator *it) struct GNUNET_MQ_Envelope *env; struct AttributeIterationStopMessage *msg; - if (NULL != h->mq) - { + if (NULL != h->mq) { env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_ITERATION_STOP); msg->id = htonl (it->r_id); - GNUNET_MQ_send (h->mq, - env); + GNUNET_MQ_send (h->mq, env); } free_it (it); } -/** TODO - * Issues a ticket to another identity. The identity may use - * @GNUNET_RECLAIM_authorization_ticket_consume to consume the ticket - * and retrieve the attributes specified in the AttributeList. +/** + * Issues a ticket to another relying party. The identity may use + * @GNUNET_RECLAIM_ticket_consume to consume the ticket + * and retrieve the attributes specified in the attribute list. * * @param h the reclaim to use - * @param iss the issuing identity - * @param rp the subject of the ticket (the relying party) + * @param iss the issuing identity (= the user) + * @param rp the subject of the ticket (= the relying party) * @param attrs the attributes that the relying party is given access to * @param cb the callback * @param cb_cls the callback closure * @return handle to abort the operation */ struct GNUNET_RECLAIM_Operation * -GNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss, - const struct GNUNET_CRYPTO_EcdsaPublicKey *rp, - const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs, - GNUNET_RECLAIM_TicketCallback cb, - void *cb_cls) +GNUNET_RECLAIM_ticket_issue ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss, + const struct GNUNET_CRYPTO_EcdsaPublicKey *rp, + const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs, + GNUNET_RECLAIM_TicketCallback cb, void *cb_cls) { struct GNUNET_RECLAIM_Operation *op; struct IssueTicketMessage *tim; @@ -1096,44 +1008,41 @@ GNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h, op->tr_cb = cb; op->cls = cb_cls; op->r_id = h->r_id_gen++; - GNUNET_CONTAINER_DLL_insert_tail (h->op_head, - h->op_tail, - op); + GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op); attr_len = GNUNET_RECLAIM_ATTRIBUTE_list_serialize_get_size (attrs); - op->env = GNUNET_MQ_msg_extra (tim, - attr_len, + op->env = GNUNET_MQ_msg_extra (tim, attr_len, GNUNET_MESSAGE_TYPE_RECLAIM_ISSUE_TICKET); tim->identity = *iss; tim->rp = *rp; tim->id = htonl (op->r_id); - GNUNET_RECLAIM_ATTRIBUTE_list_serialize (attrs, - (char*)&tim[1]); + GNUNET_RECLAIM_ATTRIBUTE_list_serialize (attrs, (char *)&tim[1]); tim->attr_len = htons (attr_len); if (NULL != h->mq) - GNUNET_MQ_send_copy (h->mq, - op->env); + GNUNET_MQ_send_copy (h->mq, op->env); return op; } + /** * Consumes an issued ticket. The ticket is persisted * and used to retrieve identity information from the issuer * * @param h the reclaim to use - * @param identity the identity that is the subject of the issued ticket (the relying party) + * @param identity the identity that is the subject of the issued ticket (the + * relying party) * @param ticket the issued ticket to consume * @param cb the callback to call * @param cb_cls the callback closure * @return handle to abort the operation */ struct GNUNET_RECLAIM_Operation * -GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, - const struct GNUNET_RECLAIM_Ticket *ticket, - GNUNET_RECLAIM_AttributeResult cb, - void *cb_cls) +GNUNET_RECLAIM_ticket_consume ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, + const struct GNUNET_RECLAIM_Ticket *ticket, + GNUNET_RECLAIM_AttributeResult cb, void *cb_cls) { struct GNUNET_RECLAIM_Operation *op; struct ConsumeTicketMessage *ctm; @@ -1143,24 +1052,19 @@ GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h, op->ar_cb = cb; op->cls = cb_cls; op->r_id = h->r_id_gen++; - GNUNET_CONTAINER_DLL_insert_tail (h->op_head, - h->op_tail, - op); - op->env = GNUNET_MQ_msg_extra (ctm, - sizeof (const struct GNUNET_RECLAIM_Ticket), - GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET); + GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op); + op->env = + GNUNET_MQ_msg_extra (ctm, sizeof (const struct GNUNET_RECLAIM_Ticket), + GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET); ctm->identity = *identity; ctm->id = htonl (op->r_id); - GNUNET_memcpy ((char*)&ctm[1], - ticket, + GNUNET_memcpy ((char *)&ctm[1], ticket, sizeof (const struct GNUNET_RECLAIM_Ticket)); if (NULL != h->mq) - GNUNET_MQ_send_copy (h->mq, - op->env); + GNUNET_MQ_send_copy (h->mq, op->env); return op; - } @@ -1182,14 +1086,12 @@ GNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h, * @return an iterator handle to use for iteration */ struct GNUNET_RECLAIM_TicketIterator * -GNUNET_RECLAIM_ticket_iteration_start (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, - GNUNET_SCHEDULER_TaskCallback error_cb, - void *error_cb_cls, - GNUNET_RECLAIM_TicketCallback proc, - void *proc_cls, - GNUNET_SCHEDULER_TaskCallback finish_cb, - void *finish_cb_cls) +GNUNET_RECLAIM_ticket_iteration_start ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, + GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, + GNUNET_RECLAIM_TicketCallback proc, void *proc_cls, + GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls) { struct GNUNET_RECLAIM_TicketIterator *it; struct GNUNET_MQ_Envelope *env; @@ -1206,26 +1108,21 @@ GNUNET_RECLAIM_ticket_iteration_start (struct GNUNET_RECLAIM_Handle *h, it->tr_cb = proc; it->cls = proc_cls; it->r_id = rid; - GNUNET_CONTAINER_DLL_insert_tail (h->ticket_it_head, - h->ticket_it_tail, - it); - env = GNUNET_MQ_msg (msg, - GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_START); + GNUNET_CONTAINER_DLL_insert_tail (h->ticket_it_head, h->ticket_it_tail, it); + env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_START); msg->id = htonl (rid); msg->identity = *identity; if (NULL == h->mq) it->env = env; else - GNUNET_MQ_send (h->mq, - env); + GNUNET_MQ_send (h->mq, env); return it; - } /** - * Calls the record processor specified in #GNUNET_RECLAIM_ticket_iteration_start - * for the next record. + * Calls the ticket processor specified in + * #GNUNET_RECLAIM_ticket_iteration_start for the next record. * * @param it the iterator */ @@ -1236,16 +1133,14 @@ GNUNET_RECLAIM_ticket_iteration_next (struct GNUNET_RECLAIM_TicketIterator *it) struct TicketIterationNextMessage *msg; struct GNUNET_MQ_Envelope *env; - env = GNUNET_MQ_msg (msg, - GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_NEXT); + env = GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_NEXT); msg->id = htonl (it->r_id); - GNUNET_MQ_send (h->mq, - env); + GNUNET_MQ_send (h->mq, env); } /** - * Stops iteration and releases the idp handle for further calls. Must + * Stops iteration and releases the handle for further calls. Must * be called on any iteration that has not yet completed prior to calling * #GNUNET_RECLAIM_disconnect. * @@ -1258,22 +1153,23 @@ GNUNET_RECLAIM_ticket_iteration_stop (struct GNUNET_RECLAIM_TicketIterator *it) struct GNUNET_MQ_Envelope *env; struct TicketIterationStopMessage *msg; - if (NULL != h->mq) - { - env = GNUNET_MQ_msg (msg, - GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_STOP); + if (NULL != h->mq) { + env = + GNUNET_MQ_msg (msg, GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_ITERATION_STOP); msg->id = htonl (it->r_id); - GNUNET_MQ_send (h->mq, - env); + GNUNET_MQ_send (h->mq, env); } GNUNET_free (it); } + /** * Revoked an issued ticket. The relying party will be unable to retrieve - * updated attributes. + * attributes. Other issued tickets remain unaffected. + * This includes tickets issued to other relying parties as well as to + * other tickets issued to the audience specified in this ticket. * - * @param h the reclaim to use + * @param h the identity provider to use * @param identity the issuing identity * @param ticket the ticket to revoke * @param cb the callback @@ -1281,11 +1177,11 @@ GNUNET_RECLAIM_ticket_iteration_stop (struct GNUNET_RECLAIM_TicketIterator *it) * @return handle to abort the operation */ struct GNUNET_RECLAIM_Operation * -GNUNET_RECLAIM_ticket_revoke (struct GNUNET_RECLAIM_Handle *h, - const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, - const struct GNUNET_RECLAIM_Ticket *ticket, - GNUNET_RECLAIM_ContinuationWithStatus cb, - void *cb_cls) +GNUNET_RECLAIM_ticket_revoke ( + struct GNUNET_RECLAIM_Handle *h, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, + const struct GNUNET_RECLAIM_Ticket *ticket, + GNUNET_RECLAIM_ContinuationWithStatus cb, void *cb_cls) { struct GNUNET_RECLAIM_Operation *op; struct RevokeTicketMessage *msg; @@ -1297,25 +1193,18 @@ GNUNET_RECLAIM_ticket_revoke (struct GNUNET_RECLAIM_Handle *h, op->rvk_cb = cb; op->cls = cb_cls; op->r_id = rid; - GNUNET_CONTAINER_DLL_insert_tail (h->op_head, - h->op_tail, - op); - op->env = GNUNET_MQ_msg_extra (msg, - sizeof (struct GNUNET_RECLAIM_Ticket), - GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET); + GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, op); + op->env = GNUNET_MQ_msg_extra (msg, sizeof (struct GNUNET_RECLAIM_Ticket), + GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET); msg->id = htonl (rid); msg->identity = *identity; - GNUNET_memcpy (&msg[1], - ticket, - sizeof (struct GNUNET_RECLAIM_Ticket)); + GNUNET_memcpy (&msg[1], ticket, sizeof (struct GNUNET_RECLAIM_Ticket)); if (NULL != h->mq) { - GNUNET_MQ_send (h->mq, - op->env); + GNUNET_MQ_send (h->mq, op->env); op->env = NULL; } return op; } - /* end of reclaim_api.c */ -- 2.25.1