liblog-bdm/lib/liblog.h

180 lines
5.9 KiB
C
Raw Normal View History

2000-07-31 15:15:35 +02:00
#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<6C>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<6D>tre */
#define MASTER_MODULE_ENV "MASTER"
#define LOG_FILE_MANAGER "liblog.so"
/* Tous les heaps et data structures g<>n<EFBFBD>r<EFBFBD>s par la librairie LIBLOG sont pr<70>fix<69>s */
#define LOG_PREFIX "LOG"
/* Port de messages d'envoi des <20>v<EFBFBD>nements */
MSGT_Port * Send_Port;
/* El<45>ment du cache des modules */
typedef struct {
char * Name; /* Nom du module (sert <20> la recherche) */
int Id; /* Identifiant num<75>rique du type d'<27>v<EFBFBD>nement */
} LOGT_Module;
/* El<45>ment de la table de routage GDRT */
typedef struct {
char * Name; /* Nom du type d'<27>v<EFBFBD>nement (base de recherche) */
int Terminal; /* Signifie que le type d'<27>v<EFBFBD>nement existe sans contexte */
int Id; /* Identifiant num<75>rique du type d'<27>v<EFBFBD>nement */
LOGT_Gravite Gravite; /* Code gravit<69> */
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<45>ment d'une table de routage quelconque (hormis la GDRT) */
typedef struct {
int Id; /* Identifiant num<75>rique du type d'<27>v<EFBFBD>nement (sert <20> la recherche) */
LOGT_Rooting Rooting; /* Type de routage */
} LOGT_RTab_Evt;
/* D<>finition du nom des diff<66>rentes ressources de la librairie */
/*
Heap dans lequel sera stock<EFBFBD>e la base de la librairie LIBLOG :
Ce heap ne contient que la structure LOGT_Base qui permet de r<EFBFBD>f<EFBFBD>rencer
les autres ressources syst<EFBFBD>me de la librairie.
Ce heap ne sera constitu<EFBFBD> que d'une unique segment tr<EFBFBD>s petit.
*/
#define LOGD_BASE_HEAP_NAME "BASE"
#define LOGD_BASE_HEAP_SEGMENT_SIZE 100
/*
Heap dans lequel sont stock<EFBFBD>es les caches :
Ces heaps contiennent <EFBFBD> priori un grand nombre de valeurs.
On les cr<EFBFBD>e donc avec des segments de donn<EFBFBD>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<EFBFBD>gle g<EFBFBD>n<EFBFBD>rale, les tables de routage suivantes resteront vides :
Leur heap sont donc cr<EFBFBD><EFBFBD>s avec des segments de donn<EFBFBD>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<EFBFBD>e les listes de tables de routage :
Ces liste ne contiendront pas <EFBFBD> priori un grand nombre de valeurs.
Les heaps sous-jacents n'ont donc pas besoin besoin d'<EFBFBD>tre tr<EFBFBD>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<45>ment d'une structure de compteurs d'<27>v<EFBFBD>nement */
typedef struct {
char * Name; /* Nom du type d'<27>v<EFBFBD>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<EFBFBD>r<EFBFBD>s par la librairie */
FILE * LOG_stderr;
/* Ent<6E>tes des fonctions priv<69>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 *);