update session manager interface definition; define ex_data interface; delete the event design

This commit is contained in:
liuxueli
2022-08-25 18:13:46 +08:00
parent 9cfa120ae7
commit e3ea4d0729
17 changed files with 623 additions and 172 deletions

View File

@@ -1,5 +1,5 @@
#ifndef _SESSION_H
#define _SESSION_H
#ifndef _SESSION_H_
#define _SESSION_H_
#ifdef __cpluscplus
extern "C"
@@ -7,18 +7,25 @@ extern "C"
#endif
#include "packet.h"
#include "event.h"
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
struct stellar_session;
enum stellar_session_type
/* 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_IP,
SESSION_TYPE_IPV4,
SESSION_TYPE_IPV6,
SESSION_TYPE_TCP,
SESSION_TYPE_UDP,
SESSION_TYPE_ICMP,
SESSION_TYPE_ICMPV4,
SESSION_TYPE_ICMPV6,
SESSION_TYPE_PPTP,
SESSION_TYPE_L2TP,
SESSION_TYPE_SOCKS,
@@ -26,29 +33,67 @@ enum stellar_session_type
SESSION_TYPE_HTTP,
SESSION_TYPE_MAIL,
SESSION_TYPE_DNS,
SESSION_TYPE_OPENVPN,
SESSION_TYPE_HTTP_PROXY,
SESSION_TYPE_MAX,
};
enum session_event_type
//http decoder
enum http_stage
{
SESSION_EVENT_UNKNOWN = (0x00),
SESSION_EVENT_OPENING = (0x01 << 1),
SESSION_EVENT_RAWPKT = (0x01 << 2),
SESSION_EVENT_ORDPKT = (0x01 << 3),
SESSION_EVENT_META = (0x01 << 4),
SESSION_EVENT_CLOSING = (0x01 << 5),
SESSION_EVENT_ALL = (0x01 << 1 | 0x01 << 2 | 0x01 << 3 | 0x01 << 4 | 0x01 << 5),
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
};
struct stellar_session_event_extras;
//dns decoder
enum dns_stage
{
DNS_STAGE_REQUEST,
DNS_STAGE_RESPONSE
};
void session_manager_trigger_event(struct stellar_session *s, enum session_event_type type, struct stellar_session_event_extras *info);
struct stellar_session *session_manager_session_derive(const struct stellar_session *this_session, const char *session_name);
enum session_state
{
SESSION_STATE_OPENING,
SESSION_STATE_ACTIVE,
SESSION_STATE_CLOSING
};
const char *stellar_session_get_name(const struct stellar_session *session);
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);
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);
#ifdef __cpluscplus
}
#endif
#endif
#endif