[SR-Users] usage of t_flush_flags() in event_route
Daniel-Constantin Mierla
miconda at gmail.com
Wed May 27 08:19:32 CEST 2015
Hello,
I haven't used this event route and the flags, if they don't persist
afterwards, then maybe it needs a patch to be fixed. Hugh implemented
it, iirc, not sure if he was looking at this aspect.
Cheers,
Daniel
On 26/05/15 16:14, Andrew Pogrebennyk wrote:
> Hi Daniel and others,
> I'm having a problem with acc module if I'm using the event_route/
> branch-failure:
> say, the call comes from the app server and goes to the registered user.
> We arm the the failure route and per-branch failure route for the 302
> redirect from the UA. We explicitly reset the accounting flags because
> we don't want to account the calls from the app server. The transaction
> is created implicitly by the t_relay().
>
> Now if the UA responds with the 302 response and we are going to process
> that, we want to create an acc record for the new target from 302
> message because this call may incur additional costs. I'm setting the
> accounting flags and calling t_flush_flags() but that doesn't work (no
> accounting record). Any idea if I'm doing something wrong or maybe
> there's a bug when changing the flags and then calling t_flush_flags
> from the event_route?
>
> Here are the module parameters:
>
> modparam("acc", "early_media", 0)
> modparam("acc", "report_ack", 0)
> modparam("acc", "report_cancels", 1)
> modparam("acc", "detect_direction", 1)
> modparam("acc", "db_flag", 1)
> modparam("acc", "db_missed_flag", 2)
> modparam("acc", "failed_transaction_flag", 3)
> modparam("acc", "db_url", PAIR_URL)
> modparam("acc", "db_extra",
> "src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
> modparam("acc", "multi_leg_info", "src_leg=$avp(i:901);dst_leg=$avp(i:902)")
> modparam("acc", "time_mode", 2)
> modparam("acc", "time_attr", "time_hires")
> modparam("acc", "cdr_log_enable", 0)
>
>
> FTR, we tried 4.1.6 and 4.1.8.
>
> And here is the event route (with flags defined like this:
> flags FLAG_ACC_DB:1, FLAG_ACC_MISSED:2, FLAG_ACC_FAILED:3, ...):
>
> event_route[tm:branch-failure:redirect]
> {
> route(ROUTE_STOP_RTPPROXY_BRANCH);
> if($T_rpl($rs) == 301 || $T_rpl($rs) == 302)
> {
> # initialise variables when entering failure route
> route(ROUTE_INITVARS);
>
> # these need to be avps because we need it in reply/failure-route
> $(avp(s:from_faxserver)[*]) = 0;
> $(avp(s:to_faxserver)[*]) = 0;
> $(avp(s:cf_from_pstn)[*]) = 0;
> $(avp(s:from_pstn)[*]) = 0;
> $(avp(s:proxylu_from_pstn)[*]) = 0;
> $(avp(s:lcr_flags)[*]) = 0;
> $(avp(s:em_call)[*]) = 0;
> $(avp(s:from_pbx)[*]) = 0;
> $(avp(s:p_to_device)[*]) = 0;
> $(avp(s:p_to_group)[*]) = 0;
> $(avp(s:is_primary)[*]) = 0;
>
> # now let's process a 30x
> $(avp(s:acc_state)[*]) = "cfb";
> $(avp(s:orig_acc_caller_user)[*]) = $avp(s:acc_caller_user);
> $(avp(s:orig_acc_caller_domain)[*]) = $avp(s:acc_caller_domain);
> $(avp(s:acc_caller_user)[*]) = $avp(s:acc_callee_user);
> $(avp(s:acc_caller_domain)[*]) = $avp(s:acc_callee_domain);
> $(avp(s:caller_uuid)[*]) = $avp(s:callee_uuid);
> $(avp(s:callee_uuid)[*]) = $null;
> # the $var(no_acc) is 0 at this point but the flags may have
> been reset
> # if this is a call from PBX user - we do want accounting for
> the 302 redirect
> if(isflagset(FLAG_ACC_DB)) {
> xlog("L_NOTICE", "++++++ ACC flag is set - [% logreq -%]\n");
> } else {
> xlog("L_NOTICE", "------ ACC flag is NOT set - [% logreq
> -%]\n");
> }
> setflag(FLAG_ACC_FAILED);
> setflag(FLAG_ACC_DB);
> t_flush_flags();
>
> # get last URI from destination-set and set it as R-URI
> $var(contact) = $T_rpl($ct);
> $var(contact) = $(var(contact){nameaddr.uri});
> if($var(contact) == 0 || $var(contact) == $null)
> {
>
> xlog("L_ERROR", "Failed to fetch contact '$ct' from 301/302
> - [% logreq -%]\n");
> acc_db_request("480", "acc");
> $var(announce_handle) = "callee_tmp_unavailable";
> $var(announce_set) = $xavp(callee_real_prefs[0]=>sound_set);
> $(avp(s:announce_code)[*]) = 480;
> $(avp(s:announce_reason)[*]) = "Temporarily Unavailable";
> route(ROUTE_EARLY_REJECT);
> }
> $ru = $var(contact);
> xlog("L_NOTICE", "Redirect from UAC intercepted - [% logreq -%]\n");
> $(avp(s:forwarder_cli_userprov)[*]) = $T_rpl($tU);
> $(avp(s:forwarder_domain_userprov)[*]) = $T_rpl($td);
> $var(forward) = 1;
> $var(redirected_forward) = 1;
> route(ROUTE_LOAD_CALLER_PREF);
> route(ROUTE_FIND_CALLEE);
> }
> }
>
> Thanks.
>
> Andrew
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio World Conference, May 27-29, 2015
Berlin, Germany - http://www.kamailioworld.com
More information about the sr-users
mailing list