#pragma once #include "packet.h" #include struct session; struct session_event; enum session_type { SESSION_TYPE_CUSTOM, SESSION_TYPE_IP, SESSION_TYPE_TCP, SESSION_TYPE_UDP, SESSION_TYPE_ICMP, SESSION_TYPE_PPTP, SESSION_TYPE_L2TP, SESSION_TYPE_SOCKS, SESSION_TYPE_GTPU, SESSION_TYPE_HTTP, SESSION_TYPE_MAIL, SESSION_TYPE_DNS, SESSION_TYPE_MAX, }; enum session_event_type { SESSION_EVENT_OPENING=0x01, SESSION_EVENT_RAW_PKT=0x02, SESSION_EVENT_ORDERED_PKT=0x04, SESSION_EVENT_META=0x08, SESSION_EVENT_CLOSING=0x10, }; typedef int (*fn_session_event_callback)(const struct session *s, int what, struct packet *p, const char *payload, uint32_t len, void **pme); typedef int (*fn_session_timer)(const struct session *s, void **pme); void session_manager_trigger_event(struct session *s, session_event_type event, void *event_info); struct session_event *session_manager_commit(struct packet *p); struct custom_session_event; struct custom_session_event *session_manager_custom_session_event_register(const char *event_name, int available_event); struct session *session_manager_custom_session_derive(const struct session *cur_session, struct custom_session_event *event); struct session_event *session_manager_fetch_event();