#ifndef _RTPENGINE_HASH_H #define _RTPENGINE_HASH_H #include "../../str.h" #include "../../locking.h" /* table entry */ struct rtpengine_hash_entry { str callid; // call callid str viabranch; // call viabranch struct rtpp_node *node; // call selected node unsigned int tout; // call timeout struct rtpengine_hash_entry *next; // call next }; /* table */ struct rtpengine_hash_table { struct rtpengine_hash_entry **row_entry_list; // vector of size pointers to entry gen_lock_t **row_locks; // vector of size pointers to locks unsigned int *row_totals; // vector of size numbers of entries in the hashtable rows unsigned int size; // hash table size }; int rtpengine_hash_table_init(int size); int rtpengine_hash_table_destroy(); int rtpengine_hash_table_insert(str callid, str viabranch, struct rtpengine_hash_entry *value); int rtpengine_hash_table_remove(str callid, str viabranch, enum rtpe_operation); struct rtpp_node *rtpengine_hash_table_lookup(str callid, str viabranch, enum rtpe_operation); void rtpengine_hash_table_print(); unsigned int rtpengine_hash_table_total(); void rtpengine_hash_table_free_entry(struct rtpengine_hash_entry *entry); void rtpengine_hash_table_free_row_entry_list(struct rtpengine_hash_entry *row_entry_list); int rtpengine_hash_table_sanity_checks(); #endif