2022-08-25 18:13:46 +08:00
|
|
|
#ifndef _SESSION_H_
|
|
|
|
|
#define _SESSION_H_
|
2022-08-03 19:46:43 +08:00
|
|
|
|
|
|
|
|
#ifdef __cpluscplus
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
#endif
|
2022-07-06 23:18:13 +08:00
|
|
|
|
|
|
|
|
#include "packet.h"
|
|
|
|
|
#include <stdint.h>
|
2022-08-25 18:13:46 +08:00
|
|
|
#include <string.h>
|
|
|
|
|
#include <stdlib.h>
|
2022-07-06 23:18:13 +08:00
|
|
|
|
|
|
|
|
|
2022-08-25 18:13:46 +08:00
|
|
|
/* session direction definition */
|
|
|
|
|
#define SESSION_DIR_C2S 0x01
|
|
|
|
|
#define SESSION_DIR_S2C 0x02
|
|
|
|
|
#define SESSION_DIR_DOUBLE 0x03
|
|
|
|
|
|
|
|
|
|
enum session_type
|
2022-07-06 23:18:13 +08:00
|
|
|
{
|
|
|
|
|
SESSION_TYPE_CUSTOM,
|
2022-08-25 18:13:46 +08:00
|
|
|
SESSION_TYPE_IPV4,
|
|
|
|
|
SESSION_TYPE_IPV6,
|
2022-07-06 23:18:13 +08:00
|
|
|
SESSION_TYPE_TCP,
|
|
|
|
|
SESSION_TYPE_UDP,
|
2022-08-25 18:13:46 +08:00
|
|
|
SESSION_TYPE_ICMPV4,
|
|
|
|
|
SESSION_TYPE_ICMPV6,
|
2022-07-06 23:18:13 +08:00
|
|
|
SESSION_TYPE_PPTP,
|
|
|
|
|
SESSION_TYPE_L2TP,
|
|
|
|
|
SESSION_TYPE_SOCKS,
|
|
|
|
|
SESSION_TYPE_GTPU,
|
|
|
|
|
SESSION_TYPE_HTTP,
|
|
|
|
|
SESSION_TYPE_MAIL,
|
|
|
|
|
SESSION_TYPE_DNS,
|
2022-08-25 18:13:46 +08:00
|
|
|
SESSION_TYPE_OPENVPN,
|
|
|
|
|
SESSION_TYPE_HTTP_PROXY,
|
2022-07-06 23:18:13 +08:00
|
|
|
SESSION_TYPE_MAX,
|
|
|
|
|
};
|
|
|
|
|
|
2022-08-25 18:13:46 +08:00
|
|
|
//http decoder
|
|
|
|
|
enum http_stage
|
|
|
|
|
{
|
|
|
|
|
HTTP_STAGE_REQ_HDR=1<<1,
|
|
|
|
|
HTTP_STAGE_REQ_BODY_BEGIN=1<<2,
|
|
|
|
|
HTTP_STAGE_REQ_BODY_CONTINUE=1<<3,
|
|
|
|
|
HTTP_STAGE_REQ_BODY_END,
|
|
|
|
|
HTTP_STAGE_RESP_HDR,
|
|
|
|
|
HTTP_STAGE_RESP_BODY
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//dns decoder
|
|
|
|
|
enum dns_stage
|
2022-07-06 23:18:13 +08:00
|
|
|
{
|
2022-08-25 18:13:46 +08:00
|
|
|
DNS_STAGE_REQUEST,
|
|
|
|
|
DNS_STAGE_RESPONSE
|
2022-07-06 23:18:13 +08:00
|
|
|
};
|
|
|
|
|
|
2022-08-25 18:13:46 +08:00
|
|
|
enum session_state
|
|
|
|
|
{
|
|
|
|
|
SESSION_STATE_OPENING,
|
|
|
|
|
SESSION_STATE_ACTIVE,
|
|
|
|
|
SESSION_STATE_CLOSING
|
|
|
|
|
};
|
2022-07-06 23:18:13 +08:00
|
|
|
|
2022-08-25 18:13:46 +08:00
|
|
|
struct stellar_session;
|
|
|
|
|
struct stellar_session *session_derive(const struct stellar_session *this_session, const char *session_name);
|
|
|
|
|
void session_close(const struct stellar_session *session);
|
2022-08-03 19:46:43 +08:00
|
|
|
|
2022-08-25 18:13:46 +08:00
|
|
|
const char *session_get_name(const struct stellar_session *session);
|
|
|
|
|
|
|
|
|
|
uint8_t session_get_direction(const struct stellar_session *session); // tcp or udp
|
|
|
|
|
uint8_t session_get_current_direction(const struct stellar_session *session); // tcp or udp
|
|
|
|
|
|
|
|
|
|
uint64_t session_get_createtime_ms(const struct stellar_session *session);
|
|
|
|
|
uint64_t session_get_lasttime_ms(const struct stellar_session *session);
|
|
|
|
|
enum session_type session_get_type(const 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);
|
2022-08-03 19:46:43 +08:00
|
|
|
|
|
|
|
|
#ifdef __cpluscplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
2022-08-25 18:13:46 +08:00
|
|
|
#endif
|