[Serusers] config / accounting help
Matt Hess
mhess at livewirenet.com
Fri Jan 30 22:30:25 CET 2004
Below is the latest config of mine solving all the t_* errors.. and
thanks to the ser list for the help so far.. But one problem still
remains. When a person hangs up there is no end of call logged and the
phone takes a little while to disconnect and the other phone never hangs
up.. nothing is in the error logs about the disconnect either.
# ----------- global configuration parameters ------------------------
debug=7 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
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_mode=0666
alias="voip.livewirenet.com"
# ------------------ module loading ----------------------------------
loadmodule "/usr/local/ser/lib/ser/modules/mysql.so"
loadmodule "/usr/local/ser/lib/ser/modules/sl.so"
loadmodule "/usr/local/ser/lib/ser/modules/tm.so"
loadmodule "/usr/local/ser/lib/ser/modules/acc.so"
loadmodule "/usr/local/ser/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/ser/lib/ser/modules/rr.so"
loadmodule "/usr/local/ser/lib/ser/modules/textops.so"
loadmodule "/usr/local/ser/lib/ser/modules/vm.so"
loadmodule "/usr/local/ser/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/ser/lib/ser/modules/registrar.so"
loadmodule "/usr/local/ser/lib/ser/modules/auth.so"
loadmodule "/usr/local/ser/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/ser/lib/ser/modules/group.so"
# ----------------- setting module-specific parameters ---------------
modparam("voicemail", "db_url","mysql://ser:heslo@localhost/ser")
modparam("voicemail", "email_column", "email_address")
modparam("voicemail", "subscriber_table", "subscriber")
modparam("voicemail", "user_column", "username")
modparam("usrloc", "db_mode", 1)
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("rr", "enable_full_lr", 1)
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)
modparam("acc", "log_missed_flag", 2)
modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser")
modparam("acc", "db_flag", 11)
modparam("acc", "db_missed_flag", 12)
modparam("acc", "failed_transactions", 1)
modparam("group", "db_url", "mysql://ser:heslo@localhost/ser")
modparam("group", "table", "grp")
modparam("group", "user_column", "username")
modparam("group", "domain_column", "domain")
modparam("group", "group_column", "grp")
# If set to 1 then username at domain will be used for lookup, if
# set to 0 then only username will be used.
modparam("group", "use_domain", 0)
# ------------------------- request routing logic -------------------
# main routing logic
route {
# initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
if (!mf_process_maxfwd_header("10")) {
t_reply("483","Too Many Hops");
break;
};
if ( msg:len > max_len ) {
t_reply("513", "Message too big");
break;
};
# label all transactions for accounting
setflag(11);
setflag(12);
record_route();
if (loose_route()) {
t_relay();
break;
};
if (!search("(f|From): .*@voip.livewirenet.com")) {
sl_send_reply("404","Not Found");
break;
};
# decide if callee has voicemail
if (is_user_in("Request-URI", "voicemail")) {
setflag(4);
};
# decide if caller is allowed long distance
if (is_user_in("From", "ld")) {
setflag(5);
};
# only process for our sip domain
if (uri==myself) {
# authorize and save location
if (method=="REGISTER") {
if (!www_authorize("voip.livewirenet.com", "subscriber")) {
www_challenge("voip.livewirenet.com", "1");
break;
};
save("location");
break;
};
if (!lookup("location")) {
# if we can't lookup the location and the callee has voicemail
# we need not worry about any call routing and should dump
# the call directly to voicemail
if (isflagset(4)) {
route(4);
break;
};
# We have made sure that voicemail for a local user isn't an
# issue.. now process like a normal call
route(5);
break;
} else { # found in userloc
t_relay();
break;
};
}; # end uri==myself
} # end main route
route[4] {
# Voicemail specific configuration - begin
if(method=="ACK" || method=="INVITE" || method=="BYE" || method=="REFER"){
if(t_newtran()){
t_reply("100","Trying -- just wait a minute !");
if(method=="INVITE" || method=="REFER"){
log("**************** vm start - begin ******************\n");
if( uri =~ "conference" ){
if(!vm("/tmp/am_fifo","conference")){
log("could not contact conference server\n");
t_reply("500","could not contact conference server");
};
} else if( uri =~ "echo" ){
if(!vm("/tmp/am_fifo","echo")){
log("could not contact echo\n");
t_reply("500","could not contact echo");
};
} else {
if(!vm("/tmp/am_fifo","voicemail")){
log("could not contact voicemail\n");
t_reply("500","could not contact voicemail");
};
};
log("**************** vm start - end ******************\n");
break;
};
if(method=="BYE"){
log("**************** vm end/refer - begin
******************\n"); if(!vm("/tmp/am_fifo","bye")){
log("could not contact the media server\n");
t_reply("500","could not contact the media server");
};
log("**************** vm end/refer - end ********************\n");
break;
};
} else {
log("could not create new transaction\n");
t_reply("500","could not create new transaction");
};
};
# Voicemail specific configuration - end
}
route[5] {
# protect the pstn from having to bother with calls to out local blocks
if (uri=~"^sip:303993") {
sl_send_reply("404", "no such user");
break;
};
# dial plan routing - long distance or local lata/tandem transit
if (uri=~"^sip:1") {
if (isflagset(5)) {
rewritehostport("172.16.0.7:5060");
t_relay();
break;
} else {
sl_send_reply("500","Not allowed to call long distance");
break;
};
};
if (uri=~"^sip:720") {
rewritehostport("172.16.0.5:5060");
t_relay();
break;
};
if (uri=~"^sip:303") {
rewritehostport("172.16.0.5:5060");
t_relay();
break;
};
# should not have gotten here
sl_reply_error();
break;
}
Jiri Kuthan wrote:
> At 12:08 AM 1/30/2004, Matt Hess wrote:
>
>>I sent the complete cfg file earlier and didn't want to duplicate it if it was unnecessary..
>
>
> ignore my previous request to resent the config file -- I didn't realize
> it is the same one. Anyhow, my previous email should have answered your
> questions.
>
>
>>and as I've been reading.. statefull ransactions are required for acc .. yes?
>
>
> It depends on what you want to do. Typically, you wish to account on result of
> proxied transactions -- that's why you need state: you keep original requests
> in memory, correlate them with replies and generate a report eventually which
> uses information from both stored request and received replies.
>
> In your script however, you generate local replies if some undesirable conditions
> occur (Incorrect domain, etc.) It does not seem reasonable to flood accoutning
> with reports on all localy denied request. I better suggest generating all
> local negative replies statelessly -- that scales a way better.
>
> -jiri
More information about the sr-users
mailing list