Hi Mauro, There are some fishy things here.
1) the Q for user3 is 300 (as per DB example) and not 299 (as per logs) 2) the branches (in log) are not q ordered. 3) the flags don't seam to be correctly set. I made on 1.5 a fix (related to (2)) - could you please update and re-test. Regards, Bogdan Mauro Davi' wrote: > Hi Bogdan, > > I update the source code from the svn and I do the test. > > The qvalue are now loaded correctly from the database, how you can see below: > > Mar 10 15:17:07 [8789] DBG:core:serialize_branches: loaded > <sip:[email protected]:33680;rinstance=323bd97f8a0dae2e<99><99><99>ÃÃÃÃÃïë>, > q=100 q_fl<0> > Mar 10 15:17:07 [8789] DBG:core:serialize_branches: loaded > <sip:[email protected]:6651;rinstance=312f0937682fe662>, q=299 q_flag <16> > Mar 10 15:17:07 [8789] DBG:core:serialize_branches: loaded > <sip:[email protected]:6328;rinstance=88793931d487ca32>, q=200 q_flag <0> > > But when in the failure_route I call the next_branches() function the result > is: > > Mar 10 15:17:16 [8795] DBG:core:next_branches: branch is > <sip:[email protected]:6328;rinstance=88793931d487ca32> > params(0xb5f83000, 0xb6198524), called from usr_avp.c: destroy_avp(352) > freeing frag. 0xb619850c alloc'ed from usr_avp.c: add_avp(116) > Mar 10 15:17:16 [8795] DBG:core:next_branches: branch is > <sip:[email protected]:6651;rinstance=312f0937682fe662> > params(0xb5f83000, 0xb61984a8), called from usr_avp.c: destroy_avp(352) > freeing frag. 0xb6198490 alloc'ed from usr_avp.c: add_avp(116) > > i.e. the second call is a parallel fork with user2 and user 3... and not a > serialized call to user2... > > I think that the bug is present yet.... But now the problem is in the > next_branches function where the qvalue aren't correctly stored... > > Best regards > MD > > -----Messaggio originale----- > Da: Bogdan-Andrei Iancu [mailto:[email protected]] > Inviato: lunedì 9 marzo 2009 13:40 > A: Mauro Davi' > Cc: [email protected] > Oggetto: Re: R: R: R: R: [OpenSIPS-Users] R: R: serialize_branches() and q > value.... > > Hi Mauro, > > indeed there is a issue here. The Q value for the default branch (the > RURI) was not properly pushed into the branches.....I made a fix on SVN > - could you please update and give it another try? > > Thanks and regards, > Bogdan > > Mauro Davi' wrote: > >> Hi Bogdan, >> >> yes I use usrloc module with DB MODE set to 3. >> >> I have 4 UAC registered to the system. >> After the registration procedure I modified, manually, the q value on the >> DB, in the location table, in the following way: >> >> Username Domain q >> >> User1 domain.com 0.10 >> User2 domain.com 0.20 >> User3 domain.com 0.30 >> >> The executed script code is the following: >> >> seturi("sip:[email protected]"); >> lookup("location"); >> append_branch(); >> seturi("sip:[email protected]"); >> lookup("location"); >> append_branch() >> seturi("sip:[email protected]"); >> lookup("location"); >> serialize_branches(); >> t_relay(); >> >> The on_failureroute function is: >> >> failure_route[1]{ >> if ( next_branches() ) >> t_relay(); >> } >> >> This is the log result... >> >> Mar 5 14:47:10 [32494] DBG:core:serialize_branches: loaded >> <sip:[email protected]:6500;rinstance=f846856f765b6605>, q=-1 q_flag <0> >> Mar 5 14:47:10 [32494] DBG:core:serialize_branches: loaded >> <sip:[email protected]:7020;rinstance=2f7556d27898c691>, q=-1 q_flag <0> >> Mar 5 14:47:10 [32494] DBG:core:serialize_branches: loaded >> <sip:[email protected]:6638;rinstance=721b473849350f3c>, q=299 q_flag <16> >> >> It isn't correct because user1 must have q value equal to 100 and user2 must >> have qvalue equal to 200... Only the last added sip uri >> (sip:[email protected]) have the correct DB q value. >> >> The result was a serialization of two call. The first one to user3, and the >> second one a parallal fork to user1 and user2... >> >> Regards >> MD >> >> P.S. there is a way to modify the qvalue associated to a sip uri or it is >> possible only in registration phase? Thanks. >> >> -----Messaggio originale----- >> Da: Bogdan-Andrei Iancu [mailto:[email protected]] >> Inviato: giovedì 5 marzo 2009 10:25 >> A: Mauro Davi'; [email protected] >> Oggetto: Re: R: R: R: [OpenSIPS-Users] R: R: serialize_branches() and q >> value.... >> >> Do you use usrloc module with DB_MODE 3 (DB_ONLY) and manually add the >> records in the location table? If so, what is the exact content you put >> in the table? (maybe the q value is not properly filled). >> >> Regards, >> Bogdan >> >> Mauro Davi' wrote: >> >> >>> Yes, if I invoke lookup(location) more than one time... >>> >>> -----Messaggio originale----- >>> Da: Bogdan-Andrei Iancu [mailto:[email protected]] >>> Inviato: martedì 3 marzo 2009 18:34 >>> A: Mauro Davi' >>> Cc: [email protected] >>> Oggetto: Re: R: R: [OpenSIPS-Users] R: R: serialize_branches() and q >>> value.... >>> >>> you mean by lookup(location) ? >>> >>> Regards, >>> Bogdan >>> >>> Mauro Davi' wrote: >>> >>> >>> >>>> Hi Bogdan, >>>> >>>> yes I did in this way... But the problem, I think, is that the qvalue >>>> aren't loaded correctly from the DB. >>>> >>>> Regards, >>>> MD >>>> >>>> -----Messaggio originale----- >>>> Da: Bogdan-Andrei Iancu [mailto:[email protected]] >>>> Inviato: martedì 3 marzo 2009 18:06 >>>> A: Mauro Davi' >>>> Cc: [email protected] >>>> Oggetto: Re: R: [OpenSIPS-Users] R: R: serialize_branches() and q value.... >>>> >>>> Hi Mauro, >>>> >>>> serialize_branches() just prepare the sets. >>>> >>>> To use the sets (for each q value) you need to call next_branches(). >>>> >>>> So, the algorithm should be like this: >>>> >>>> route{ >>>> serialize_branches() >>>> >>>> next_branches(); >>>> >>>> t_on_failure("1"); >>>> >>>> t_relay(); >>>> } >>>> >>>> failure_route[1]{ >>>> if ( next_branches() ) >>>> t_relay(); >>>> } >>>> >>>> Regards, >>>> Bogdan >>>> >>>> Mauro Davi' wrote: >>>> >>>> >>>> >>>> >>>>> Hi Bodan, >>>>> >>>>> I think that the serial fork have some problem. >>>>> >>>>> On the DB I modified the q value of two user >>>>> >>>>> User1, qvalue=0.1 >>>>> User2, qvalue=0.2 >>>>> >>>>> I insert in the script the following line of code: >>>>> >>>>> [email protected] >>>>> Lookup("location"); >>>>> Append_branch(); >>>>> [email protected] >>>>> Lookup("location"); >>>>> Serialize_branches(); >>>>> T_relay(); >>>>> >>>>> The result was: >>>>> >>>>> Mar 2 17:36:53 [26014] DBG:core:serialize_branches: loaded >>>>> <sip:[email protected]:6685;rinstance=0f314641b36adb7d>, q=-1 q_flag >>>>> <0> >>>>> Mar 2 17:36:53 [26014] DBG:core:serialize_branches: loaded >>>>> <sip:[email protected]:54218;rinstance=e70bfc2dadad8857>, q=100 q_flag >>>>> <16> >>>>> >>>>> The call are correctly serialized but if I add three destinations the >>>>> result was: >>>>> >>>>> Mar 2 17:42:04 [26014] DBG:core:serialize_branches: loaded >>>>> <sip:[email protected]:6685;rinstance=0f314641b36adb7d>, q=-1 q_flag >>>>> <0> >>>>> Mar 2 17:42:04 [26014] DBG:core:serialize_branches: loaded >>>>> <sip:[email protected]:54218;rinstance=e70bfc2dadad8857>, q=-1 q_flag >>>>> <0> >>>>> Mar 2 17:42:04 [26014] DBG:core:serialize_branches: loaded >>>>> <sip:[email protected]:54218;rinstance=e70bfc2dadad8857>, q=100 q_flag >>>>> <16> >>>>> >>>>> The qvalue aren't inserted correctly... >>>>> >>>>> Is it a bug? >>>>> >>>>> Thanks in advance >>>>> MD >>>>> >>>>> -----Messaggio originale----- >>>>> Da: [email protected] >>>>> [mailto:[email protected]] Per conto di Bogdan-Andrei Iancu >>>>> Inviato: giovedì 26 febbraio 2009 19:08 >>>>> A: Mauro Davi' >>>>> Cc: [email protected] >>>>> Oggetto: Re: [OpenSIPS-Users] R: R: serialize_branches() and q value.... >>>>> >>>>> Hi Mauro, >>>>> >>>>> you have to ways to go: >>>>> >>>>> 1) use the @domain.com URIs and relay them back to your proxy in order >>>>> to do lookup >>>>> >>>>> 2) try to do lookup directly in the first step - the logic you tried. >>>>> But to work replace the >>>>> append_branch("$ru","0.1"); >>>>> with >>>>> append_branch(); >>>>> >>>>> this will take the RURI and add it as a branch, so you can override it >>>>> with the next user2 URI. >>>>> >>>>> Regards, >>>>> Bogdan >>>>> >>>>> Mauro Davi' wrote: >>>>> >>>>> >>>>> >>>>> >>>>> >>>>>> Hi Bogdan, >>>>>> >>>>>> I have a little problem... >>>>>> >>>>>> In this way I can serialize a set of know called party (i.e. with the >>>>>> sip address in the form sip:usern...@ipaddress:port)... >>>>>> >>>>>> But I cannot add, for example the following branch: >>>>>> >>>>>> Append_branch("sip:[email protected]","0.1") >>>>>> Append_branch("sip:[email protected]","0.2") >>>>>> Append_branch("sip:[email protected]","0.3") >>>>>> >>>>>> Because the result is a misrouted call (i.e. the requested sip uri isn't >>>>>> reacheable...). >>>>>> >>>>>> So I thought to add a RURI after invoked the lookup function... >>>>>> >>>>>> Somethink like this: >>>>>> >>>>>> $ru="sip:[email protected]"; >>>>>> lookup("location"); >>>>>> #Now $ru contain the resolved URI of user1 >>>>>> append_branch("$ru","0.1"); >>>>>> $ru="sip:[email protected]"; >>>>>> lookup("location"); >>>>>> #Now $ru contain the resolved URI of user2 >>>>>> append_branch("$ru","0.2"); >>>>>> $ru="sip:[email protected]"; >>>>>> lookup("location"); >>>>>> #Now $ru contain the resolved URI of user3 >>>>>> append_branch("$ru","0.3"); >>>>>> >>>>>> But I didn't had the expected result... I cannot use pseudo-variable in >>>>>> the append_branch function... >>>>>> >>>>>> Could you tell me how I can solve this problem? There is a work-around? >>>>>> Or is there a correct way to call a group of user associated to a SIP >>>>>> URI via serial forking? >>>>>> >>>>>> Thank in andvance >>>>>> MD >>>>>> >>>>>> -----Messaggio originale----- >>>>>> Da: Bogdan-Andrei Iancu [mailto:[email protected]] >>>>>> Inviato: mercoledì 25 febbraio 2009 15:14 >>>>>> A: Mauro Davi' >>>>>> Cc: [email protected] >>>>>> Oggetto: Re: R: [OpenSIPS-Users] serialize_branches() and q value.... >>>>>> >>>>>> Hi Mauro, >>>>>> >>>>>> (sorry for mistyping your name in the first place) >>>>>> >>>>>> the correct way to inject a q value via the append_branch is: >>>>>> Append_branch("sip:[email protected]", 10 ); >>>>>> >>>>>> Regards, >>>>>> Bogdan >>>>>> >>>>>> >>>>>> Mauro Davi' wrote: >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> Hi Bogdan, >>>>>>> >>>>>>> Thanks for the reply. But I have only one question... >>>>>>> >>>>>>> Is it possible to set the branches qvalue from a script code? >>>>>>> >>>>>>> I try samething like: >>>>>>> >>>>>>> Append_branch(); >>>>>>> $ru="sip:[email protected];q=0.1" >>>>>>> >>>>>>> Or: >>>>>>> >>>>>>> Append_branch("sip:[email protected];q=0.1"); >>>>>>> >>>>>>> But the log result is ever: >>>>>>> >>>>>>> "DBG:core:serialize_branches: nothing to do - all same q!" >>>>>>> >>>>>>> Coould you help me, please? >>>>>>> >>>>>>> Thanks a lot >>>>>>> MD >>>>>>> >>>>>>> >>>>>>> -----Messaggio originale----- >>>>>>> Da: Bogdan-Andrei Iancu [mailto:[email protected]] >>>>>>> Inviato: mercoledì 25 febbraio 2009 14:54 >>>>>>> A: Mauro Davi' >>>>>>> Cc: [email protected] >>>>>>> Oggetto: Re: [OpenSIPS-Users] serialize_branches() and q value.... >>>>>>> >>>>>>> Hi Marco, >>>>>>> >>>>>>> before getting into your script, just some important notice about SIP, >>>>>>> forking and q value... >>>>>>> >>>>>>> According to RFC 3261 (and how the serialize_branches() works), when >>>>>>> you >>>>>>> have a set of destinations with different q values, the forking must >>>>>>> work like this: >>>>>>> >>>>>>> 1) order the entire set based on the q value >>>>>>> 2) select all dsts that have as q value the min q val from the set (of >>>>>>> course all of the selected dsts will have the q) >>>>>>> 3) do parallel forking with the selected dsts >>>>>>> 4) if still failed, remove the used dsts and go back to step 2 (serial >>>>>>> forking). >>>>>>> >>>>>>> >>>>>>> So, this is actually a combination of serial and parallel forking - the >>>>>>> dsts with different q will be serial forked, but dsts with the same q >>>>>>> will be parallel forked. >>>>>>> >>>>>>> Regards, >>>>>>> Bogdan >>>>>>> >>>>>>> Mauro Davi' wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> Hi All, >>>>>>>> >>>>>>>> I saw the documentation but it is to much difficult for me J (really I >>>>>>>> think that the folloeing information is missed...), so I have a >>>>>>>> question. >>>>>>>> >>>>>>>> The below script code add two new destination to my voip platform, >>>>>>>> [email protected] and [email protected] <mailto:[email protected]>. >>>>>>>> >>>>>>>> The first one works great, but the second one have the same behaviour >>>>>>>> of the first one... >>>>>>>> >>>>>>>> The question is: How I can specify the q value of every branches? >>>>>>>> >>>>>>>> Thanks in advance. >>>>>>>> >>>>>>>> MD >>>>>>>> >>>>>>>> if(uri=~"^sip:parallel@" || uri=~"^sip:serial@" ) >>>>>>>> >>>>>>>> { >>>>>>>> >>>>>>>> xlog("L_INFO","Check passed!!!\n"); >>>>>>>> >>>>>>>> $var(i)=0; >>>>>>>> >>>>>>>> while ($var(i) < 2) >>>>>>>> >>>>>>>> { >>>>>>>> >>>>>>>> xlog("L_INFO","Cycle Enter $var(i), RURI:$ru\n"); >>>>>>>> >>>>>>>> if ($var(i) == 0) >>>>>>>> >>>>>>>> { >>>>>>>> >>>>>>>> $ru="sip:[email protected]"; >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> else >>>>>>>> >>>>>>>> { >>>>>>>> >>>>>>>> append_branch(); >>>>>>>> >>>>>>>> $ru="sip:[email protected]"; >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> alias_db_lookup("dbaliases"); >>>>>>>> >>>>>>>> if (is_uri_host_local()) >>>>>>>> >>>>>>>> { >>>>>>>> >>>>>>>> # -- Inbound to inbound >>>>>>>> >>>>>>>> if(uri=~"^sip:[0-9]+@") >>>>>>>> >>>>>>>> { >>>>>>>> >>>>>>>> # only route numeric users to PSTN >>>>>>>> >>>>>>>> t_on_failure("2"); >>>>>>>> >>>>>>>> route(5); >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> route(6); >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> else >>>>>>>> >>>>>>>> { >>>>>>>> >>>>>>>> # -- Inbound to outbound >>>>>>>> >>>>>>>> # Here we must check the to domain to verify if >>>>>>>> >>>>>>>> # we can send the request to a corporate SBC >>>>>>>> >>>>>>>> sl_send_reply("403", "Forbidden"); >>>>>>>> >>>>>>>> exit; >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> $var(i) = $var(i) + 1; >>>>>>>> >>>>>>>> xlog("L_INFO","Cycle Leave $var(i), RURI:$ru"); >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> if (uri=~"^sip:serial@") >>>>>>>> >>>>>>>> { >>>>>>>> >>>>>>>> setbflag(10); >>>>>>>> >>>>>>>> serialize_branches(1); >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> route(3); >>>>>>>> >>>>>>>> exit; >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> ------------------------------------------------------------------------ >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Users mailing list >>>>>>>> [email protected] >>>>>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> _______________________________________________ >>>>> Users mailing list >>>>> [email protected] >>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>>> >>> >>> >>> >> >> > > > _______________________________________________ Users mailing list [email protected] http://lists.opensips.org/cgi-bin/mailman/listinfo/users
