Hi, I've previously installed kamailio from git branch 3.1. Now, I've manged to git cherry-pick your patch, but got "fatal: Could not find 83620cb7cd14ee3b509eef72d99337567f53967f" when tried to get t_flush_flags(). I've double-checked commit and found it here: http://git.sip-router.org/cgi-bin/gitweb.cgi?p=sip-router;a=commit;h=83620cb7cd14ee3b509eef72d99337567f53967f. I don't know why I can't cherry-pick it.
Your patch alone, without t_flush_flags(), doesn't change anything in my scenario, there is still no logging of 2nd branch. Cheers Ozren On Wed, Sep 7, 2011 at 1:05 PM, Daniel-Constantin Mierla <mico...@gmail.com>wrote: > Hello, > > > On 9/7/11 11:25 AM, Ozren Lapcevic wrote: > > Hi Daniel, > > thanks for the quick fix and reply. > > What is the easiest way to try this new patch? I'm running kamailio 3.1.4 > and there is no t_flush_flags() in tmx module in that version. I suppose I > need to install Kamailio Devel from git ( > http://www.kamailio.org/dokuwiki/doku.php/install:kamailio-devel-from-git) > to get t_flush flags() and your patch or is there a workaround to apply them > to my 3.1.4 branch? > > > did you install 3.1.4 from tarball/packages or is it from git branch 3.1? > If later, then you can do: > > git pull origin > git cherry-pick -x 83620cb7cd14ee3b509eef72d99337567f53967f > git cherry-pick -x c589ca35b2aa3097a3c9e2a5a050514337300c05 > > then recompile/install. First cherry-pick brings the t_flush_flags, the > second auto-update of the flags after branch/failure route. > > If you installed from packages, then you would need to repackage yourself > after patching. The patches are available at commit url, for example: > > > > http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c589ca35b2aa3097a3c9e2a5a050514337300c05 > > There you find at top of the page a link named 'patch' that you can use > with git tools to apply or extract the diff-patch part and apply with patch. > > Cheers, > Daniel > > > Cheers > Ozren > > > On Tue, Sep 6, 2011 at 2:18 PM, Daniel-Constantin Mierla < > mico...@gmail.com> wrote: > >> Hello, >> >> can you use t_flush_flags() after setting the accounting flag in >> falure_route? Automatic update was missing so far, reported by Alex Hermann >> as well. I just did a patch, so if you want to try it, see the commit: >> >> >> http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c589ca35b2aa3097a3c9e2a5a050514337300c05 >> >> Actually, reporting if all goes fine with this patch, will help in >> backporting it to 3.1 branch. >> >> Thanks, >> Daniel >> >> >> On 9/5/11 2:41 PM, Ozren Lapcevic wrote: >> >> Hi, >> >> I'm having some problems accounting missed serial forked calls to mysql >> database. >> >> I have following setup. Each user can have up to two contacts: telephone >> number (routed to asterisk) and SIP URI. Users can specify which contact has >> higher priority - which one should ring first. There is also SEMS voicemail >> which is forked as 3rd serial call leg if there is no answer at first two >> contacts. >> >> For example, I have two users: o...@abc.hr and p...@abc.hr. pero@abc.hralso >> has set telephone number as alternative number if he is not reachable >> at sip:p...@abc.hr. Moreover, p...@abc.hr has voicemail turned on. When >> o...@abc.hr calls p...@abc.hr, first p...@abc.hr's SIP client rings, then >> if there is no answer and after the timeout telephone number rings and >> finally, if there is no answer at telephone and after the timeout INVITE is >> forked to SEMS. >> >> There are two interesting scenarios accounting-wise which can happened: >> 1. o...@abc.hr calls p...@abc.hr, there are no answers and call is forked >> to voicemail. >> 2. o...@abc.hr calls p...@abc.hr, there is no answer at SIP client, but >> pero answers call at telephone. >> >> When scenario 1 happens, I want to have only one log (row) in missed_calls >> table. >> >> When scenario 2 happens, I don't want to have a log in missed_calls table. >> >> To accomplish this,* I want to log only the 2nd branch of the forked >> call. However, there is either a bug in acc module or I'm doing something >> wrong, and I can't get Kamailio to log only the 2nd branch*. I think that >> I am setting the FLT_ACCMISSED flag correctly - after the 2nd branch is >> handled and prior to calling the RELAY route. Logs show that FLT_ACCMISSED >> flag is set prior to calling t_relay(), and there are no errors in debug >> log. I am using $ru = "something" to rewrite URI prior to forking request. >> >> I can easily set up logging of every call (two missed calls for serially >> forked call to two locations) by setting FLT_ACCMISSED flag for each INVITE. >> I can set up logging of every call's 1st branch, by reseting FLT_ACCMISSED >> flag when handling 2nd branch of the call. Interestingly, logging of only >> the 2nd branch of the serial forked call works when there is no forking to >> voicemail! >> >> Any ideas how to solve this problem? >> >> Bellow are important parts of my config file. I'm running kamailio 3.1.4. >> >> Cheers >> Ozren >> >> >> # ----- acc params ----- >> /* what special events should be accounted ? */ >> modparam("acc", "early_media", 0) >> modparam("acc", "report_ack", 1) >> modparam("acc", "report_cancels", 0) >> modparam("acc", "detect_direction", 0) >> /* account triggers (flags) */ >> modparam("acc", "log_flag", FLT_ACC) >> modparam("acc", "log_missed_flag", FLT_ACCMISSED) >> modparam("acc", "failed_transaction_flag", FLT_ACCFAILED) >> modparam("acc", >> "log_extra","src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd") >> /* enhanced DB accounting */ >> #!ifdef WITH_ACCDB >> modparam("acc", "db_flag", FLT_ACC) >> modparam("acc", "db_missed_flag", FLT_ACCMISSED) >> modparam("acc", "db_url", DBURL) >> modparam("acc", "db_extra", >> "src_user=$fU;src_domain=$fd;dst_user=$tU;dst_domain=$td;src_ip=$si") >> #!endif >> >> ... >> >> >> # Main SIP request routing logic >> # - processing of any incoming SIP request starts with this route >> route { >> >> # per request initial checks >> route(REQINIT); >> >> if (src_ip != ****) { >> # NAT detection >> route(NAT); >> } >> >> # handle requests within SIP dialogs >> route(WITHINDLG); >> >> ### only initial requests (no To tag) >> >> # CANCEL processing >> if (is_method("CANCEL")) >> { >> if (t_check_trans()) >> t_relay(); >> exit; >> } >> >> t_check_trans(); >> >> # authentication >> route(AUTH); >> >> # record routing for dialog forming requests (in case they are >> routed) >> # - remove preloaded route headers >> remove_hf("Route"); >> if (is_method("INVITE|SUBSCRIBE")) >> record_route(); >> >> # account only INVITEs >> if (is_method("INVITE")) >> { >> setflag(FLT_ACC); # do accounting >> } >> >> # dispatch requests to foreign domains >> route(SIPOUT); >> >> ### requests for my local domains >> >> # handle presence related requests >> route(PRESENCE); >> >> # handle registrations >> route(REGISTRAR); >> >> if ($rU==$null) >> { >> # request with no Username in RURI >> sl_send_reply("484","Address Incomplete"); >> exit; >> } >> >> # dispatch destinations to PSTN >> route(PSTN); >> >> if ( is_method("INVITE") ) { >> route(DBALIASES); >> #check for user defined forking priorities and timers >> route(FORK); >> } >> >> # user location service >> route(LOCATION); >> >> route(RELAY); >> } >> >> >> >> #check for user defined forking priorities and timers >> route[FORK]{ >> sql_query("con", "select * from usr_pref_custom where uuid='$tu'", >> "pref"); >> >> $avp(uuid)=$dbr(pref=>[0,0]); >> $avp(email)=$dbr(pref=>[0,1]); >> $avp(prio1)=$dbr(pref=>[0,2]); >> $avp(prio2)=$dbr(pref=>[0,3]); >> $avp(timer1)=$dbr(pref=>[0,5]); >> $avp(timer2)=$dbr(pref=>[0,6]); >> >> if (strlen($avp(prio1))>5) { >> >> # user has multiple contacts, do serial forking >> setflag(FLT_USRPREF); >> >> # set counter >> if (!$avp(prio)) { >> $avp(prio) = 1; >> } >> >> # overwrite request URI with highest priority contact >> if ($avp(prio1) =~ "^sip:00") { >> $ru = $avp(prio1) + "@host"; >> xlog("L_INFO","PRIO 1 is tel number, RURI set: >> $ru"); >> } >> else { >> $ru = $avp(prio1); >> xlog("L_INFO","PRIO 1 is SIP URI, RURI set: $ru"); >> } >> } >> } >> >> >> route[RELAY] { >> #!ifdef WITH_NAT >> if (check_route_param("nat=yes")) { >> setbflag(FLB_NATB); >> } >> if (isflagset(FLT_NATS) || isbflagset(FLB_NATB)) { >> route(RTPPROXY); >> } >> #!endif >> >> /* example how to enable some additional event routes */ >> if (is_method("INVITE")) { >> >> t_on_reply("REPLY_ONE"); >> t_on_failure("FAIL_ONE"); >> >> #if users have priorities set, use FAIL_FORK failure route >> if ( isflagset(FLT_USRPREF) ) { >> t_on_failure("FAIL_FORK"); >> } >> } >> >> if (isflagset(FLT_ACCMISSED)) xlog("L_INFO","RELAY, $rm $ru, >> ACCMISSED FLAG IS SET"); >> else xlog("L_INFO","RELAY, $rm $ru, ACCMISSED FLAG IS NOT SET"); >> if (!t_relay()) { >> sl_reply_error(); >> } >> exit; >> } >> >> >> # Handle requests within SIP dialogs >> route[WITHINDLG] { >> if (has_totag()) { >> # sequential request withing a dialog should >> # take the path determined by record-routing >> if (loose_route()) { >> xlog("L_INFO","WITHINDLG, loose_route()"); >> if (is_method("BYE")) { >> xlog("L_INFO","WITHINDLG, BYE, DO >> ACCOUNTING"); >> setflag(FLT_ACC); # do accounting ... >> setflag(FLT_ACCFAILED); # ... even if the >> transaction fails >> } >> route(RELAY); >> } else { >> if (is_method("SUBSCRIBE") && uri == myself) { >> # in-dialog subscribe requests >> route(PRESENCE); >> exit; >> } >> if ( is_method("ACK") ) { >> if ( t_check_trans() ) { >> # no loose-route, but stateful >> ACK; >> # must be an ACK after a 487 >> # or e.g. 404 from upstream server >> t_relay(); >> exit; >> } else { >> # ACK without matching transaction >> ... ignore and discard >> exit; >> } >> } >> sl_send_reply("404","Not here"); >> } >> exit; >> } >> } >> >> >> # USER location service >> route[LOCATION] { >> >> #skip if $ru is telephone number >> if ($ru =~ "^sip:00") { >> xlog("L_INFO","SKIP lookup..."); >> } >> else { >> if (!lookup("location")) { >> switch ($rc) { >> case -1: >> case -3: >> t_newtran(); >> t_reply("404", "Not Found"); >> exit; >> case -2: >> sl_send_reply("405", "Method Not >> Allowed"); >> exit; >> } >> } >> } >> >> # when routing via usrloc, log the missed calls also, but only if >> user doesn't have prios set >> if ( is_method("INVITE") && !(isflagset(FLT_USRPREF))) { >> setflag(FLT_ACCMISSED); >> } >> } >> >> >> # Failure route for forked calls >> failure_route[FAIL_FORK] { >> #!ifdef WITH_NAT >> if (is_method("INVITE") && (isbflagset(FLB_NATB) || >> isflagset(FLT_NATS))) { >> unforce_rtp_proxy(); >> } >> #!endif >> >> if ($avp(prio) >= 1) { >> $avp(prio) = $avp(prio) + 1; >> >> # handle 2nd branch >> if ( ($avp(prio) == 2) && ( isflagset(FLT_USRPREF) )) { >> t_on_failure("FAIL_FORK"); >> >> if ($avp(prio2) =~ "^sip:00") { >> xlog("L_INFO","FAIL FORK, PRIO 2 is tel >> number"); >> $ru = $avp(prio2) + "@host"; >> } >> else { >> xlog("L_INFO","FAIL FORK, PRIO 2 is SIP >> URI"); >> $ru = $avp(prio2); >> route(LOCATION); >> } >> setflag(FLT_ACCMISSED); >> } >> >> else { >> $avp(prio) = 0; >> $ru = $(avp(uuid)); >> rewritehostport("host:port"); >> xlog("L_INFO","FAIL FORK, VOICEMAIL >> email:$avp(email), ru:$ru, br: $br"); >> append_hf("P-App-Name: voicemail\r\n"); >> append_hf("P-App-Param: >> Email-Address=$avp(email)\r\n"); >> } >> route(RELAY); >> } >> >> if (t_is_canceled()) { >> exit; >> } >> } >> >> _______________________________________________ >> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing >> listsr-us...@lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users >> >> >> -- >> Daniel-Constantin Mierla -- http://www.asipto.com >> Kamailio Advanced Training, Oct 10-13, Berlin: >> http://asipto.com/u/kathttp://linkedin.com/in/miconda -- >> http://twitter.com/miconda >> >> > > > _______________________________________________ > SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing > listsr-us...@lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users > > > -- > Daniel-Constantin Mierla -- http://www.asipto.com > Kamailio Advanced Training, Oct 10-13, Berlin: > http://asipto.com/u/kathttp://linkedin.com/in/miconda -- > http://twitter.com/miconda > >
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users