00001
00056 #ifndef I_CSCF_SCSCF_LIST_H
00057 #define I_CSCF_SCSCF_LIST_H
00058
00059 #include "../../sr_module.h"
00060 #include "mod.h"
00061
00063 typedef struct _scscf_entry {
00064 str scscf_name;
00065 int score;
00067 struct _scscf_entry *next;
00068 } scscf_entry;
00069
00071 typedef struct _scscf_list {
00072 str call_id;
00073 scscf_entry *list;
00075 struct _scscf_list *next;
00076 struct _scscf_list *prev;
00077 } scscf_list;
00078
00080 typedef struct {
00081 scscf_list *head;
00082 scscf_list *tail;
00083 gen_lock_t *lock;
00084 } i_hash_slot;
00085
00086
00088 typedef struct _scscf_capabilities {
00089 int id_s_cscf;
00090 str scscf_name;
00091 int *capabilities;
00092 int cnt;
00093 } scscf_capabilities;
00094
00095
00096 int I_get_capabilities();
00097
00098 scscf_entry* I_get_capab_ordered(str scscf_name,int *m,int mcnt,int *o,int ocnt, str *p, int pcnt,int orig);
00099
00100
00101 inline unsigned int get_call_id_hash(str callid,int hash_size);
00102
00103 int i_hash_table_init(int hash_size);
00104
00105 void i_hash_table_destroy();
00106
00107 inline void i_lock(unsigned int hash);
00108 inline void i_unlock(unsigned int hash);
00109
00110 scscf_entry* new_scscf_entry(str name, int score, int orig);
00111
00112 scscf_list* new_scscf_list(str callid,scscf_entry *sl);
00113 int add_scscf_list(str call_id,scscf_entry *sl);
00114 int is_scscf_list(str call_id);
00115 str take_scscf_entry(str call_id);
00116 void del_scscf_list(str call_id);
00117 void free_scscf_list(scscf_list *sl);
00118 void print_scscf_list(int log_level);
00119
00120
00121 int I_trans_in_processing(struct sip_msg* msg, char* str1, char* str2);
00122 int I_scscf_select(struct sip_msg* msg, char* str1, char* str2);
00123 int I_scscf_drop(struct sip_msg* msg, char* str1, char* str2);
00124
00125 #endif