180 lines
5.9 KiB
C
180 lines
5.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdarg.h>
|
|
#include <unistd.h>
|
|
#include <ctype.h>
|
|
#include <ver.h>
|
|
#include <log.h>
|
|
|
|
/* Expressions régulières */
|
|
|
|
#ifdef LINUX
|
|
#include <regex.h>
|
|
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 <regexpr.h>
|
|
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 *);
|