|
From: | FEICHTER Christoph |
Subject: | Re: [osip-dev] implicit subscription |
Date: | Fri, 23 Jun 2017 11:31:12 +0000 |
hi aymeric, I just tried your latest patch (v4). which function would you use to build a NOTIFY request after the BYE has been sent/received ? eXosip_call_build_request ? this fails, because you did not prevent the call from being freed. I guess we will need the return for leaving, in case of an active implicit subscription – like this: static
int _eXosip_release_finished_calls (struct eXosip_t *excontext, eXosip_call_t * jc, eXosip_dialog_t
* jd) { osip_transaction_t *tr; time_t now = osip_getsystemtime (NULL); tr = _eXosip_find_last_inc_transaction (jc, jd,
"BYE");
if (tr == NULL) tr = _eXosip_find_last_out_transaction (jc, jd,
"BYE");
if (tr != NULL && (tr->state == NIST_TERMINATED || tr->state == NICT_TERMINATED)) {
int did = -2;
if (jd != NULL) did = jd->d_id; >
if (now < jd->implicit_subscription_expire_time) > { >
/* keep this call & dialog, although it's terminated */ >
return OSIP_SUCCESS; > } OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_INFO2, NULL,
"eXosip: _eXosip_release_finished_calls remove a dialog (cid=%i did=%i)\n", jc->c_id, did));
/* Remove existing reference to the dialog from transactions! */ _eXosip_call_remove_dialog_reference_in_call (jc, jd); REMOVE_ELEMENT (jc->c_dialogs, jd); _eXosip_dialog_free (excontext, jd);
return OSIP_SUCCESS; }
return OSIP_UNDEFINED_ERROR; } br, christoph From: Aymeric Moizard [mailto:address@hidden
Hi Christoph, I have made additionnal minor modification and I think the patch is 100% ready for integration. The change: When receiving OR sending a BYE after a REFER, the "dialog" is kept. This change allow to still accept NOTIFY after receiving OR sending a BYE. When receiving the final NOTIFY with reason=terminated, the dialog is released immediatly and CALL_RELEASE will happen. If no NOTIFY with terminated is received, the CALL_RELEASE will still happen once the subscription is expired. Please review the attached v4 patch and let me know. I will then commit! Regards Aymeric 2017-06-17 15:18 GMT+02:00 Aymeric Moizard <address@hidden>: Hi Christoph, This is a V3 patch. The patch looks more consistent compared to what I was expecting. I think there might still be minor issue, but should be 95% ready! What do you think? Regards Aymeric 2017-06-12 12:04 GMT+02:00 FEICHTER Christoph <address@hidden>: hi aymeric, yes, that’s exactly what my intention was with the patch. in pseudo code: IF (an implicit subscription is active) BYE triggers only
EXOSIP_CALL_CLOSED NOTIFY (state=terminated) triggers
EXOSIP_CALL_RELEASED
ELSE behaviour remains as before br, christoph From: Aymeric
Moizard [mailto:address@hidden]
I have read the patch quickly and I think it is still not what I want. May be closer ;) About EXOSIP_CALL_RELEASED: this event is supposed to happen for ANY call, whatever it was estbalished or not. And it indicates that ALL ressources (and not part of them) were released. I will try to be more precise in my next email. Regards Aymeric 2017-06-10 7:41 GMT+02:00 FEICHTER Christoph <address@hidden>: hi aymeric, thanks for your input. it’s clear so far for the meaning of
EXOSIP_CALL_CLOSED; I have adapted the patch accordingly. you are right regarding the timeout. The idea to implement this timeout in the app – and call eXosip_call_remove on timeout –
was not so good for exisiting applications; I moved it into eXosip. The default is 60 sec. but could also made configureable using
eXosip_set_option. regarding
EXOSIP_CALL_RELEASED: If the timeout of an implicit subscription happens, EXOSIP_CALL_RELEASED is now sent. I was just wondering why this event is not consistently called when the call-context is released inside eXosip. As far as I know this event is only used for
-
cancelling a call, at the callee
-
sending an INVITE failure, also at the callee btw: I am doing it now without this new function eXosip_call_remove, since the timeout is no more up to the application. see my new attempt attached. what do you think about this second try ? br, christoph From: Aymeric
Moizard [mailto:address@hidden]
2017-06-07 16:33 GMT+02:00 FEICHTER Christoph <address@hidden>: hi aymeric, Hi Christoph Tks for the patch! Here are my comments: First, I think it's important to make sure current application won't get affected by the new behavior. 1/ EXOSIP_CALL_CLOSED should remain as it should fire "at the same time" as before. (when receving BYE). sidenote: even if dialog is still alive, the "call" can be considered CLOSED. CLOSED is something related to audio/video/media being active or not. 2/ the same is true for EXOSIP_CALL_RELEASED sidenote: RELEASED is an event that allow to verify that resource are RELEASED internally. If you remove it for some use-case, it will break this idea. And currently it would introduce leaks into all my apps ;) 3/ If I'm correct, an implicit subscription has a timeout and I was expecting this "expires" to be the exact reason for delaying the "dialog deletion" and the RELEASED event. In your proposed change, there is no "delay" idea. It's just ON and OFF. Thus, it would introduce some leak risk: if the APP don't call "eXosip_call_remove", the context would remain. (existing app would suffer much from this) MODIFICATION REQUIRED: According to me, the new variable "implicitSubscriptionActive" should be something like implicitSubscriptionExpireTime and should contains the time subscription will expire. Once expires, the dialog would be internally deleted and EXOSIP_CALL_RELEASED would fire. What do you think? Regards Aymeric
--
--
--
--
|
[Prev in Thread] | Current Thread | [Next in Thread] |