[OpenSIPS-Users] Parallel forking and per branch manipulation
Bogdan-Andrei Iancu
bogdan at opensips.org
Wed Sep 5 21:39:50 CEST 2012
Hi Jayesh,
do :
if($var(branch_id) == 1) {
as $var(branch_id) returns an integer, not a string.
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 09/04/2012 04:36 PM, Jayesh Nambiar wrote:
> Hi Bogdan,
> Firstly I am using Opensips 1.7.2. And here the observations after I
> tried several things as suggested by you.
> Observation 1:
>> lookup("location");
>> #$branch = $ru;
>>
>> You suggested the above line is not required as it will automatically
>> be treated as branch 0 and hence I commented it, but is not behaving
>> as expected. So when I comment the above line and then add the code
>> as below:
>>
>> avp_db_query("SELECT cli, phone_number FROM users WHERE user_id =
>> '$rU', "$avp(cli), $avp(parallel_number)");
>> $rU = $avp(parallel_number);
>> $rd = my_gateway_ip;
>> $var(uri) = "sip:"+$rU+"@"+$rd;
>>
>> $branch = $var(ruri);
>> xlog("L_INFO", "Branch URI 0=$(branch(uri)[0]) AND Branch URI
>> 1=$(branch(uri)[1])");
>> The above line prints in syslog "Branch URI
>> 0=sip:123456789 at mygateway_ip and Branch URI 1 = NULL"
>> This means that when I actually call "$branch = some_uri" that is
>> when the branch is created with an id. Because I checked adding that
>> $branch = $ru line again and then syslog printed "Branch URI
>> 0=sip:1111 at 1.2.3.4:25380 <http://sip:1111@1.2.3.4:25380> and Branch
>> URI 1=sip:123456789 at mygateway_ip".
>>
>> t_on_branch("1");
>> t_relay();
>> exit;
>>
> Observation 2:
> Inside the branch route I write the following code:
> branch_route[1] {
> $var(branch_id) = $T_branch_idx;
> if($var(branch_id) == "1") {
> xlog("L_INFO", "Branch-ID=$T_branch_idx")
> insert_hf("Forwarded: Yes\r\n", "Call-ID");
> uac_replace_from("sip:$avp(cli)@mydomain.com
> <http://mydomain.com/>");
> }
> }
>
>
> Now here I can confirm that when the branch_id is 1, it gets into this
> condition since the xlog prints "Branch-ID=1" properly when its
> inside the branch route; but when branch_0 gets relayed out this
> header gets inserted and From header gets replaced whereas when
> branch_1 is relayed the header mentioned in this condition is not
> inserted and also the From header is not replaced.
> Basically, it behaves exactly opposite as expected !! Please note in
> this case I am creating branch twice using the $branch command so that
> $branch(uri)[0] is the one fetched from location and $branch(uri)[1]
> is the PSTN uri where the call has to be parallel forwarded.
> Is there something I am still doing wrong because as I understood;
> inside the branch_route based on branch_id I am inserting a custom
> header and replacing From header but this custom header and From
> header is being replaced on the unintended branch !!
> Could be that something is wrong in opensips-1.7.x. Please help me out
> here.
>
> Thanks,
>
> --- Jayesh
>>
> On Tue, Sep 4, 2012 at 12:18 AM, Jayesh Nambiar <jayesh.voip at gmail.com
> <mailto:jayesh.voip at gmail.com>> wrote:
>
> Thanks Bogdan. Will definitely try this out.
>
> --- Jayesh
>
>
> On Monday, September 3, 2012, Bogdan-Andrei Iancu wrote:
>
> Hi Jayesh,
>
> See my inline comments.
>
> Regards,
>
> Bogdan-Andrei Iancu
> OpenSIPS Founder and Developer
> http://www.opensips-solutions.com
>
>
> On 08/31/2012 03:02 PM, Jayesh Nambiar wrote:
>> Hi Binan,
>> Thank you very much for your reply. What you wrote is what I
>> understand from all the documentation present but probably
>> the concept is not working for me or probably just not
>> getting into my head. This is a snippet of what I'm trying to do:
>>
>> lookup("location");
>> $branch = $ru;
> You do not need this last line as the $ru will be
> automatically be considered branch 0.
>
>>
>> avp_db_query("SELECT cli, phone_number FROM users WHERE
>> user_id = '$rU', "$avp(cli), $avp(parallel_number)");
>> $rU = $avp(parallel_number);
>> $rd = my_gateway_ip;
>> $var(uri) = "sip:"+$rU+"@"+$rd;
>>
>> $branch = $var(ruri);
>>
>> t_on_branch("1"); # --This is confusing me---
> This is correct, you are arming the branch 1, which will be
> executed inside t_relay(), once for each branch.
>
>> t_relay();
>> exit;
>>
>> branch_route[1] { #---Need to know how to check for branch id
>> here---
>> if(branch_id == 1) { #--- How do I check for this
>> condition??
> See $T_branch_idx
> (http://www.opensips.org/html/docs/modules/1.8.x/tm.html#id294499)
>
>> uac_replace_from("sip:$avp(cli)@mydomain.com
>> <http://mydomain.com>");
>> }
>> }
>>
>> The problem is I dont know how to identify the branch id in
>> the branch route. Even if I set branch flag for second branch
>> using setbflag(1,1) and I check for this flag in the branch
>> route using isbflagset(1,1), by the time the first branch
>> goes into branch_route, the second branch is created and the
>> condition isbflagset(1,1) becomes true and the
>> uac_replace_from() gets executed for first branch also. My
>> requirement is to execute this branch_route only for second
>> branch which is branch_id 1.
>> Isn't there any straight forward way of checking the id of
>> the branch when it comes to the branch route??
>>
>> Any help is really appreciated. Thanks.
>>
>> --- Jayesh
>>
>> Hi,
>>
>> lets say you have 2 branches 0 towards user in location
>> and 1 towards PSTN.
>> ?
>> I suggest to use branch flags which are used to activate
>> some functions in branch level
>>
>> when creating the branches in main route use this
>> variable $branch() to set branch flags to each indivisual
>> branch depending on its index 0 for branch 0 and 1 for
>> branch 1.
>>
>> use branch routing blocks to execute certain logic (it
>> could be the manipulation ) for each branch before
>> forwarding the request.
>>
>> // Binan
>>
>> --- On Thu, 8/30/12, Jayesh Nambiar
>> <jayesh.voip at gmail.com> wrote:
>>
>> From: Jayesh Nambiar <jayesh.voip at gmail.com>
>> Subject: [OpenSIPS-Users] Parallel forking and per branch
>> manipulation
>> To: "OpenSIPS users mailling list" <users at lists.opensips.org>
>> Date: Thursday, August 30, 2012, 8:11 AM
>>
>> Hi All,I have a scenario to do parellel forking between
>> the user found in location and towards a PSTN gateway.
>> The requirement here is, I have unique manipulations to
>> be done before routing the call which I believe can be
>> done using branch routes, but I'm just wondering how.?
>> For eg: The branch that goes to the user found from
>> location should have no FROM Header manipulation and the
>> branch that goes out to PSTN gateway needs a
>> uac_replace_from("sip:123456789 at 1.2.3.4"), and
>> insert_hf("P-Asserted_Identity:
>> sip:123456789 at 1.2.3.4\r\n") before calling t_relay().
>> There are many other manipulations like this.
>> How do I take the script logic to individual branch
>> routes before calling t_relay, because whats happening
>> with me is once the location is looked up, I go ahead for
>> manipulations that is supposed to be done for the gateway
>> branch, but it gets applicable for the branch that goes
>> out to the user as well !!
>>
>> Probably I am missing something on my understanding on
>> how to call branch_routes while doing parallel forking.
>> Thanks for any help.
>> --- Jayesh
>>
>>
>> _______________________________________________
>> Users mailing list
>> 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/20120905/04deed9a/attachment-0001.htm>
More information about the Users
mailing list