[OpenSIPS-Devel] Get Dialog from callid or h_entry/h_id

Bogdan-Andrei Iancu bogdan at opensips.org
Tue Jul 19 11:45:23 CEST 2016


Hi Daniel,

The terminate_dlg() function is exclusively used via the dialog API (it 
is not internally used by the dialog module).

The only module that uses the function via the dialog API is the 
rtpproxy module, which is testing the return code in a convenient way ( 
< 0 -> error).

So, returning 1 (instead of 0) for dialog not found should not break 
anything right now.

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

On 15.07.2016 19:59, Daniel Zanutti wrote:
> Actually I did register to receive the dialog callback and it's 
> working fine.
>
> The problem happens when I receive a 200 OK of the Invite, 
> simultaneously with BYE. On BYE i delete the call from my controls, 
> then process the 200 OK, dialog has all info of the call and I load it 
> back. I'm not sure if it's a bug but the fact is that I need to check 
> if dialog still exist.
>
> Will it embarrass so much the system to return a different positive value?
>
> On Fri, Jul 15, 2016 at 12:48 PM, Bogdan-Andrei Iancu 
> <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>
>     Hi,
>
>     Why don't you register dialog callback to get notified when the
>     call is terminated ? in this case, the dialog module will trigger
>     you if a call gets terminated (expired or bye'ed)
>
>     Regards,
>
>     Bogdan-Andrei Iancu
>     OpenSIPS Founder and Developer
>     http://www.opensips-solutions.com
>
>     On 15.07.2016 17:58, Daniel Zanutti wrote:
>>     Hi Bogdan
>>
>>     I developed a billing mecanism to control how long calls can
>>     last, so I need to keep tracking all calls until they hangup.
>>     Every X seconds, I check all calls on Opensips and hangup some of
>>     them if necessary.
>>
>>     For some reason (maybe a bug), some random calls (1 in a 1M or
>>     more) still exist in my mecanism after call is hangup, so I try
>>     to hangup this call using terminate_dlg() and wait until I
>>     receive a trigger from dialog module, confirming that it is
>>     finalized. In fact, I never receive the trigger from dialog
>>     module, because the call no longer exist and I have no way to
>>     check this.
>>
>>     I think just changing the terminate_dlg function to return any
>>     number that identifies this dialog is no longer valid, it's OK to
>>     me and I can remove this call from my structure. A possibility to
>>     check if call is UP would be even better.
>>
>>     What do you think can be done?
>>
>>     Thanks for responding.
>>
>>
>>     On Thu, Jul 14, 2016 at 1:18 PM, Bogdan-Andrei Iancu
>>     <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>>
>>         Hi Daniel,
>>
>>         Indeed, there is none. Why is so important to know if the
>>         dialog really existed ? you want to know if it was terminated
>>         by YOU and not by something else prior to your terminate_dlg() ?
>>
>>         We may consider returning a different positive code if no
>>         dialog was found.
>>
>>         Regards,
>>
>>         Bogdan-Andrei Iancu
>>         OpenSIPS Founder and Developer
>>         http://www.opensips-solutions.com
>>
>>         On 13.07.2016 21:21, Daniel Zanutti wrote:
>>>         Hi
>>>
>>>         Anyone could please help on this?
>>>
>>>         Thanks
>>>
>>>
>>>         On Mon, Jul 11, 2016 at 3:23 PM, Daniel Zanutti
>>>         <daniel.zanutti at gmail.com <mailto:daniel.zanutti at gmail.com>>
>>>         wrote:
>>>
>>>             Hi
>>>
>>>             I need to confirm if a call is UP and terminate it from
>>>             my code. I have previously stored callid, h_entry and
>>>             h_id on an internal list, so I'm executing at a specific
>>>             time:
>>>
>>>             dlg_api.terminate_dlg(h_entry, h_id);
>>>
>>>             If the call is still running, it works nicely and hangup
>>>             the call. If there is a problem, I get a negative value
>>>             and solve too. The problem is if the call is not up
>>>             anymore, I get a return == 0. This is the code of
>>>             terminate_dlg function:
>>>
>>>             struct dlg_cell * dlg = NULL;
>>>
>>>             dlg = lookup_dlg(h_entry, h_id);
>>>
>>>                     if(!dlg)
>>>                             return 0;
>>>
>>>             This function "lookup_dlg" isn't exported.
>>>
>>>             Is there anyway to confirm if the call is still running,
>>>             if I have these values Callid, h_entry and h_id?
>>>
>>>             Thanks!
>>>
>>>
>>>
>>>
>>>         _______________________________________________
>>>         Devel mailing list
>>>         Devel at lists.opensips.org <mailto:Devel at lists.opensips.org>
>>>         http://lists.opensips.org/cgi-bin/mailman/listinfo/devel
>>
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/devel/attachments/20160719/c36bc8f2/attachment.htm>


More information about the Devel mailing list