update session manager interface definition; define ex_data interface; delete the event design
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user