I'm trying hard to get a handle on configuring ser but I think I need a few hints..
I thought I was doing the accounting right but the acc table never receives any information.. In my reading I thought by using setflag(x) where x was the same number as the db_flag number stateful accounting records would be automatic.. is this wrong..?
Can someone clue me in as to what I'm doing wrong as I just can't get this.
Here's my config if it helps at all:
# ----------- global configuration parameters ------------------------
debug=3 # 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.domain.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/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/acc.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", 2) 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", 1) modparam("acc", "db_missed_flag", 2) 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@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; };
record_route(); if (loose_route()) { t_relay(); break; };
# label all transactions for accounting setflag(1);
# 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.domain.com", "subscriber")) { www_challenge("voip.domain.com", "1"); sl_send_reply("404", "Incorrect Authorization"); break; }; save("location"); break; };
# lookup and handle local users first if (lookup("location")) { t_relay(); break; } else { if ((method=="INVITE" || method=="ACK") && t_newtran() ) { # new call to offline user with voicemail flag if (isflagset(4)) { route(4); break; }; route(5); break; }; };
if (!t_relay()) { sl_reply_error(); break; };
} else { t_reply("404","UA Configuration error - Incorrect domain"); break; };
} # 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 our local blocks if (uri=~"^sip:555") { t_reply("404","no such user"); break; };
# dial plan routing - long distance or local lata/tandem transit if ((uri=~"^sip:1") && (isflagset(5))) { rewritehostport("172.16.0.7:5060"); t_relay(); break; };
if (uri=~"^sip:7") { rewritehostport("172.16.0.5:5060"); t_relay(); break; };
if (uri=~"^sip:3") { rewritehostport("172.16.0.5:5060"); t_relay(); break; };
t_reply("404","Not Found"); break;
}