summaryrefslogtreecommitdiff
path: root/src/analysis/db/cdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/db/cdb.c')
-rw-r--r--src/analysis/db/cdb.c76
1 files changed, 62 insertions, 14 deletions
diff --git a/src/analysis/db/cdb.c b/src/analysis/db/cdb.c
index 46cfc23..96e69d5 100644
--- a/src/analysis/db/cdb.c
+++ b/src/analysis/db/cdb.c
@@ -34,6 +34,7 @@
#include <signal.h>
#include <stdint.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
@@ -44,7 +45,6 @@
#include "collection.h"
#include "protocol.h"
-#include "items/bookmark.h"
#include "../../common/cpp.h"
#include "../../common/extstr.h"
#include "../../common/io.h"
@@ -127,11 +127,14 @@ static bool g_cdb_archive_read(GCdbArchive *);
+/* -------------------------- MANIPULATION DES PARTIES XML -------------------------- */
/* Crée la description XML correspondant à l'archive. */
static bool g_cdb_archive_create_xml_desc(GCdbArchive *, const rle_string *);
+/* Vérifie la conformité d'une description XML avec le serveur. */
+static bool g_cdb_archive_check_xml_version(const GCdbArchive *);
@@ -201,6 +204,8 @@ static void g_cdb_archive_class_init(GCdbArchiveClass *klass)
static void g_cdb_archive_init(GCdbArchive *archive)
{
+ archive->collections = create_collections_list();
+
g_mutex_init(&archive->clients_access);
g_mutex_init(&archive->id_access);
@@ -330,7 +335,9 @@ GCdbArchive *g_cdb_archive_new(const char *owner, const rle_string *hash, const
g_cdb_archive_create_xml_desc(result, user);
g_cdb_archive_create_db(result, NULL);
- if (g_cdb_archive_write(result) != DBE_NONE)
+ *error = g_cdb_archive_write(result);
+
+ if (*error != DBE_NONE)
goto gcan_error;
}
@@ -342,10 +349,19 @@ GCdbArchive *g_cdb_archive_new(const char *owner, const rle_string *hash, const
if (!g_cdb_archive_read(result))
goto gcan_error;
+ if (!g_cdb_archive_check_xml_version(result))
+ {
+ *error = DBE_XML_VERSION_ERROR;
+ goto gcan_error;
+ }
+
/* Chargement des éléments sauvegardés */
if (!g_cdb_archive_load_collections(result))
+ {
+ *error = DBE_DB_LOADING_ERROR;
goto gcan_error;
+ }
return result;
@@ -586,12 +602,9 @@ int g_cdb_archive_compare_hash(const GCdbArchive *archive, const rle_string *has
-
-/* --------------------- OPERATIONS DE LECTURE D'UN FICHIER XML --------------------- */
-/* --------------------- OPERATIONS DE LECTURE D'UN FICHIER XML --------------------- */
-
-
-
+/* ---------------------------------------------------------------------------------- */
+/* MANIPULATION DES PARTIES XML */
+/* ---------------------------------------------------------------------------------- */
/******************************************************************************
@@ -639,8 +652,38 @@ static bool g_cdb_archive_create_xml_desc(GCdbArchive *archive, const rle_string
}
+/******************************************************************************
+* *
+* Paramètres : archive = archive à consulter. *
+* *
+* Description : Vérifie la conformité d'une description XML avec le serveur. *
+* *
+* Retour : Bilan de la vérification. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static bool g_cdb_archive_check_xml_version(const GCdbArchive *archive)
+{
+ bool result; /* Bilan à retourner */
+ char *version; /* Version protocolaire */
+ unsigned long int used; /* Version utilisée */
+
+ result = NULL;
+
+ version = get_node_text_value(archive->context, "/ChrysalideBinary/Protocol");
+ if (version == NULL) return false;
+
+ used = strtoul(version, NULL, 16);
+ result = (used == CDB_PROTOCOL_VERSION);
+ free(version);
+
+ return result;
+
+}
/* ---------------------------------------------------------------------------------- */
@@ -666,6 +709,8 @@ static bool g_cdb_archive_create_db(const GCdbArchive *archive, const core_db_in
bool result; /* Bilan à retourner */
sqlite3 *db; /* Base de données à constituer*/
int ret; /* Bilan de la création */
+ GList *iter; /* Boucle de parcours */
+ GDbCollection *collec; /* Collection visée manipulée */
ret = sqlite3_open(archive->sql_db, &db);
@@ -675,11 +720,16 @@ static bool g_cdb_archive_create_db(const GCdbArchive *archive, const core_db_in
return false;
}
+ result = true;
-
- result = create_bookmark_db_table(db);
-
-
+ for (iter = g_list_first(archive->collections);
+ iter != NULL && result;
+ iter = g_list_next(iter))
+ {
+ collec = G_DB_COLLECTION(iter->data);
+ result = g_db_collection_create_db_table(collec, db);
+ fprintf(stderr, "STATUS :: %d\n", result);
+ }
sqlite3_close(db);
@@ -725,8 +775,6 @@ static bool g_cdb_archive_load_collections(GCdbArchive *archive)
GList *iter; /* Boucle de parcours */
GDbCollection *collec; /* Collection visée manipulée */
- archive->collections = create_collections_list();
-
for (iter = g_list_first(archive->collections);
iter != NULL;
iter = g_list_next(iter))