diff options
Diffstat (limited to 'src/analysis/db/collection.c')
-rw-r--r-- | src/analysis/db/collection.c | 55 |
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(×tamp, fd, 0); + status = unpack_timestamp(×tamp, pbuf); if (!status) return false; inactive = TIMESTAMP_ALL_ACTIVE; |