*
* @param cls closure (internal context for the plugin)
* @param ticket the ticket to persist
- * @param attrs attributes to persist
* @return #GNUNET_OK on success, else #GNUNET_SYSERR
*/
static int
identity_provider_sqlite_store_ticket (void *cls,
- const struct GNUNET_IDENTITY_PROVIDER_Ticket2 *ticket,
- const struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs)
+ 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;
- size_t attrs_size;
- char *attrs_serialized;
- attrs_size = attribute_list_serialize_get_size (attrs);
-
- attrs_serialized = GNUNET_malloc (attrs_size);
-
- attribute_list_serialize (attrs,
- attrs_serialized);
-
- {
+ {
+ /* 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 = 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_serialized, attrs_size),
+ 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;
- size_t attrs_size;
- void *attrs_serialized;
+ 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 (&attrs_serialized, &attrs_size),
+ GNUNET_SQ_result_spec_variable_size ((void**)&attrs_ser,
+ &attrs_len),
GNUNET_SQ_result_spec_end
};
}
else
{
- struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs;
-
- attrs = attribute_list_deserialize (attrs_serialized, attrs_size);
-
- if (NULL == attrs)
- {
- GNUNET_break (0);
- ret = GNUNET_SYSERR;
- }
- else
- {
- if (NULL != iter)
- iter (iter_cls,
- &ticket,
- attrs);
- 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);
}