/* Chrysalide - Outil d'analyse de fichiers binaires * protocol.h - prototypes pour la description du protocole impactant les BD Chrysalide * * Copyright (C) 2014 Cyrille Bagard * * This file is part of Chrysalide. * * Chrysalide is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Chrysalide is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Foobar. If not, see . */ #ifndef _ANALYSIS_DB_PROTOCOL_H #define _ANALYSIS_DB_PROTOCOL_H /** * Version de la définition courante du protocole. */ #define CDB_PROTOCOL_VERSION 0xc0de0002 /** * Délai maximal de réaction pour les coupures de flux (en ms). */ #define CDB_CONN_TIMEOUT 1000 /* Comportement vis à vis des éléments */ typedef enum _DBStorage { DBS_ALL_LOCAL = 0x01, /* Enregistrements locaux */ DBS_ALL_REMOTE = 0x02, /* Enregistrements distants */ DBS_LOCAL_AND_REMOTE = 0x03, /* Enreg. locaux + infos dists.*/ DBS_MAX = 3 } DBStorage; /** * Une fois la connexion établie, les paquets ont tous la forme suivante : * * [ type de collection visée ; cf. DBFeatures ] * [ action à mener ; cf. DBAction ] * [ élément de type GDbItem sérialisé... ] * */ /* Fonctionnalités offertes nativement */ typedef enum _DBFeatures { DBF_BOOKMARKS, /* Signets dans le code */ DBF_COMMENTS, /* Commentaires ajoutés */ DBF_MOVES, /* Déplacements dans du code */ DBF_DISPLAY_SWITCHERS, /* Choix d'affichage */ DBF_COUNT } DBFeatures; /* Interactions disponibles vis à vis d'une collection. */ typedef enum _DBAction { DBA_ADD_ITEM, /* Ajout d'un élément */ DBA_REM_ITEM, /* Suppression d'un élément */ DBA_CHANGE_STATE, /* Changement d'activité */ DBA_COUNT } DBAction; /** * Commandes envoyées d'un côté à un autre. */ typedef enum _DBCommand { DBC_HELO, /* Connexion initiale C -> S */ DBC_WELCOME, /* Réponse initiale S -> C */ DBC_SAVE, /* Enregistrement de l'archive */ DBC_COLLECTION, /* Implication d'une collection*/ /** * Gestion de la commande 'DBC_SET_LAST_ACTIVE'. * * Le client connecté envoie un paquet de la forme suivante : * * [ Statut d'historique : DBC_SET_LAST_ACTIVE ] * [ ] * * Les traitements se réalisent dans : * - g_db_collection_set_last_active() pour la partie serveur. * - g_db_client_set_last_active() pour la partie client. * */ DBC_SET_LAST_ACTIVE, /* Définition du dernier actif */ DBC_COUNT } DBCommand; /** * Erreurs pouvant survenir... */ typedef enum _DBError { DBE_NONE, /* Succès d'une opération */ DBE_BAD_EXCHANGE, /* Incohérence des échanges */ DBE_WRONG_VERSION, /* Proto Client != Serveur */ DBE_SYS_ERROR, /* Erreur suite à un appel sys.*/ DBE_ARCHIVE_ERROR, /* Soucis du côté libarchive */ DBE_XML_VERSION_ERROR, /* Vieille archive présente */ DBE_DB_LOADING_ERROR, /* Erreur pendant le chargement*/ DBE_COUNT } DBError; /** * Gestion de la commande 'DBC_SAVE'. * * Le client connecté envoie un paquet de la forme suivante : * * [ Ordre de sauvegarde : DBC_SAVE ] * * Le serveur s'exécute et renvoie un bilan : * * [ Ordre de sauvegarde : DBC_SAVE ] * [ Statut d'exécution ; cf. DBError ] * * Les traitements se réalisent dans : * - g_db_client_save() pour la partie client en émission. * - g_cdb_archive_process() pour la partie serveur. * - g_db_client_update() pour la partie client en réception. * */ #endif /* _ANALYSIS_DB_PROTOCOL_H */