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

Daniel Zanutti daniel.zanutti at gmail.com
Tue Jul 19 16:51:48 CEST 2016


Hi Bogdan

That's great, it will help a lot.

Thanks

On Tue, Jul 19, 2016 at 6:45 AM, Bogdan-Andrei Iancu <bogdan at opensips.org>
wrote:

> 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 Developerhttp://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>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 Developerhttp://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>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 Developerhttp://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>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 listDevel at lists.opensips.orghttp://lists.opensips.org/cgi-bin/mailman/listinfo/devel
>>>
>>>
>>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/devel/attachments/20160719/6b9d50be/attachment.htm>


More information about the Devel mailing list