I have been jailed by this script for almost one week. I refered all archives
available(including Onsip's Getting Started) and simply couldn't make the Call
Forwarding(at no answer) run properly.
In route[1], I used:
if (isflagset(28)){
avp_pushto("$ruri", "s:fwdnoanswer");
append_branch();
lookup("location");
xlog("L_INFO", "No answer, relaying after lookup. method <%rm> From
<%fu> To <%tu> Contact <%ct> r-uri <%ru>\n");
};
t_relay();
In failure _route[1], I used:
if (isflagset(27) && t_check_status("408")) {
setflag(28);
revert_uri();
route(1);
};
I think this is quite simple and straightforward,right? However, after I did revert_uri,
avp_pushto, append_branch and lookup, t_relay never could relay the INVITE message to the
new branch(I knew this because I checked with ngrep and found no any INVITE message for
the new branch).
Anyone can help? It's urgent! Thank you so much!
Jerry.
P.S., here is my original ser.cfg. Just for your reference:
=============================================================================
debug=3 # debug level (cmd line: -dddddddddd)
fork=no
log_stderror=yes # (cmd line: -E)
listen=xx.xx.xx.xx
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
port=5060
children=4
fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:heslo@localhost/ser"
alias="sip.xx.com"
alias="xx.xx.xx.xx"
alias="xx.com"
# ------------------ module loading ----------------------------------
loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/group.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
loadmodule "/usr/local/lib/ser/modules/avpops.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"
# ----------------- setting module-specific parameters ---------------
modparam("rr", "enable_full_lr", 1)
modparam("registrar", "nat_flag", 6)
modparam("nathelper", "natping_interval", 30) # Ping interval 30 s
modparam("nathelper", "ping_nated_only", 1) # Ping only clients
behind NAT
modparam("tm", "fr_timer", 20 )
modparam("tm", "fr_inv_timer", 30 )
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "db_url",
"mysql://ser:heslo@localhost/ser")
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "db_url",
"mysql://ser:heslo@localhost/ser")
modparam("uri_db", "db_url",
"mysql://ser:heslo@localhost/ser")
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1 )
modparam("acc",
"db_url","mysql://ser:heslo@localhost/ser")
modparam("acc", "db_flag", 1 )
modparam("avpops", "avp_url",
"mysql://ser:heslo@localhost/ser")
modparam("avpops", "avp_table", "usr_preferences")
# ------------------------- request routing logic -------------------
route
{
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
break;
};
if (msg:len >= max_len ) {
sl_send_reply("513", "Message too big");
break;
};
if (method == "REGISTER" || ! search("^Record-Route:")) {
fix_nated_contact(); # Rewrite contact with source IP of signalling
if (method == "INVITE")
{
fix_nated_sdp("1"); # Add direction=active to SDP
};
force_rport(); # Add rport parameter to topmost Via
setflag(6); # Mark as NATed
};
setflag(1); # used for acc.
if (method=="INVITE")
log(1, "INVITE message received\n");
if (method=="ACK")
log(1, "ACK message received\n");
if (method=="BYE")
log(1, "BYE message received\n");
if (method=="CANCEL")
log(1, "CANCEL message received\n");
if (!method=="REGISTER")
record_route();
if (loose_route()) {
route(1);
break;
};
if (uri!=myself) {
route(1);
break;
};
if (method=="REGISTER") {
save("location");
break;
};
if (method=="INVITE") {
if (avp_db_load("$ruri/username", "s:fwdnoanswer")) {
setflag(27);
log(1, "dbg: FWDBUSY/FWDNOANSWER recorded!\n");
lookup("location");
};
};
t_on_failure("1");
route(1);
}
route[1]
{
if (isflagset(6))
force_rtp_proxy();
if (isflagset(28)){
avp_pushto("$ruri", "s:fwdnoanswer");
append_branch();
lookup("location");
xlog("L_INFO", "No answer, relaying after lookup. method <%rm> From
<%fu> To <%tu> Contact <%ct> r-uri <%ru>\n");
};
t_relay();
}
failure_route[1] {
if (t_check_status("487")) {
break;
};
if (isflagset(27) && t_check_status("408")) {
revert_uri();
setflag(28);
route(1);
};
}