在程序中与事件相关的几个文件: event.h,event_queue.h,event_queue.c,event_wrapper.h,event_wrapper.c,和fsutil/sfeventq.h,/fsutil/sfeventq.c 1,event中主要定义了一个事件的数据结构
// 事件的数据结构 typedef struct _Event Event;
2,event_queue.h和event_queue.c中定义了
typedef struct s_SNORT_EVENTQ_USER rule_info);
在event_queue.c中还有三个静态函数 static int OrderPriority(void *event1, void *event2) //比较event1和event2的优先级(priority成员大小), if(event1->priority < event2->priority) return 1; static int OrderContentLength(void *event1, void *event2) //比较event1和event2的规则信息的长度(rule_info的长度),event1大的话就返回1。 static int LogSnortEvents(void *event, void *user) 3,event_wrapper.h,event_wrapper.c中定义两个函数
// 调用log.c 中的setEvent和detect.c中的CallLogFuncs设置生成的事件,并返回event.event_id u_int32_t GenerateSnortEvent(Packet * p, u_int32_t gen_id, u_int32_t sig_id, u_int32_t sig_rev, u_int32_t classification, u_int32_t priority, char * msg); // 和上个函数差不多,只是多了一个事件参考(event_ref)和时间(ref_sec)的设置,返回0或1 // 如果event_ref和ref_sec都不为空,则返回1 int LogTagData(Packet * p, u_int32_t gen_id, u_int32_t sig_id, u_int32_t sig_rev, u_int32_t classification, u_int32_t priority, u_int32_t event_ref, time_t ref_sec, char * msg);
4,Sfeventq.h和Sfenentq.c文件 sfeventq.h中定义了五个函数
void * sfeventq_event_alloc( void ); //清空sfeventq void sfeventq_reset( void ); //在sfeventq队列里添加一个event int sfeventq_add( void * event ); //根据action_func处理 int sfeventq_action( int ( * action_func)( void * event , void * user), void * user); //sfeventq的空间分配 int sfeventq_init( int max_nodes, int log_nodes, int event_size, int ( * sort)( void * , void * ));
相关文章: