summaryrefslogtreecommitdiff
path: root/src/analysis/db/collection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r--src/analysis/db/collection.c55
1 files changed, 28 insertions, 27 deletions
diff --git a/src/analysis/db/collection.c b/src/analysis/db/collection.c
index ebf7eb8..12194ca 100644
--- a/src/analysis/db/collection.c
+++ b/src/analysis/db/collection.c
@@ -33,7 +33,6 @@
#include "collection-int.h"
#include "misc/rlestr.h"
#include "../../common/extstr.h"
-#include "../../common/io.h"
#include "../../glibext/chrysamarshal.h"
@@ -258,7 +257,7 @@ uint32_t g_db_collection_get_feature(const GDbCollection *collec)
/******************************************************************************
* *
* Paramètres : collec = ensemble d'éléments à considérer. *
-* fd = flux ouvert en lecture pour la réception de données.*
+* pbuf = paquet de données où venir puiser les infos. *
* db = base de données à mettre à jour. *
* *
* Description : Réceptionne et traite une requête réseau pour collection. *
@@ -271,25 +270,28 @@ uint32_t g_db_collection_get_feature(const GDbCollection *collec)
* *
******************************************************************************/
-bool g_db_collection_recv(GDbCollection *collec, int fd, sqlite3 *db)
+bool g_db_collection_unpack(GDbCollection *collec, packed_buffer *pbuf, sqlite3 *db)
{
bool result; /* Bilan à faire remonter */
- uint32_t val32; /* Valeur sur 32 bits */
+ uint32_t tmp32; /* Valeur sur 32 bits */
bool status; /* Bilan de lecture initiale */
DBAction action; /* Commande de la requête */
GDbItem *item; /* Définition d'élément visé */
GList *found; /* Test de présence existante */
timestamp_t inactive; /* Horodatage de désactivation */
- status = safe_recv(fd, &val32, sizeof(uint32_t), 0);
- if (!status) return false;
+ result = extend_packed_buffer(pbuf, &tmp32, sizeof(uint32_t), true);
+ action = tmp32;
+
+ if (action < 0 || action >= DBA_COUNT)
+ result = false;
- action = be32toh(val32);
- if (action < 0 || action >= DBA_COUNT) return false;
+ if (!result)
+ return result;
item = g_object_new(collec->type, NULL);
- status = g_db_item_recv(item, fd, 0);
+ status = g_db_item_unpack(item, pbuf);
if (!status) return false;
result = false;
@@ -380,7 +382,7 @@ bool g_db_collection_recv(GDbCollection *collec, int fd, sqlite3 *db)
/******************************************************************************
* *
* Paramètres : collec = ensemble d'éléments à considérer. *
-* fd = flux ouvert en écriture pour l'émission de données. *
+* pbuf = paquet de données où venir inscrire les infos. *
* action = avenir de l'élément fourni. *
* item = élément de collection à sérialiser. *
* *
@@ -392,23 +394,22 @@ bool g_db_collection_recv(GDbCollection *collec, int fd, sqlite3 *db)
* *
******************************************************************************/
-bool g_db_collection_send(GDbCollection *collec, int fd, DBAction action, GDbItem *item)
+bool g_db_collection_pack(GDbCollection *collec, packed_buffer *pbuf, DBAction action, GDbItem *item)
{
- bool status; /* Bilan de lecture initiale */
+ bool result; /* Bilan à retourner */
- status = safe_send(fd, (uint32_t []) { htobe32(DBC_COLLECTION) }, sizeof(uint32_t), MSG_MORE);
- if (!status) return false;
+ result = extend_packed_buffer(pbuf, (uint32_t []) { DBC_COLLECTION }, sizeof(uint32_t), true);
- status = safe_send(fd, (uint32_t []) { htobe32(collec->featuring) }, sizeof(uint32_t), MSG_MORE);
- if (!status) return false;
+ if (result)
+ result = extend_packed_buffer(pbuf, (uint32_t []) { collec->featuring }, sizeof(uint32_t), true);
- status = safe_send(fd, (uint32_t []) { htobe32(action) }, sizeof(uint32_t), MSG_MORE);
- if (!status) return false;
+ if (result)
+ result = extend_packed_buffer(pbuf, (uint32_t []) { action }, sizeof(uint32_t), true);
- status = g_db_item_send(item, fd, 0);
- if (!status) return false;
+ if (result)
+ result = g_db_item_pack(item, pbuf);
- return true;
+ return result;
}
@@ -416,7 +417,7 @@ bool g_db_collection_send(GDbCollection *collec, int fd, DBAction action, GDbIte
/******************************************************************************
* *
* Paramètres : collec = ensemble d'éléments à considérer. *
-* fd = flux ouvert en écriture pour l'émission de données. *
+* pbuf = paquet de données où venir inscrire les infos. *
* *
* Description : Envoie pour mise à jour tous les éléments courants. *
* *
@@ -426,7 +427,7 @@ bool g_db_collection_send(GDbCollection *collec, int fd, DBAction action, GDbIte
* *
******************************************************************************/
-bool g_db_collection_send_all_updates(GDbCollection *collec, int fd)
+bool g_db_collection_pack_all_updates(GDbCollection *collec, packed_buffer *pbuf)
{
bool result; /* Bilan à renvoyer */
GList *iter; /* Boucle de parcours */
@@ -439,7 +440,7 @@ bool g_db_collection_send_all_updates(GDbCollection *collec, int fd)
iter != NULL && result;
iter = g_list_next(iter))
{
- result = g_db_collection_send(collec, fd, DBA_ADD_ITEM, G_DB_ITEM(iter->data));
+ result = g_db_collection_pack(collec, pbuf, DBA_ADD_ITEM, G_DB_ITEM(iter->data));
}
@@ -1495,7 +1496,7 @@ void lock_unlock_collections(GList *list, bool write, bool lock)
/******************************************************************************
* *
* Paramètres : list = ensemble de collectons à traiter. *
-* fd = canal de communication ouvert en lecture. *
+* pbuf = paquet de données où venir puiser les infos. *
* db = base de données à mettre à jour. *
* *
* Description : Met à jour les statuts d'activité des éléments. *
@@ -1506,7 +1507,7 @@ void lock_unlock_collections(GList *list, bool write, bool lock)
* *
******************************************************************************/
-bool update_activity_in_collections(GList *list, int fd, sqlite3 *db)
+bool update_activity_in_collections(GList *list, packed_buffer *pbuf, sqlite3 *db)
{
bool result; /* Résultat global à renvoyer */
bool status; /* Bilan de lecture initiale */
@@ -1521,7 +1522,7 @@ bool update_activity_in_collections(GList *list, int fd, sqlite3 *db)
/* TODO : lock ? */
- status = recv_timestamp(&timestamp, fd, 0);
+ status = unpack_timestamp(&timestamp, pbuf);
if (!status) return false;
inactive = TIMESTAMP_ALL_ACTIVE;