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
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