Hi Steven,

group hunting can be done, this is not the problem. Chris's special need 
is to fire a parallel forking set, but not all branches in the same time.

Regards,
Bogdan

Steven C. Blair wrote:
> There are somewhat ugly ways to do this. I did it in SER v0.9.x but admit my 
> approach was not very elegant. SER v2 has a module to do sequential hunting 
> in a more elegant fashion.
>
> In my approach I check if the extension has permission to use call hunting 
> and if hunting is enabled at this time. I use two avp flags for this as 
> follows. I also use a new table call "sam" which can store multiple entries 
> for the same extension where the extension is a primary key and duplicate 
> keys are permitted. Huntlist is the attribute name which contains the 
> extension to which the call should hunt.
>
>
>         # hunting (serial forking)
>         if (avp_db_load("$ruri/username", "s:allow_hunt")) {
>            if (avp_check("s:allow_hunt", "eq/y/i")) {
>               if (avp_db_load("$ruri/username", "s:use_hunt")) {
>                  if (avp_check("s:use_hunt", "eq/y/i")) {
>                     avp_write("$ruri/username", "$ocn");
>                     avp_delete("s:allow_hunt");
>                     xlog("L_INFO", "\n[SER]: [%Tf] [%ci] Call Hunting Enabled 
> for <%ru>\n");
>                     avp_db_load("$ruri/username", "s:huntlist/sam");
>                     xlog("L_INFO", "\n[SER]: [%Tf] [%ci] Call Hunting Started 
> to <%ru>\n");
>                     t_on_failure("6");
>                     t_relay();
>                     break;
>                  };
>               } else {
>                  xlog("L_INFO", "\n[SER]: [%Tf] [%ci] Call Hunting allowed 
> but use_hunt is undefined <%ru>\n");
>                  avp_delete("s:allow_hunt");
>                  avp_delete("s:use_hunt");
>                  break;
>               }; # end load use_hunt
>            };
>         };
>
>
> Then in failure_route[6] iterate through each huntlist entry. "ocn" is the 
> original called number and is saved so we can redirect an unanswered call to 
> that extension's voicemail mailbox
>
>
> # Iterate through extension list for subscribers with call hunting enabled   
> failure_route[6] {
>   xlog("L_INFO", "\n[SER]: [%Tf] [%ci] Failure Block #6: CALL HUNTING for 
> <%ru> from <%fu> at <%is>\n");
>   # use the first element of the list (if any) and delete it from list
>
>   if (avp_pushto("$ruri/username", "s:huntlist"))
>   {
>      xlog("L_INFO", "\n[SER]: [%Tf] [%ci] FB#6: Substitute huntlist member 
> for R-URI. Change R-URI to <%ru> for <%tu>\n");
>      route(10);
>      xlog("L_INFO", "\n[SER]: [%Tf] [%ci] FB#6: Checking if huntlist member 
> should be skipped. <%ru>,<%tu>\n");
>      if (avp_check("$huntskip","eq/y/i")) {
>        xlog("L_INFO", "\n[SER]: [%Tf] [%ci] FB#6: Skipping huntlist member. 
> <%ru>,<%tu>\n");
>        avp_delete("s:huntlist");
>        rewriteuser("010101");
>        avp_write("1", "inv_timeout"); # new
>      } else {
>        xlog("L_INFO", "\n[SER]: [%Tf] [%ci] FB#6: Do NOT skip huntlist 
> member. Trying <%ru> for <%tu>\n");
>        avp_delete("s:huntlist");
>        avp_delete("$afn");
>        avp_write("$ruri/username", "$afn");
>      };
>      xlog("L_INFO", "\n[SER]: [%Tf] [%ci] FB#6: Check complete. Looking up 
> location for <%ru> to <%tu>\n");
>      lookup("location");
>      append_branch();
>      t_on_failure("6");
>      xlog("L_INFO", "\n[SER]: [%Tf] [%ci] RB#6: Preparing to relay call to 
> next huntlist member To <%tu>  R-uri: <%ru>:  \n");
>      t_relay();
>   } else {
>      xlog("L_INFO", "\n[SER]: [%Tf] [%ci] FB#6: No more huntlist members for 
> <%ru>. Going to voicemail\n");
>      avp_pushto("$ruri/username", "$ocn");
>      route(9);
>      break;
>   };
>   xlog("L_INFO", "\n[SER]: [%Tf] [%ci] FB#6: END CALL HUNTING for <%ru> from 
> <%fu> at <%is>\n");
>   break;
> }
>
>
>
> -Steve
>
>
>
>
>
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Bogdan-Andrei Iancu
> Sent: Tuesday, April 21, 2009 6:54 AM
> To: Mauro Davi'
> Cc: [email protected]
> Subject: Re: [OpenSIPS-Users] R: R: Ring Group - Memory Hunt - with serial 
> forking?
>
> Hi Mauro,
>
> yes, you can can obtain a sequential forking, but what Chris is a 
> parallel forking but with delayed branches.
>
> Regards,
> Bogdan
>
>
> Mauro Davi' wrote:
>   
>> Sorry,
>>
>> and if I can change the qvalue with the lookup function (how with the path 
>> proposed) I cannot obtain a working sequential forking (i.e. the first call 
>> is sent to the first contact after the ring timeout the call (with the 
>> next_branch function) is forwarded to the second contact and so on...)? 
>>
>> Regards,
>>      MD
>>
>> -----Messaggio originale-----
>> Da: Bogdan-Andrei Iancu [mailto:[email protected]] 
>> Inviato: martedì 21 aprile 2009 11:11
>> A: Mauro Davi'
>> Cc: Chris Maciejewski; [email protected]
>> Oggetto: Re: R: [OpenSIPS-Users] Ring Group - Memory Hunt - with serial 
>> forking?
>>
>> Hi Mauro,
>>
>> not really (as I understand it). What Chris wants to do is not to start 
>> all branches (for parallel forking) in the same time (as you do), but to 
>> start them one by one (ad different time intervals).
>>
>> Regards,
>> bogdan
>>
>> Mauro Davi' wrote:
>>   
>>     
>>> Sorry Bogdan,
>>>
>>> If I understand, this is the scenarious that I implemented.
>>>
>>> With the lookup function patch (that add the q value to the input 
>>> parameter, the same assigned to you) Chris can invoke the lookup function 
>>> three time with the three subscriber and obviously three different qvalue. 
>>> After he can invoke the serialize_branches(1) function.
>>> Finally he can use the next_branch route in the failure route block to fork 
>>> sequentially the INVITE on the next subscriber...
>>> And when the next_branch function return "no other branches" he can forward 
>>> the call to the voicemail...
>>>
>>> I don't know if the patch is applied but in this way, I think, that Chris 
>>> can solve his problem...
>>>
>>> Regards,
>>>     MD
>>>
>>>  
>>> -----Messaggio originale-----
>>> Da: [email protected] 
>>> [mailto:[email protected]] Per conto di Bogdan-Andrei Iancu
>>> Inviato: martedì 21 aprile 2009 10:39
>>> A: Chris Maciejewski
>>> Cc: [email protected]
>>> Oggetto: Re: [OpenSIPS-Users] Ring Group - Memory Hunt - with serial 
>>> forking?
>>>
>>> Hi Chris,
>>>
>>> Chris Maciejewski wrote:
>>>   
>>>     
>>>       
>>>> Hi,
>>>>
>>>> I am trying to implement a Ring Group with
>>>> a Memory Hunt ring strategy.
>>>>
>>>> The scenario looks as follows:
>>>>
>>>> There is a subscriber A, B and C. All of them are members of the same
>>>> Ring Group.
>>>>
>>>> When there is a INVITE to a "Ring Group" Opensips should send an
>>>> INVITE to subscriber A, after 10 seconds it should send an INVITE to
>>>> subscriber B and after another 10 seconds one more INVITE
>>>> to subscriber C. If there is no 200 OK from A,B or C in 40 seconds,
>>>> call should be forwarded to Voicemail server.
>>>>   
>>>>     
>>>>       
>>>>         
>>> This is something you cannot do right now - to wait N seconds and create 
>>> another branch of an existing call (without cancelling the previous 
>>> branches).
>>>
>>> What you want to do is a kind of "asynchronous" parallel forking.
>>>
>>> Regards,
>>> Bogdan
>>>
>>>
>>> _______________________________________________
>>> 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

Reply via email to