This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
stellar-stellar-2022/sdk/include/session.h

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