#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 <sqlite3.h>
"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))
{
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,
&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)) )
*/
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;
{
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
};
n = sqlite3_step (plugin->store_ticket);
GNUNET_SQ_reset (plugin->dbh,
plugin->store_ticket);
+ GNUNET_free (attrs_ser);
}
switch (n)
{
*/
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;
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)))
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
};
}
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);
}