#ifndef _SESSION_H_ #define _SESSION_H_ #ifdef __cpluscplus extern "C" { #endif #include "packet.h" #include #include #include /* session direction definition */ #define SESSION_DIR_C2S 0x01 #define SESSION_DIR_S2C 0x02 #define SESSION_DIR_DOUBLE 0x03 enum session_type { SESSION_TYPE_CUSTOM, SESSION_TYPE_IPV4, SESSION_TYPE_IPV6, SESSION_TYPE_TCP, SESSION_TYPE_UDP, SESSION_TYPE_ICMPV4, SESSION_TYPE_ICMPV6, SESSION_TYPE_PPTP, SESSION_TYPE_L2TP, SESSION_TYPE_SOCKS, SESSION_TYPE_GTPU, SESSION_TYPE_HTTP, SESSION_TYPE_MAIL, SESSION_TYPE_DNS, SESSION_TYPE_OPENVPN, SESSION_TYPE_HTTP_PROXY, SESSION_TYPE_MAX, }; enum session_state { SESSION_STATE_INVALID = 0, SESSION_STATE_OPENING = 1 << 1, SESSION_STATE_ACTIVE = 1 << 2, SESSION_STATE_CLOSING = 1 << 3, SESSION_STATE_ALL = (1 << 1 | 1 << 2 | 1 << 3), }; struct stellar_session; struct stellar_session *session_derive(struct stellar_session *this_session, const char *session_name); void session_close(struct stellar_session *session); const char *session_get_name(struct stellar_session *session); uint8_t session_get_direction(struct stellar_session *session); // tcp or udp uint8_t session_get_current_direction(struct stellar_session *session); // tcp or udp uint64_t session_get_createtime_ms(struct stellar_session *session); uint64_t session_get_lasttime_ms(struct stellar_session *session); enum session_type session_get_type(struct stellar_session *session); struct stellar_packet *session_get_packet(struct stellar_session *session); enum session_state session_get_state(struct stellar_session *session); const char *session_get_payload(struct stellar_session *session); size_t session_get_payload_length(struct stellar_session *session); typedef void (*free_ex_data)(void *ex_data, void *cb_arg); static inline void directly_free(void *ex_data, void *cb_arg) { free(ex_data); } int session_get_ex_data_index(struct stellar_session *session, const char *key); void *session_get_ex_data(struct stellar_session *session, int idx); void session_set_ex_data(struct stellar_session *session, int idx, void *ex_data, free_ex_data *free_cb, void *cb_arg); void session_del_ex_data(struct stellar_session *session, int idx, free_ex_data *free_cb, void *cb_arg); void session_trigger_ex_data_event(stellar_session *session, int idx, enum session_state state); #ifdef __cpluscplus } #endif #endif