[OpenSIPS-Users] Parallel forking and per branch AVPs explanations

Bogdan-Andrei Iancu bogdan at opensips.org
Fri Dec 7 18:25:09 CET 2012


Hi Samuel,

You should do like:

     $var(i) = 0;
     while ($var(i) < $(avp(callee_fork){param.count})) {
             $avp(callee_uri) = $(avp(callee_fork){param.valueat,$var(i)});
             if ($var(i)!=0)
                       append_branch();
             $ru = $avp(callee_uri);
             $avp(callee_username) = $rU;
             $avp(callee_realm) = $rd;
             setbflag(27);
             lookup("location","mb");
             setflag(9);
             $var(i) = $var(i) + 1;
     }

the idea is, before overwritting the RURI, push the existing content as 
a new branch - at the first step you do not have to do it as originally 
(before the loop) the RURI content is not to be kept.

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com


On 12/07/2012 01:53 PM, Samuel Muller wrote:
> Thanks Bogdan for your answer.
>
> I tried several things since, I understood that :
>     $branch = $ru;
>     append_branch();
> makes 2 branches, so everything is duplicated.
>
> I removed $branch = $ru; it's better now, but I had again 1 duplicated 
> branch : the 0 and the last one in the loop.
>
> This worked for me :
> $var(j) = $(avp(callee_fork){param.count}) - 1;
> if ($var(i) < $var(j)) {
>     append_branch();
> }
>
> then, what I did mistake, is that I've to do manipulations into my 
> loop and set up branch flags accordingly.
> so, I've now a huge loop process :(
>
> There are 2 little things I don't understand yet :
>
> 1/ in the branch route where I send the result of the loop :
> branch_route[1] {
>     xlog("L_NOTICE","br1: engage branch $T_branch_idx to $ru");
>     ...
> }
>
> I got this ERROR line for each branch :
> opensips[15295]: ERROR:tm:pv_get_tm_ruri: BUG: _tm_branch_index 
> greater than nr_of_outgoings
>
> 2/ accounting
>
> I've really something clean for the INVITE using Sip-Leg-Dst / 
> Sip-Leg-Src, each R-URI branch is correctly added.
> but ... nothing in the BYE or CANCEL (independently of the direction 
> of the request).
> I can not know which branch answered, and nothing in the accounting 
> logs that indicates which one I've to account - I've only the first 
> request URI of the INVITE, and no information about the callee behind 
> the hunting group that I've to use.
>
> How can I get that ?
>
> Thank you,
>
>
> *.Sam.*
>
>
>
> On Thu, Dec 6, 2012 at 6:40 PM, Bogdan-Andrei Iancu 
> <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>
>     Hi Samuel,
>
>     It is not clear from your script snapshots where you are supposed
>     to set the bflags 11 and 28.
>
>     The idea is that you create all the additional branches (as
>     normally you have the RURI - mandatory - plus some optional
>     additional branches) in that "while" loop. In the request route
>     you are doing changes only over the RURI (and not over the
>     additional branches). Accessing the already created branches can
>     be done via the $branch[] variables only.
>
>     Regards,
>
>     Bogdan-Andrei Iancu
>     OpenSIPS Founder and Developer
>     http://www.opensips-solutions.com
>
>
>     On 12/05/2012 06:08 PM, Samuel Muller wrote:
>>     Hello,
>>
>>     I'm looking for explanations about parallel forking and branch flags.
>>     I'm deeply annoyed by this feature ...
>>
>>     I need to set up different parameters (like rtpproxy, from
>>     display, accounting, ...) per contact.
>>
>>     actually, I retrieve a list of contact using an AVP, in the
>>     format that the core function "while" can use.
>>
>>     It's working fine when there are no manipulation or no (new)
>>     callee parameters to add :
>>
>>     route[FORK] {
>>         xlog("L_NOTICE","parallel fork requested");
>>         $var(i) = 0;
>>         while ($var(i) < $(avp(callee_fork){param.count})) {
>>                 $avp(callee_uri) =
>>     $(avp(callee_fork){param.valueat,$var(i)});
>>                 $ru = $avp(callee_uri);
>>                 $avp(callee_username) = $rU;
>>                 $avp(callee_realm) = $rd;
>>                 setbflag(27);
>>                 lookup("location","mb");
>>                 setflag(9);
>>                 $branch = $ru;
>>                 append_branch();
>>                 $var(i) = $var(i) + 1;
>>         }
>>         route(RTPPROXY);   # rtp proxy set = bflag 11
>>         route(ACCOUNTING); # accounting using $rU. $ru, ...
>>         route(RELAY);
>>         exit;
>>     }
>>     route[RELAY] {
>>         t_on_branch("1");
>>         t_on_reply("1");
>>         t_on_failure("1");
>>         t_relay("0x01");
>>         exit;
>>     }
>>
>>     At this point, I'm totally lost :
>>     I have to check if a callee need to use rtpproxy, set up the
>>     accounting, change the "from" display based on the destination
>>     (PSTN vs. local subscriber), and so on.
>>     Everything failed, the parameters are always global (based on the
>>     branch("0")) even if I use branch flag, script flag, or do
>>     anything into the branch route.
>>
>>     branch_route[1] {
>>         xlog("L_NOTICE","br1: engage branch $T_branch_idx with R-URI:
>>     $T_ruri ($ru)");
>>         xlog("L_NOTICE","br1: dest set: $ds / dest uri: $du");
>>         if (isbflagset(11)) {
>>             xlog("L_NOTICE","br1: rtp proxy set to \"cr\"");
>>             engage_rtp_proxy("cr");
>>         }
>>         if (isbflagset(28)) {
>>                 uac_replace_from("$avp(caller_cli)","");
>>             }
>>         }
>>     }
>>
>>     did I missed something ???
>>
>>     Thanks to light my fire, I really need it ...
>>
>>     .Sam.
>>
>>
>>     _______________________________________________
>>     Users mailing list
>>     Users at lists.opensips.org  <mailto:Users at lists.opensips.org>
>>     http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20121207/24a3a8de/attachment-0001.htm>


More information about the Users mailing list