modules_k/dispatcher/dispatch.h

Go to the documentation of this file.
00001 
00040 #ifndef _DISPATCH_H_
00041 #define _DISPATCH_H_
00042 
00043 #include <stdio.h>
00044 #include "../../pvar.h"
00045 #include "../../parser/msg_parser.h"
00046 #include "../../modules/tm/tm_load.h"
00047 
00048 
00049 #define DS_HASH_USER_ONLY       1  
00050 #define DS_FAILOVER_ON          2  
00052 #define DS_INACTIVE_DST         1  
00053 #define DS_TRYING_DST           2  
00054 #define DS_DISABLED_DST         4  
00055 #define DS_PROBING_DST          8  
00056 #define DS_STATES_ALL           15  
00058 #define ds_skip_dst(flags)      ((flags) & (DS_INACTIVE_DST|DS_DISABLED_DST))
00059 
00060 #define DS_PROBE_NONE           0
00061 #define DS_PROBE_ALL            1
00062 #define DS_PROBE_INACTIVE       2
00063 
00064 extern str ds_db_url;
00065 extern str ds_table_name;
00066 extern str ds_set_id_col;
00067 extern str ds_dest_uri_col;
00068 extern str ds_dest_flags_col;
00069 extern str ds_dest_priority_col;
00070 extern str ds_dest_attrs_col;
00071 
00072 extern int ds_flags; 
00073 extern int ds_use_default;
00074 
00075 extern int_str dst_avp_name;
00076 extern unsigned short dst_avp_type;
00077 extern int_str grp_avp_name;
00078 extern unsigned short grp_avp_type;
00079 extern int_str cnt_avp_name;
00080 extern unsigned short cnt_avp_type;
00081 extern int_str dstid_avp_name;
00082 extern unsigned short dstid_avp_type;
00083 extern int_str attrs_avp_name;
00084 extern unsigned short attrs_avp_type;
00085 
00086 extern pv_elem_t * hash_param_model;
00087 
00088 extern str ds_setid_pvname;
00089 extern pv_spec_t ds_setid_pv;
00090 
00091 /* Structure containing pointers to TM-functions */
00092 extern struct tm_binds tmb;
00093 extern str ds_ping_method;
00094 extern str ds_ping_from;
00095 extern int probing_threshhold; 
00097 extern int ds_probing_mode;
00098 extern str ds_outbound_proxy;
00099 
00100 int init_data(void);
00101 int init_ds_db(void);
00102 int ds_load_list(char *lfile);
00103 int ds_connect_db(void);
00104 void ds_disconnect_db(void);
00105 int ds_load_db(void);
00106 int ds_destroy_list(void);
00107 int ds_select_dst(struct sip_msg *msg, int set, int alg, int mode);
00108 int ds_next_dst(struct sip_msg *msg, int mode);
00109 int ds_update_state(sip_msg_t *msg, int group, str *address, int state);
00110 int ds_reinit_state(int group, str *address, int state);
00111 int ds_mark_dst(struct sip_msg *msg, int mode);
00112 int ds_print_list(FILE *fout);
00113 int ds_print_mi_list(struct mi_node* rpl);
00114 int ds_print_sets(void);
00115 
00116 int ds_load_unset(struct sip_msg *msg);
00117 int ds_load_update(struct sip_msg *msg);
00118 
00119 int ds_hash_load_init(unsigned int htsize, int expire, int initexpire);
00120 int ds_hash_load_destroy(void);
00121 
00122 int ds_is_from_list(struct sip_msg *_m, int group);
00126 void ds_check_timer(unsigned int ticks, void* param);
00127 
00128 
00132 void ds_ht_timer(unsigned int ticks, void *param);
00133 
00137 int ds_ping_check_rplcode(int);
00138 
00139 typedef struct _ds_attrs
00140 {
00141         str body;
00142         str duid;
00143         int maxload;
00144         int weight;
00145 } ds_attrs_t;
00146 
00147 typedef struct _ds_dest
00148 {
00149         str uri;
00150         int flags;
00151         int priority;
00152         int dload;
00153         ds_attrs_t attrs;
00154         struct ip_addr ip_address;      
00155         unsigned short int port;        
00156         int failure_count;
00157         struct _ds_dest *next;
00158 } ds_dest_t;
00159 
00160 typedef struct _ds_set
00161 {
00162         int id;                         
00163         int nr;                         
00164         int last;                       
00165         int wlast;                      
00166         ds_dest_t *dlist;
00167         unsigned int wlist[100];
00168         struct _ds_set *next;
00169 } ds_set_t;
00170 
00171 ds_set_t *ds_get_list(void);
00172 int ds_get_list_nr(void);
00173 #endif
00174