#include #include #include #include #include #include #include #include /* Expressions régulières */ #ifdef LINUX #include typedef regex_t RegExp_t; #define RegExp_Size sizeof (regex_t) #define RegExp_Compile(s, e) regcomp (e, s, REG_NOSUB) == 0 #define RegExp_Match(s, e) regexec (e, s, 0, NULL, 0) != REG_NOMATCH #else #include typedef char RegExp_t; #define RegExp_Size 256 #define RegExp_Compile(s, e) compile (s, e, e + RegExp_Size) #define RegExp_Match(s, e) step (s, e) #endif extern char * strdup (const char *); /* Nom de la variable d'environnement définissant la valeur par défaut du module maître */ #define MASTER_MODULE_ENV "MASTER" #define LOG_FILE_MANAGER "liblog.so" /* Tous les heaps et data structures générés par la librairie LIBLOG sont préfixés */ #define LOG_PREFIX "LOG" /* Port de messages d'envoi des événements */ MSGT_Port * Send_Port; /* Elément du cache des modules */ typedef struct { char * Name; /* Nom du module (sert à la recherche) */ int Id; /* Identifiant numérique du type d'événement */ } LOGT_Module; /* Elément de la table de routage GDRT */ typedef struct { char * Name; /* Nom du type d'événement (base de recherche) */ int Terminal; /* Signifie que le type d'événement existe sans contexte */ int Id; /* Identifiant numérique du type d'événement */ LOGT_Gravite Gravite; /* Code gravité */ LOGT_RC RC; /* Code de retour servant au pilotage */ LOGT_Rooting Rooting; /* Type de routage par défaut */ NDT_Root * Next_Dim; /* Dimension suivante = pointeur sur un arbre */ } LOGT_GDRT_Evt; #define EVENT_NB_DIM 4 /* Elément d'une table de routage quelconque (hormis la GDRT) */ typedef struct { int Id; /* Identifiant numérique du type d'événement (sert à la recherche) */ LOGT_Rooting Rooting; /* Type de routage */ } LOGT_RTab_Evt; /* Définition du nom des différentes ressources de la librairie */ /* Heap dans lequel sera stockée la base de la librairie LIBLOG : Ce heap ne contient que la structure LOGT_Base qui permet de référencer les autres ressources système de la librairie. Ce heap ne sera constitué que d'une unique segment très petit. */ #define LOGD_BASE_HEAP_NAME "BASE" #define LOGD_BASE_HEAP_SEGMENT_SIZE 100 /* Heap dans lequel sont stockées les caches : Ces heaps contiennent à priori un grand nombre de valeurs. On les crée donc avec des segments de données suffisamment grands. */ #define LOGD_KMOD_SEGMENT_SIZE 50000 #define LOGD_KMOD_NAME "KMOD" #define LOGD_KFORMAT_SEGMENT_SIZE 1100000 #define LOGD_KFORMAT_NAME "KFORMAT" #define LOGD_GDRT_SEGMENT_SIZE 400000 #define LOGD_GDRT_NAME "GDRT" /* En règle générale, les tables de routage suivantes resteront vides : Leur heap sont donc créés avec des segments de données relativement petits. */ #define LOGD_EMPTY_RTAB_SEGMENT_SIZE 3000 #define LOGD_GMRT_NAME "GMRT" #define LOGD_LDRT_NAME "LDRT" #define LOGD_LMRT_NAME "LMRT" /* Heap dans lequel sera stockée les listes de tables de routage : Ces liste ne contiendront pas à priori un grand nombre de valeurs. Les heaps sous-jacents n'ont donc pas besoin besoin d'être très grands. */ #define LOGD_RTAB_LIST_SEGMENT_SIZE 100240 #define LOGD_CHANNEL_LIST_NAME "CHANNEL_REF" #define LOGD_LDRT_LIST_NAME "LDRT_REF" #define LOGD_LMRT_LIST_NAME "LMRT_REF" #define LOGD_URT_LIST_NAME "URT_REF" /* Elément d'une structure de compteurs d'événement */ typedef struct { char * Name; /* Nom du type d'événement */ int Total; /* Nombre total d'envois */ } LOGT_Event_Cpt; SMT_Heap * LOG_Base_Heap; /* Compteur d'ouverture de la librairie */ unsigned int LOG_Open_Counter = 0; /* Flux de sortie des messages d'erreur générés par la librairie */ FILE * LOG_stderr; /* Entêtes des fonctions privées */ NDT_Status LOG_Base_RTabList_Manager (va_list args_ptr); NDT_Status LOG_Base_ChannelList_Manager (va_list args_ptr); NDT_Status LOG_GDRT_Manager (va_list); NDT_Status LOG_GDRT_Dim_Manager (va_list); LOGT_Status LOG_GDRT_Event_Find (LOGT_GDRT_Evt **, char **, char *); LOGT_Status LOG_GDRT_Recursive_Find (char **, NDT_Root *, int, LOGT_GDRT_Evt **, char **); LOGT_Status LOG_GDRT_Event_Create (const char *, int, LOGT_Gravite, LOGT_RC, LOGT_Rooting, int *); LOGT_Status LOG_GDRT_Recursive_Select (int, NDT_Root *, LOGT_RTab *, LOGT_RuleClass, LOGT_Rule *, LOGT_Rooting, const char *, char *); NDT_Status LOG_KMOD_Manager (va_list); NDT_Status LOG_KFORMAT_Manager (va_list); NDT_Status LOG_KFORMAT_DataList_Manager (va_list); NDT_Status LOG_Channel_RTabList_Manager (va_list); NDT_Status LOG_Channel_Event_CptList_Manager (va_list); NDT_Status LOG_Channel_SubModuleList_Manager (va_list); NDT_Status LOG_Channel_TriggerList_Manager (va_list); LOGT_Status LOG_Channel_Rooting_Find (LOGT_Channel *, int, LOGT_Rooting *); NDT_Status LOG_RTab_Manager (va_list); #define DATA_ARG_LIST 1 #define DATA_STRING 2 LOGT_Status LOG_Event_Internal_Send (int, LOGT_Channel *, LOGT_RC *, char *, va_list, char *); LOGT_Status LOG_Event_Data_Get (int, char *, char **, size_t *, va_list *, char *); LOGT_Status LOG_Event_Data_Tag_Get (int, va_list *, char **, int *, char *); LOGT_Status LOG_Event_Data_Macro_Get (int, va_list *, char **, char *, char *); int LOG_NextString_Get (char ** ptr, char * result); char * LOG_RTType_Label_Get (LOGT_RTType); char * LOG_RC_Label_Get (LOGT_RC); char * LOG_Rooting_Label_Get (LOGT_Rooting); void LOG_Error_Print(void); static char * LOG_Name_Prefix (const char *);