Hi John,

What version of opensips are you using? because in 1.6 you are allowed 
to use those functions in LOCAL_ROUTE.

Regards,
Bogdan

John Quick wrote:
> Hi Bogdan
>
> I have changed my script to only use engage_media_proxy() - I believe this 
> has solved the problem with
> ending the media proxy sessions.
>
> However, local_route calling acc_aaa_request twice continues to be a problem. 
> Thanks, I was aware of
> the risk that gflag will not always work if there are many calls all timing 
> out together. I would
> prefer to use flags in the dialog or $DLG_dir, but practical tests showed 
> that this was not possible.
> $DLG_dir and $DLG_status both return null, yet $DLG_lifetime returns a proper 
> value. When I tried to
> use the function store_dlg_value() in local_route, opensips refused to run 
> and reports an error in the
> script.
>
> John
>
>   
>> -----Original Message-----
>> From: Bogdan-Andrei Iancu [mailto:[email protected]]
>> Sent: 15 November 2009 19:32
>> To: [email protected]; OpenSIPS users mailling list
>> Subject: Re: [OpenSIPS-Users] Cleanup acc & mediaproxy when dialog 
>> bye_on_timeout triggers
>>
>> Hi John,
>>
>> John Quick wrote:
>>     
>>> I am using the bye_on_timeout_flag within the Dialog module to limit the 
>>> maximum duration for a
>>>       
>> call.
>>     
>>> When it is triggered I am having problems cleaning up - i.e. accounting the 
>>> end of call correctly
>>>       
>> and
>>     
>>> ending the mediaproxy session. I am not using engage_media_proxy() 
>>> function, instead preferring
>>>       
>> to
>>     
>>> have more control with use_media_proxy() and end_media_session().
>>>
>>> >From a search of the archived questions on this forum I found the trick is 
>>> >to create a
>>>       
>> local_route
>>     
>>> section and use a check based on is_method("BYE") to determine when to 
>>> execute acc_aaa_request().
>>>
>>> This works ok, but it is triggered twice at the end of the call - once for 
>>> the BYE sent upstream
>>>       
>> and
>>     
>>> again for the BYE sent downstream. The only solution I could find (I've 
>>> spent many hours testing
>>>       
>> ideas
>>     
>>> for this) is the use of a global flag that is toggled each time the 
>>> local_route block gets a BYE
>>> method. Then the code only calls acc_aaa_request() when the global flag is 
>>> set - i.e. only one in
>>> every two times.
>>>   if (is_gflag("1")) {
>>>       acc_aaa_request("Internal BYE");
>>>   }
>>>
>>>   # Use Global flag 1 to avoid double reporting/accounting of timeout BYE's
>>>   if (is_gflag("1")) {
>>>       reset_gflag("1");
>>>   } else {
>>>       set_gflag("1");
>>>   }
>>>
>>> This is not a very elegant or satisfactory solution but it should just 
>>> about work and hopefully
>>>       
>> not
>>     
>>> many timeouts will occur anyway. Any suggestions for a better solution 
>>> would be welcome. I have
>>>       
>> tried
>>     
>>> Dialog values and transaction flags - they don't work.
>>>
>>>       
>> This solution is not correct (using the gflags) - triggering the acc
>> from local_route is the right thing to do, but not using the gflags -
>> these flags are global and shared by entire opensips which can run (in
>> the same time) multiple local_routes for different calls -> so you may
>> have a mixture between different calls.
>>
>> Try using the "$DLG_dir" script variable
>> (http://www.opensips.org/html/docs/modules/devel/dialog.html#id273200)
>> to do the acc only for only one direction will be ideally, but reviewing
>> the code I think that variable is not populated in local_route - if you
>> could give it a try and let me know, it will be great.
>>
>> Other idea will be to use the dialog flag or values - you said they do
>> not work, even if they should - what seams to be the problem here ?
>>
>>     
>>> The other problem is how to end the media proxy session. The transaction 
>>> flags set for the Invite
>>>       
>> are
>>     
>>> not visible in the local_route block when it is handling the internally 
>>> generated BYE's so I
>>>       
>> cannot
>>     
>>> try the normal checks that would be used in the main route block for BYE. 
>>> Perhaps I should just
>>>       
>> call
>>     
>>> end_media_session(), but will it even work from local_route? If I change my 
>>> script to start using
>>> engage_media_proxy() will I lose the flexibility of being able to check 
>>> which calls need media
>>>       
>> proxy
>>     
>>> and which don't? I don't want them all using it - only those with far-end 
>>> NAT.
>>>
>>>       
>> Shouldn't the media proxy automatically stop when the dialog is
>> destroyed ? if you use the enagage_mediaproxy(), I think you do not have
>> to explicitly terminate the relay session as the this op will be done
>> based on the "dialog destroyed" event.
>>
>> If it does not work like this, you can use a dialog flag to remember
>> (from INVITE time) if the NAT was detected or not. And in local_route
>> you can do an explicit end_mediaproxy().
>>
>> Regards,
>> Bogdan
>>
>>     
>>> John Quick
>>> Smartvox Limited
>>>
>>>
>>>
>>> _______________________________________________
>>> 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