#pragma once

#include "utils.h"
#include "stellar.h"

#ifdef __cplusplus
extern "C"
{
#endif

typedef void stellar_exdata_free(int idx, void *ex_ptr, void *arg);


inline static void stellar_exdata_free_default(int idx __unused, void *ex_ptr, void *arg __unused)
{
	if(ex_ptr)FREE(ex_ptr);
}

int stellar_exdata_new_index(struct stellar *st, const char *name, stellar_exdata_free *free_func,void *arg); 

//packet exdata api
int packet_exdata_set(struct packet *pkt, int idx, void *ex_ptr);
void *packet_exdata_get(struct packet *pkt, int idx);

//session exdata api
int session_exdata_set(struct session *sess, int idx, void *ex_ptr);
void *session_exdata_get(struct session *sess, int idx);

#ifdef __cplusplus
}
#endif