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;
}