#ifndef _SESSION_MANAGER_H #define _SESSION_MANAGER_H #ifdef __cpluscplus extern "C" { #endif #include "session.h" // #define SESSION_MANAGER_LOG_ERROR(format, ...) void(0) #ifndef SESSION_MANAGER_LOG_ERROR #define SESSION_MANAGER_LOG_ERROR(format, ...) \ fprintf(stderr, "ERROR (session manager), " format "\n", ##__VA_ARGS__); #endif // #define SESSION_MANAGER_LOG_DEBUG(format, ...) void(0) #ifndef SESSION_MANAGER_LOG_DEBUG #define SESSION_MANAGER_LOG_DEBUG(format, ...) \ fprintf(stderr, "DEBUG (session manager), " format "\n", ##__VA_ARGS__); #endif // create and destroy struct session_manager; struct session_manager *session_manager_create(uint64_t max_session_num); void session_manager_destroy(struct session_manager *mgr); // config typedef void (*session_event_cb)(struct session *sess, uint32_t event, void *arg); void session_manager_set_session_eventcb(struct session_manager *mgr, session_event_cb cb, void *arg); void session_manager_set_packet_timeout(struct session_manager *mgr, uint64_t timeout_ms); void session_manager_set_closing_timeout(struct session_manager *mgr, uint64_t timeout_ms); // core functions struct session *session_manager_find_session(struct session_manager *mgr, const struct packet *pkt); void session_manager_dispatch(struct session_manager *mgr); // for debug uint64_t session_manager_get_tcp_opening_sess_num(struct session_manager *mgr); uint64_t session_manager_get_tcp_closing_sess_num(struct session_manager *mgr); uint64_t session_manager_get_tcp_active_sess_num(struct session_manager *mgr); uint64_t session_manager_get_udp_opening_sess_num(struct session_manager *mgr); uint64_t session_manager_get_udp_closing_sess_num(struct session_manager *mgr); uint64_t session_manager_get_udp_active_sess_num(struct session_manager *mgr); #ifdef __cpluscplus } #endif #endif