X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fidentity-provider%2Fplugin_identity_provider_sqlite.c;h=ac4e3c68685f1120198d0fd92847e908e8bfe8cf;hb=58d4e0f0447ae4efc6b3f4ba8a3d612c22f7cbb4;hp=7a19ba82714b98e9b53a6916f378b7a9739a0d2e;hpb=7807374c7247af1d139ff70b4af047c227229a6e;p=oweals%2Fgnunet.git diff --git a/src/identity-provider/plugin_identity_provider_sqlite.c b/src/identity-provider/plugin_identity_provider_sqlite.c index 7a19ba827..ac4e3c686 100644 --- a/src/identity-provider/plugin_identity_provider_sqlite.c +++ b/src/identity-provider/plugin_identity_provider_sqlite.c @@ -27,6 +27,7 @@ #include "platform.h" #include "gnunet_identity_provider_service.h" #include "gnunet_identity_provider_plugin.h" +#include "identity_attribute.h" #include "gnunet_sq_lib.h" #include @@ -252,7 +253,8 @@ database_setup (struct Plugin *plugin) "CREATE TABLE identity001tickets (" " identity BLOB NOT NULL DEFAULT ''," " audience BLOB NOT NULL DEFAULT ''," - " rnd INT8 NOT NULL DEFAULT ''" + " rnd INT8 NOT NULL DEFAULT ''," + " attributes BLOB NOT NULL DEFAULT ''" ")", NULL, NULL, NULL) != SQLITE_OK)) { @@ -267,8 +269,8 @@ database_setup (struct Plugin *plugin) if ( (SQLITE_OK != sq_prepare (plugin->dbh, - "INSERT INTO identity001tickets (identity, audience, rnd)" - " VALUES (?, ?, ?)", + "INSERT INTO identity001tickets (identity, audience, rnd, attributes)" + " VALUES (?, ?, ?, ?)", &plugin->store_ticket)) || (SQLITE_OK != sq_prepare (plugin->dbh, @@ -276,13 +278,13 @@ database_setup (struct Plugin *plugin) &plugin->delete_ticket)) || (SQLITE_OK != sq_prepare (plugin->dbh, - "SELECT identity,audience,rnd" + "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" + "SELECT identity,audience,rnd,attributes" " FROM identity001tickets WHERE audience=?" " ORDER BY rnd LIMIT 1 OFFSET ?", &plugin->iterate_tickets_by_audience)) ) @@ -358,9 +360,12 @@ database_shutdown (struct Plugin *plugin) */ static int identity_provider_sqlite_store_ticket (void *cls, - const struct GNUNET_IDENTITY_PROVIDER_Ticket2 *ticket) + const struct GNUNET_IDENTITY_PROVIDER_Ticket *ticket, + const struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs) { struct Plugin *plugin = cls; + size_t attrs_len; + char *attrs_ser; int n; { @@ -384,11 +389,16 @@ identity_provider_sqlite_store_ticket (void *cls, n = sqlite3_step (plugin->delete_ticket); GNUNET_SQ_reset (plugin->dbh, plugin->delete_ticket); - + + attrs_len = attribute_list_serialize_get_size (attrs); + attrs_ser = GNUNET_malloc (attrs_len); + 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 }; @@ -406,6 +416,7 @@ identity_provider_sqlite_store_ticket (void *cls, n = sqlite3_step (plugin->store_ticket); GNUNET_SQ_reset (plugin->dbh, plugin->store_ticket); + GNUNET_free (attrs_ser); } switch (n) { @@ -437,7 +448,7 @@ identity_provider_sqlite_store_ticket (void *cls, */ static int identity_provider_sqlite_delete_ticket (void *cls, - const struct GNUNET_IDENTITY_PROVIDER_Ticket2 *ticket) + const struct GNUNET_IDENTITY_PROVIDER_Ticket *ticket) { struct Plugin *plugin = cls; int n; @@ -502,9 +513,12 @@ get_ticket_and_call_iterator (struct Plugin *plugin, GNUNET_IDENTITY_PROVIDER_TicketIterator iter, void *iter_cls) { - struct GNUNET_IDENTITY_PROVIDER_Ticket2 ticket; + struct GNUNET_IDENTITY_PROVIDER_Ticket ticket; + struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs; int ret; int sret; + size_t attrs_len; + char *attrs_ser; ret = GNUNET_NO; if (SQLITE_ROW == (sret = sqlite3_step (stmt))) @@ -513,6 +527,8 @@ get_ticket_and_call_iterator (struct Plugin *plugin, 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 }; @@ -525,10 +541,13 @@ get_ticket_and_call_iterator (struct Plugin *plugin, } else { - if (NULL != iter) - iter (iter_cls, - &ticket); - ret = GNUNET_YES; + attrs = attribute_list_deserialize (attrs_ser, + attrs_len); + if (NULL != iter) + iter (iter_cls, + &ticket, + attrs); + ret = GNUNET_YES; } GNUNET_SQ_cleanup_result (rs); }