labfy-investigation/include/core/evidence_integrity_task.h
2026-07-20 13:41:41 +02:00

80 lines
2.5 KiB
C

/******************************************************************************
* @file evidence_integrity_task.h
* @brief Tâche asynchrone de vérification d'intégrité d'une preuve.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_EVIDENCE_INTEGRITY_TASK_H
#define LABFY_INVESTIGATION_EVIDENCE_INTEGRITY_TASK_H
#include "core/background_task.h"
#include "core/task_manager.h"
#include <glib.h>
/**
* @brief Codes d'erreur propres à la tâche de vérification.
*/
typedef enum
{
EVIDENCE_INTEGRITY_TASK_ERROR_INVALID_ARGUMENT,
EVIDENCE_INTEGRITY_TASK_ERROR_VERIFY
} EvidenceIntegrityTaskError;
/**
* @brief Domaine d'erreur du module.
*/
#define EVIDENCE_INTEGRITY_TASK_ERROR \
evidence_integrity_task_error_quark()
/**
* @brief Paramètres nécessaires à une vérification d'intégrité.
*
* Toutes les chaînes sont copiées avant le démarrage du worker.
*/
typedef struct
{
const char *investigation_root_path;
const char *relative_path;
const char *expected_sha256;
} EvidenceIntegrityTaskRequest;
/**
* @brief Retourne le domaine d'erreur du module.
*/
GQuark evidence_integrity_task_error_quark(void);
/**
* @brief Crée, enregistre et démarre une tâche de vérification.
*
* Le résultat final est un EvidenceIntegrityVerificationResult emprunté
* à la BackgroundTask. Il reste valide tant que la tâche existe.
*
* En cas de succès :
*
* - TaskManager conserve une référence ;
* - le worker conserve une référence pendant son exécution ;
* - l'appelant reçoit sa référence initiale et doit la libérer avec
* background_task_unref().
*
* completion_data est transféré à BackgroundTask uniquement si le
* démarrage réussit. En cas d'échec, l'appelant en reste propriétaire.
*
* @param task_manager Gestionnaire recevant la tâche.
* @param request Paramètres de la vérification.
* @param completion_callback Callback final facultatif.
* @param completion_data Données du callback final.
* @param completion_data_destroy Destructeur de completion_data.
* @param error Emplacement facultatif recevant une erreur.
*
* @return Nouvelle tâche démarrée, ou NULL.
*/
BackgroundTask *evidence_integrity_task_start(
TaskManager *task_manager,
const EvidenceIntegrityTaskRequest *request,
BackgroundTaskCompletionCallback completion_callback,
gpointer completion_data,
GDestroyNotify completion_data_destroy,
GError **error
);
#endif