-more revocation
[oweals/gnunet.git] / src / identity-provider / plugin_identity_provider_sqlite.c
index 7a19ba82714b98e9b53a6916f378b7a9739a0d2e..ac4e3c68685f1120198d0fd92847e908e8bfe8cf 100644 (file)
@@ -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 <sqlite3.h>
 
@@ -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);
   }