84 lines
2.4 KiB
C
84 lines
2.4 KiB
C
#ifndef _SESSION_H_
|
|
#define _SESSION_H_
|
|
|
|
#ifdef __cpluscplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#include "packet.h"
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
|
|
/* 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
|