#include #include "plugin_manager_util.h" /****************************************************************************** * Malloc ******************************************************************************/ char *safe_dup(const char *str) { if (str == NULL) { return NULL; } char *dup = safe_alloc(char, strlen(str) + 1); memcpy(dup, str, strlen(str)); return dup; } /****************************************************************************** * Session Event Type ******************************************************************************/ struct event_type_map { const char *type_str; enum session_event_type type_int; }; static struct event_type_map evtype_map[] = { {"SESSION_EVENT_UNKNOWN", SESSION_EVENT_UNKNOWN}, {"SESSION_EVENT_OPENING", SESSION_EVENT_OPENING}, {"SESSION_EVENT_RAWPKT", SESSION_EVENT_RAWPKT}, {"SESSION_EVENT_ORDPKT", SESSION_EVENT_ORDPKT}, {"SESSION_EVENT_META", SESSION_EVENT_META}, {"SESSION_EVENT_CLOSING", SESSION_EVENT_CLOSING}, {"SESSION_EVENT_ALL", SESSION_EVENT_ALL}, }; enum session_event_type session_event_type_str2int(const char *evtype_str) { enum session_event_type evtype_int = SESSION_EVENT_UNKNOWN; int num = sizeof(evtype_map) / sizeof(evtype_map[0]); char *buffer = safe_dup(evtype_str); char *token = strtok(buffer, "|"); while (token) { for (int i = 0; i < num; i++) { if (strcmp(token, evtype_map[i].type_str) == 0) { evtype_int = (enum session_event_type)(evtype_int | evtype_map[i].type_int); } } token = strtok(NULL, "|"); } safe_free(buffer); return evtype_int; } void session_event_type_int2str(enum session_event_type evtype_int, char *buffer, int size) { int used = 0; int num = sizeof(evtype_map) / sizeof(evtype_map[0]); if (evtype_int == SESSION_EVENT_UNKNOWN) { snprintf(buffer, size, "%s", "SESSION_EVENT_UNKNOWN"); return; } if (evtype_int == SESSION_EVENT_ALL) { snprintf(buffer, size, "%s", "SESSION_EVENT_ALL"); return; } for (int i = 0; i < num; i++) { if (evtype_map[i].type_int & evtype_int) { if (evtype_map[i].type_int == SESSION_EVENT_ALL && evtype_int != SESSION_EVENT_ALL) { continue; } used += snprintf(buffer + used, size - used, "%s|", evtype_map[i].type_str); } } if (used) { buffer[used - 1] = '\0'; } }