Hi Raul
Here it is,
# ----------- global configuration
parameters ------------------------
debug=3
fork=yes
log_stderror=yes
children=1
disable_tcp=no
log_facility=LOG_LOCAL0
# ------------------ module loading
----------------------------------
#set module path
mpath="/usr/lib/kamailio/modules/"
loadmodule "sl.so"
loadmodule "tm.so"
modparam("tm",
"fr_timer", 5)
modparam("tm",
"fr_inv_timer_avp", "$avp(i:704)")
loadmodule "rr.so"
loadmodule "usrloc.so"
loadmodule "maxfwd.so"
loadmodule "textops.so"
loadmodule "xlog.so"
loadmodule "avpops.so"
loadmodule "registrar.so"
loadmodule "uri_db.so"
loadmodule "db_mysql.so"
loadmodule "siputils.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "mi_fifo.so"
loadmodule "acc.so"
loadmodule "pv.so"
modparam("mi_fifo",
"fifo_name", "/tmp/openser_fifo")
loadmodule "lcr.so"
modparam("lcr", "db_url",
"mysql://root:mypass@localhost/openser")
modparam("lcr", "gw_uri_avp",
"$avp(i:709)")
modparam("lcr", "ruri_user_avp",
"$avp(i:500)")
modparam("lcr", "rpid_avp",
"$avp(i:302)")
modparam("lcr", "flags_avp",
"$avp(i:712)")
# ------------------------- request
routing logic -------------------
route{
if
(!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too
Many Hops");
exit;
}
route(4);
if
(has_totag()) {
if
(loose_route()) {
if
(is_method("BYE")) {
setflag(1);
setflag(3);
}
route(1);
}
else {
if
(is_method("SUBSCRIBE") && uri == myself) {
route(2);
exit;
}
if
( is_method("ACK") ) {
if
( t_check_trans() ) {
t_relay();
exit;
}
else {
exit;
}
}
sl_send_reply("404","Not
here");
}
exit;
}
if
(is_method("CANCEL"))
{
if
(t_check_trans())
t_relay();
exit;
}
t_check_trans();
route(3);
if
(!is_method("REGISTER|MESSAGE"))
record_route();
if
(is_method("INVITE")) {
setflag(1);
}
if
(!uri==myself)
if(
is_method("PUBLISH|SUBSCRIBE"))
route(2);
if
(is_method("REGISTER"))
{
if
(!save("location"))
sl_reply_error();
exit;
}
if
($rU==NULL) {
#
request with no Username in RURI
sl_send_reply("484","Address
Incomplete");
exit;
}
if
(!lookup("location")) {
switch
($retcode) {
case
-1:
case
-3:
t_newtran();
t_reply("404",
"Not Found");
exit;
case
-2:
sl_send_reply("405",
"Method Not Allowed");
exit;
}
}
setflag(2);
route(1);
}
route[1] {
if
(!t_relay()) {
sl_reply_error();
};
exit;
}
route[2] {
if
(!load_gws()) {
sl_send_reply("503",
"Unable to load gateways");
exit;
}
else {
$var(i)
= 0;
while(is_avp_set("$(avp(i:709)[$var(i)])"))
{
xlog("L_INFO",
"loading gw_uri_avp[$var(i)]='$(avp(i:709)[$var(i)])'\n");
$var(i)
= $var(i) + 1;
};
if(is_avp_set("$avp(i:709)"))
{
xlog("L_INFO",
"trying gateway '$avp(i:709)'\n");
}
else {
xlog("L_INFO", "no available gateways ...\n");
};
if
(next_gw()) {
xlog("L_INFO",
"ruri_user_avp='$avp(i:500)'\n");
t_on_failure("2");
route(1);
}
else {
sl_send_reply("503",
"No available gateways");
exit;
};
};
exit;
}
failure_route[2] {
xlog("L_INFO",
"entering failure_route[2] for reply code '$T_reply_code'\n");
if
(t_check_status("408|50[34]")) {
if(is_avp_set("$avp(i:709)"))
{
xlog("L_INFO",
"trying next gateway '$avp(i:709)'\n");
}
else {
xlog("L_INFO",
"no more gateways to try ...\n");
};
if
(next_gw()) {
t_on_failure("2");
route(1);
}
else {
t_reply("503",
"No gateways");
exit;
};
exit;
};
}
Rafael Moreno
Matrix Telecom
www.matrixtelecom.net.br / Phone: 55.11.3323-9207