#pragma once
#include "packet.h"
#include "event.h"
#include <stdint.h>
struct stellar_session;
enum stellar_session_type
{
SESSION_TYPE_CUSTOM,
SESSION_TYPE_IP,
SESSION_TYPE_TCP,
SESSION_TYPE_UDP,
SESSION_TYPE_ICMP,
SESSION_TYPE_PPTP,
SESSION_TYPE_L2TP,
SESSION_TYPE_SOCKS,
SESSION_TYPE_GTPU,
SESSION_TYPE_HTTP,
SESSION_TYPE_MAIL,
SESSION_TYPE_DNS,
SESSION_TYPE_MAX,
};
enum stellar_session_event_type
SESSION_EVENT_OPENING=0x01,
SESSION_EVENT_RAW_PKT=0x02,
SESSION_EVENT_ORDERED_PKT=0x04,
SESSION_EVENT_META=0x08,
SESSION_EVENT_CLOSING=0x10,
struct stellar_session_event_extras;
typedef int (*fn_session_event_callback)(const struct stellar_session *s, int what, struct stellar_packet *p, const char *payload, uint32_t len, void **pme);
void session_manager_trigger_event(struct stellar_session *s,
stellar_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 *new_session_type_name);