daemon/db: GSignondDictionary is used for saving/retrieving Token data to/from db.
authorAmarnath Valluri <amarnath.valluri@linux.intel.com>
Wed, 8 May 2013 07:08:20 +0000 (10:08 +0300)
committerAmarnath Valluri <amarnath.valluri@linux.intel.com>
Wed, 8 May 2013 07:35:31 +0000 (10:35 +0300)
No Token data is exchanged as 'Dictionary(variant-map) instead of 'bytearray'.
So that Session data and Token data are aligned, and can be merged together.
Tests updated as per this new chage.

src/common/db/gsignond-db-secret-database.c
src/common/db/gsignond-db-secret-database.h
test/db/dbtest.c

index d283642..69b3c16 100644 (file)
@@ -78,15 +78,16 @@ _gsignond_db_read_username_password (
 static gboolean
 _gsignond_db_read_key_value (
         sqlite3_stmt *stmt,
-        GHashTable* data)
+        GSignondDictionary* data)
 {
     gchar *key = NULL;
-    GBytes *value = NULL;
+    GVariant *value = NULL;
     key = g_strdup ((const gchar *)sqlite3_column_text (stmt, 0));
-    value = g_bytes_new ((gconstpointer) sqlite3_column_blob(stmt, 1),
-                         (gsize) sqlite3_column_bytes(stmt, 1));
+    value = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, 
+        (gconstpointer) sqlite3_column_blob(stmt, 1),
+        (gsize) sqlite3_column_bytes(stmt, 1), sizeof(guchar));
 
-    g_hash_table_insert(data, key, value);
+    gsignond_dictionary_set (data, key, value);
     return TRUE;
 }
 
@@ -270,7 +271,7 @@ gsignond_db_secret_database_remove_credentials (
     return ret;
 }
 
-GHashTable *
+GSignondDictionary *
 gsignond_db_secret_database_load_data (
         GSignondDbSecretDatabase *self,
         const guint32 id,
@@ -278,15 +279,12 @@ gsignond_db_secret_database_load_data (
 {
     gchar *query = NULL;
     gint rows = 0;
-    GHashTable *data = NULL;
+    GSignondDictionary *data = NULL;
 
     g_return_val_if_fail (GSIGNOND_DB_IS_SECRET_DATABASE (self), NULL);
     RETURN_IF_NOT_OPEN (self, NULL);
 
-    data = g_hash_table_new_full ((GHashFunc)g_str_hash,
-                                  (GEqualFunc)g_str_equal,
-                                  (GDestroyNotify)g_free,
-                                  (GDestroyNotify)g_bytes_unref);
+    data = gsignond_dictionary_new ();
 
     query = sqlite3_mprintf (
             "SELECT key, value "
@@ -302,7 +300,7 @@ gsignond_db_secret_database_load_data (
 
     if (G_UNLIKELY (rows <= 0)) {
         DBG ("Load data from DB failed");
-        g_hash_table_destroy(data);
+        gsignond_dictionary_unref (data);
         data = NULL;
     }
 
@@ -314,13 +312,13 @@ gsignond_db_secret_database_update_data (
         GSignondDbSecretDatabase *self,
         const guint32 id,
         const guint32 method,
-        GHashTable *data)
+        GSignondDictionary *data)
 {
     gchar *query = NULL;
     gint ret = 0;
     GHashTableIter iter;
     gchar *key = NULL;
-    GBytes *value = NULL;
+    GVariant *value = NULL;
     guint32 data_counter = 0;
     GSignondDbSqlDatabase *parent = NULL;
 
@@ -352,7 +350,7 @@ gsignond_db_secret_database_update_data (
     g_hash_table_iter_init (&iter, data);
     while (g_hash_table_iter_next (&iter,(gpointer *) &key,
             (gpointer *) &value)) {
-        data_counter = data_counter + strlen (key) + g_bytes_get_size (value);
+        data_counter = data_counter + strlen (key) + g_variant_get_size(value);
         if (data_counter >= GSIGNOND_DB_MAX_DATA_STORAGE) {
             gsignond_db_sql_database_rollback_transaction (parent);
             DBG ("size limit is exceeded");
@@ -368,7 +366,7 @@ gsignond_db_secret_database_update_data (
     while (g_hash_table_iter_next (&iter, (gpointer *)&key,
             (gpointer *) &value )) {
         gsize val_size;
-        const gchar *value_data;
+        gconstpointer value_data;
         sqlite3_stmt *sql_stmt;
 
         ret = sqlite3_prepare_v2 (parent->priv->db, statement, -1,
@@ -379,13 +377,13 @@ gsignond_db_secret_database_update_data (
             gsignond_db_sql_database_rollback_transaction (parent);
             return FALSE;
         }
-        value_data = (const gchar *)g_bytes_get_data (value, &val_size);
+        value_data = g_variant_get_data (value);
+        val_size = g_variant_get_size (value);
 
         sqlite3_bind_int(sql_stmt, 1, (int)id);
         sqlite3_bind_int(sql_stmt, 2, (int)method);
         sqlite3_bind_text(sql_stmt, 3, key, -1, SQLITE_STATIC);
-        sqlite3_bind_blob(sql_stmt, 4, (const void*)value_data, (int)val_size,
-                SQLITE_STATIC);
+        sqlite3_bind_blob(sql_stmt, 4, value_data, (int)val_size, SQLITE_STATIC);
 
         ret = sqlite3_step (sql_stmt);
         if (G_UNLIKELY (ret != SQLITE_DONE)) {
@@ -437,6 +435,3 @@ gsignond_db_secret_database_remove_data (
     return ret;
 }
 
-
-
-
index 635d6d9..2c9fdad 100644 (file)
@@ -29,6 +29,7 @@
 #include <glib.h>
 #include <glib-object.h>
 #include <gsignond/gsignond-credentials.h>
+#include <gsignond/gsignond-dictionary.h>
 
 #include "gsignond-db-sql-database.h"
 
@@ -93,7 +94,7 @@ gsignond_db_secret_database_remove_credentials (
         GSignondDbSecretDatabase *self,
         const guint32 id);
 
-GHashTable *
+GSignondDictionary *
 gsignond_db_secret_database_load_data (
         GSignondDbSecretDatabase *self,
         const guint32 id,
@@ -104,7 +105,7 @@ gsignond_db_secret_database_update_data (
         GSignondDbSecretDatabase *self,
         const guint32 id,
         const guint32 method,
-        GHashTable *data);
+        GSignondDictionary *data);
 
 gboolean
 gsignond_db_secret_database_remove_data (
index de0a058..332f1cc 100644 (file)
@@ -55,13 +55,17 @@ typedef struct {
 static void
 _compare_key_value(
         gchar *key,
-        GBytes *value,
+        GVariant *value,
         Data *user_data)
 {
-    GBytes *value2 = NULL;
-    value2 = (GBytes *)g_hash_table_lookup (user_data->table, key);
-    if (value2 && g_bytes_compare (value2, value) == 0)
+    GVariant *value2 = (GVariant *)g_hash_table_lookup (user_data->table, key);
+
+    if (value2 && g_variant_get_size (value2) == g_variant_get_size (value2)
+               && memcmp (g_variant_get_data (value2), 
+                          g_variant_get_data(value),
+                          g_variant_get_size(value2)) == 0) {
         return;
+    }
     user_data->status = 0;
 }
 
@@ -467,18 +471,15 @@ START_TEST (test_secret_database)
     data = g_hash_table_new_full ((GHashFunc)g_str_hash,
             (GEqualFunc)g_str_equal,
             (GDestroyNotify)NULL,
-            (GDestroyNotify)g_bytes_unref);
+            (GDestroyNotify)g_variant_unref);
     fail_if (data == NULL);
 
-    g_hash_table_insert (data,"key1",g_bytes_new("value1", strlen ("value1")));
-    g_hash_table_insert (data,"key2",g_bytes_new("value2", strlen ("value2")));
-    g_hash_table_insert (data,"key3",g_bytes_new("value3", strlen ("value3")));
-    g_hash_table_insert (data,"key4",g_bytes_new("value4", strlen ("value4")));
-    g_hash_table_insert (data,"key5",g_bytes_new("value5", strlen ("value5")));
-
+    g_hash_table_insert (data,"key1",g_variant_new_string ("string_value"));
+    g_hash_table_insert (data,"key2",g_variant_new_double (12223.4223));
+    g_hash_table_insert (data,"key3",g_variant_new_uint16(20));
+    g_hash_table_insert (data,"key4",g_variant_new("^ay", "byte_value"));
     fail_unless (gsignond_db_secret_database_update_data (
             database, id, method, data) == TRUE);
-
     data2 = gsignond_db_secret_database_load_data (database, id, method);
     fail_if (data2 == NULL);
     input.table = data;
@@ -660,14 +661,13 @@ START_TEST (test_secret_storage)
     data = g_hash_table_new_full ((GHashFunc)g_str_hash,
             (GEqualFunc)g_str_equal,
             (GDestroyNotify)NULL,
-            (GDestroyNotify)g_bytes_unref);
+            (GDestroyNotify)g_variant_unref);
     fail_if (data == NULL);
 
-    g_hash_table_insert (data,"key1",g_bytes_new("value1", strlen ("value1")));
-    g_hash_table_insert (data,"key2",g_bytes_new("value2", strlen ("value2")));
-    g_hash_table_insert (data,"key3",g_bytes_new("value3", strlen ("value3")));
-    g_hash_table_insert (data,"key4",g_bytes_new("value4", strlen ("value4")));
-    g_hash_table_insert (data,"key5",g_bytes_new("value5", strlen ("value5")));
+    g_hash_table_insert (data,"key1",g_variant_new_string ("string_value"));
+    g_hash_table_insert (data,"key2",g_variant_new_double (12223.4223));
+    g_hash_table_insert (data,"key3",g_variant_new_uint16(20));
+    g_hash_table_insert (data,"key4",g_variant_new("^ay", "byte_value"));
 
     fail_unless (gsignond_secret_storage_update_data (
             storage, id, method, data) == TRUE);
@@ -930,12 +930,11 @@ START_TEST (test_credentials_database)
     data = g_hash_table_new_full ((GHashFunc)g_str_hash,
             (GEqualFunc)g_str_equal,
             (GDestroyNotify)NULL,
-            (GDestroyNotify)g_bytes_unref);
-    g_hash_table_insert (data,"key1",g_bytes_new("value1", strlen ("value1")));
-    g_hash_table_insert (data,"key2",g_bytes_new("value2", strlen ("value2")));
-    g_hash_table_insert (data,"key3",g_bytes_new("value3", strlen ("value3")));
-    g_hash_table_insert (data,"key4",g_bytes_new("value4", strlen ("value4")));
-    g_hash_table_insert (data,"key5",g_bytes_new("value5", strlen ("value5")));
+            (GDestroyNotify)g_variant_unref);
+    g_hash_table_insert (data,"key1",g_variant_new_string ("string_value"));
+    g_hash_table_insert (data,"key2",g_variant_new_double (12223.4223));
+    g_hash_table_insert (data,"key3",g_variant_new_uint16(20));
+    g_hash_table_insert (data,"key4",g_variant_new("^ay", "byte_value"));
 
     fail_unless (gsignond_db_credentials_database_update_data (
             credentials_db, 0, "method1", data) == FALSE);