[Serusers] config / accounting help
Jan Janak
jan at iptel.org
Sat Jan 31 02:19:28 CET 2004
Make sure that BYE really passes through ser. If not then the phones are
broken because you have record-routing enabled. Anyway, SIP message
dumps would help to diagnose the problem.
Jan.
On 30-01 14:30, Matt Hess wrote:
> 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
>
> _______________________________________________
> Serusers mailing list
> serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers
More information about the sr-users
mailing list