Hi Bodgan,
Superb it works like a charm, thanks a lot ;-)
I've another question about openser accouting, a regular call log is
composed by 3 db lines (INVITE, ACK, BYE). I remark that the timestamps
between the INVITE and ACK lines are the same, I think I've miss
something in my configuration anyone have an idea about this ?
Regards,
Tanguy Bouzéloc
Init-Sys
Bogdan-Andrei Iancu a écrit :
Hi Tanguy,
for the statefully processed requests, use the
"failed_transaction_flag" to enable acc for non-2xx. For statelessly
requests, you will have to use acc_db_request().
regards,
bogdan
Tanguy Bouzéloc wrote:
Hello,
I've some issues with my mysql accounting, I can only log successful
calls in the acc table and I've no informations about missed calls. In
mysql accounting I've only sip 200 ok and no errors. I've not this
behavior in my syslog.
It's very important for us for evaluate the performance of our providers
and we can only do it with a database accouting.
For example, If I pass a call and I let it ring til operator timeout,
I've no trace of this call in the accounting table.
I've also another question, the lcr and gw tables have very small fixed
limits (256 for lcr and 32 for gw), since we have much more gateways and
sdas I've updated theses limits to a value which fit our needs, do you
thinks it can be a problem ?
Thanks in advance,
Tanguy Bouzéloc
Init-Sys
------------------------------------------------------------------------
# ----------- global configuration parameters ------------------------
#debug=9
fork=yes
check_via=no
dns=no
rev_dns=no
port=5060
children=4
sip_warning=0
# ------------------ module loading ----------------------------------
loadmodule "/usr/lib/openser/modules/mysql.so"
loadmodule "/usr/lib/openser/modules/nathelper.so"
loadmodule "/usr/lib/openser/modules/sl.so"
loadmodule "/usr/lib/openser/modules/tm.so"
loadmodule "/usr/lib/openser/modules/rr.so"
loadmodule "/usr/lib/openser/modules/maxfwd.so"
loadmodule "/usr/lib/openser/modules/lcr.so"
loadmodule "/usr/lib/openser/modules/acc.so"
loadmodule "/usr/lib/openser/modules/xlog.so"
loadmodule "/usr/lib/openser/modules/textops.so"
loadmodule "/usr/lib/openser/modules/permissions.so"
# ----------------- setting module-specific parameters ---------------
modparam("lcr", "db_url", "mysql://???")
modparam("lcr", "db_mode", 0)
modparam("rr","enable_full_lr",1)
modparam("acc", "db_url", "mysql://???")
modparam("acc", "db_flag", 1)
modparam("acc", "db_localtime", 1)
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1 )
modparam("permissions", "db_url", "mysql://???")
route {
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
return;
};
if (msg:len >= max_len ) {
sl_send_reply("513", "Message too big");
return;
};
if (!is_method("REGISTER")) {
record_route();
};
if (is_method("BYE") || is_method("CANCEL")) {
xlog("L_NOTICE", "End call($ci | $Ri): $fU -> $tU");
if (is_method("BYE"))
setflag(1);
unforce_rtp_proxy();
};
if (loose_route()) {
route(1);
return;
};
if (!allow_trusted()) {
xlog("L_WARN", "Host not trusted ($fu/$si/$rP)");
sl_send_reply("403", "Forbidden");
exit;
};
if (!load_gws()) {
sl_send_reply("500", "Internal server error, unable to load
gateways");
return;
}
if (!next_gw()) {
xlog("L_ERR", "No gw found ($ru/$fu)");
sl_send_reply("503", "Service not available, no gateways found");
return;
};
t_on_failure("2");
route(1);
}
route[1] {
setflag(1);
if (is_method("INVITE") || is_method("ACK")){
if (is_method("INVITE"))
xlog("L_NOTICE", "Incoming call($ci | $Ri): $fU -> $tU");
if (!search("^Content-Length:[ ]*0"))
force_rtp_proxy("foc");
# if(src_ip == 217.15.85.178) {
# subst('/^From:.*<sip:(.*)@(.*)$/From: "\1" <sip:\1/@\2');
# }
t_on_reply("1");
};
if (!t_relay()) {
sl_reply_error();
};
}
onreply_route[1] {
setflag(1);
if (status=~"[12][0-9][0-9]"){
if (!search("^Content-Length:[ ]*0"))
force_rtp_proxy("foc");
};
}
failure_route[2] {
if (t_check_status("400")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 400 Bad
Request");
} else if (t_check_status("401")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 401
Unauthorized");
} else if (t_check_status("403")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 403
Forbidden");
} else if (t_check_status("404")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 404 Not
Found");
} else if (t_check_status("405")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 405 Method Not
Allowed");
} else if (t_check_status("406")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 406 Not
Acceptable");
} else if (t_check_status("407")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 407 Proxy
Authentication Required");
} else if (t_check_status("408")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 408 Request
Timeout");
} else if (t_check_status("410")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 410
Gone");
} else if (t_check_status("413")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 413 Request
Entity Too Large");
} else if (t_check_status("414")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 414 Request-URI
Too Long");
} else if (t_check_status("415")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 415 Unsupported
Media Type");
} else if (t_check_status("416")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 416 Unsupported
URI Scheme");
} else if (t_check_status("420")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 420 Bad
Extension");
} else if (t_check_status("421")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 421 Extension
Required");
} else if (t_check_status("423")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 423 Interval Too
Brief");
} else if (t_check_status("480")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 480 Temporarily
Unavailable");
} else if (t_check_status("481")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 481
Call/Transaction Does Not Exist");
} else if (t_check_status("482")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 482 Loop
Detected");
} else if (t_check_status("483")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 483 Too Many
Hops");
} else if (t_check_status("484")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 484 Address
Incomplete");
} else if (t_check_status("485")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 485
Ambiguous");
} else if (t_check_status("486")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 486 Busy
Here");
} else if (t_check_status("487")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 487 Request
Terminated");
} else if (t_check_status("488")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 488 Not
Acceptable Here");
} else if (t_check_status("491")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 491 Request
Pending");
} else if (t_check_status("493")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 493
Undecipherable");
} else if (t_check_status("500")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 500 Server
Internal Error");
} else if (t_check_status("501")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 501 Not
Implemented");
} else if (t_check_status("502")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 502 Bad
Gateway");
} else if (t_check_status("503")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 503 Service
Unavailable");
} else if (t_check_status("504")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 504 Server
Time-out");
} else if (t_check_status("505")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 505 Version Not
Supported");
} else if (t_check_status("513")) {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU 513 Message Too
Large");
} else {
xlog("L_NOTICE", "Failure call($ci | $Ri): $fU -> $tU Unknown
code");
}
setflag(1);
if (is_method("INVITE") && t_check_status("408|500|503")) {
if (!next_gw()) {
xlog("L_ERR", "No more gw ($ru/$fu)");
t_reply("486", "Busy");
# t_reply("503", "Service not available");
exit;
}
t_on_failure("2");
force_rtp_proxy("foc");
t_relay();
}
}