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