#ifndef _SESSION_TABLE_H #define _SESSION_TABLE_H #ifdef __cpluscplus extern "C" { #endif #include #include #include "tuple.h" typedef void fn_free_cb(void *args); struct session_table; struct session_table *session_table_create(); void session_table_destory(struct session_table *table); void session_table_reset(struct session_table *table); uint64_t session_table_count(struct session_table *table); // addr : deep copy // value : shallow copy (malloc by user, free by free_cb) // Note : addr must be initialized by memset(0) before use !!! // return 0 : suceess // return -1 : key exists int session_table_insert(struct session_table *table, uint64_t id, const struct four_tuple *addr, void *value, const fn_free_cb *free_cb); // return 0 : success // return -1 : key not exists int session_table_delete_by_id(struct session_table *table, uint64_t id); int session_table_delete_by_addr(struct session_table *table, const struct four_tuple *addr); // return NULL : key not exists // return value : success void *session_table_search_by_id(struct session_table *table, uint64_t id); void *session_table_search_by_addr(struct session_table *table, const struct four_tuple *addr); #ifdef __cpluscplus } #endif #endif