[OpenSIPS-Users] early dialog termination
Bogdan-Andrei Iancu
bogdan at opensips.org
Mon Oct 17 06:37:50 UTC 2022
Hi Ryzhik,
Right, the transaction must be forced to stay until you are done with a
final reply. Unfortunately there is no clear way to do this from script
(this may be subject of further small improvements), but you can try
taking advantage of the `t_write_req` [1] for this purpose, even if you
do not have to actually write anything to outer world - just fake it.
[1] https://opensips.org/html/docs/modules/3.2.x/tm.html#func_t_write_req
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
https://www.opensips-solutions.com
OpenSIPS Summit 27-30 Sept 2022, Athens
https://www.opensips.org/events/Summit-2022Athens/
On 10/13/22 2:45 PM, Ryzhik Ivan wrote:
> Hi.
> One more question.
> Everything works fine except the transaction was deleted after 15
> sec after the initial route was finished.
> on INVITE i last do t_reply_with_body(183, "Session progress", ...)
> and than exit;
>
> on end route log :
>
> 2022-10-13T10:58:01.994598+00:00 DBG:tm:_reply_light: reply sent out.
> buf=0x7f558a087d98: SIP/2.0 1..., shmem=0x7f5549797470: SIP/2.0 1
> 2022-10-13T10:58:01.994676+00:00 DBG:tm:_reply_light: finished
>
> 2022-10-13T10:58:01.995835+00:00 DBG:tm:do_t_cleanup: transaction
> 0x7f5549793b18 already updated! Skipping update!
> 2022-10-13T10:58:01.996020+00:00 DBG:tm:cleanup_uac_timers: RETR/FR
> timers reset
> 2022-10-13T10:58:01.996202+00:00 *DBG:tm:insert_timer_unsafe: [2]:
> 0x7f5549793b98 (12)*
> 2022-10-13T10:58:01.996317+00:00 * DBG:tm:t_unref: UNREF_UNSAFE:
> [0x7f5549793b18] after is 0*
> 2022-10-13T10:58:01.996488+00:00 DBG:core:destroy_avp_list:
> destroying list (nil)
> 2022-10-13T10:58:01.996673+00:00 DBG:core:receive_msg: cleaning up
>
> 2022-10-13T10:58:07.651091+00:00* DBG:tm:timer_routine: timer
> routine:2,tl=0x7f5549793b98 next=(nil), timeout=12*
> 2022-10-13T10:58:07.651332+00:00 DBG:tm:wait_handler: removing
> 0x7f5549793b18 from table
> 2022-10-13T10:58:07.651425+00:00 DBG:tm:delete_ce*ll: delete
> transaction 0x7f5549793b18*
> 2022-10-13T10:58:07.651513+00:00 DBG:tm:wait_handler: done
>
> Can you tell me how I can i fix this? Transaction marked safe for
> deletion...
> Regards, Ivan
>
> ср, 12 окт. 2022 г. в 13:11, Bogdan-Andrei Iancu <bogdan at opensips.org
> <mailto:bogdan at opensips.org>>:
>
> Perfect !!!
>
> Bogdan-Andrei Iancu
>
> OpenSIPS Founder and Developer
> https://www.opensips-solutions.com <https://www.opensips-solutions.com>
> OpenSIPS Summit 27-30 Sept 2022, Athens
> https://www.opensips.org/events/Summit-2022Athens/ <https://www.opensips.org/events/Summit-2022Athens/>
>
> On 10/12/22 1:09 PM, Ryzhik Ivan wrote:
>> I found a solution. hex strings are reversed).
>> Thank you very much!
>>
>> ср, 12 окт. 2022 г. в 12:59, Ryzhik Ivan <ryzhik.ivan at gmail.com
>> <mailto:ryzhik.ivan at gmail.com>>:
>>
>> and one more research: $T_id returns hex encoded label.hashid
>> but my attempts failed:
>> got $T_id = 6545e285.3fe4
>> Send: {"jsonrpc": "2.0", "method": "t_reply", "id": 1,
>> "params": {"code": "487", "reason": "Terminating",
>> "trans_id": "16356:1699078789", "to_tag": "<null>"}}
>> Got:
>> b'{"jsonrpc":"2.0","error":{"code":404,"message":"Transaction
>> not found"},"id":1}'
>>
>>
>> ср, 12 окт. 2022 г. в 11:13, Ryzhik Ivan
>> <ryzhik.ivan at gmail.com <mailto:ryzhik.ivan at gmail.com>>:
>>
>> Thank you, Bogdan.
>> I got stuck with tm documentation.
>> 1) MI t_reply command has named parameters, ok, no
>> problem.
>> 2) trans_id - transaction identifier (has the
>> hash_entry:label format) - what is this? if i use $T_id
>> i got reply "Invalid trans_id".
>> 3) Where can I get to_tag from script level on initial
>> invite?
>> ...
>> t_reply_with_body(183, "Session progress",
>> $(var(body){re.subst,$var(re)}) );
>> avp_db_query("insert into moh (callid, timeout,
>> tid,totag) values ('$ci', $var(wait_time), '$T_id',
>> '??????')");
>> ...
>>
>> Regards, Ivan.
>>
>> вт, 11 окт. 2022 г. в 12:35, Bogdan-Andrei Iancu
>> <bogdan at opensips.org <mailto:bogdan at opensips.org>>:
>>
>> Hi Ivan,
>>
>> you can use timer_route, but as there is no way to
>> send a reply for a particular transaction from script
>> level (only to the currently processed request), you
>> will have to trigger the MI cmds from the timer
>> route, which is a bit hackish ....
>>
>> Regards,
>>
>> Bogdan-Andrei Iancu
>>
>> OpenSIPS Founder and Developer
>> https://www.opensips-solutions.com <https://www.opensips-solutions.com>
>> OpenSIPS Summit 27-30 Sept 2022, Athens
>> https://www.opensips.org/events/Summit-2022Athens/ <https://www.opensips.org/events/Summit-2022Athens/>
>>
>> On 10/11/22 11:47 AM, Ryzhik Ivan wrote:
>>> Hi, Bogdan!
>>> What d' you think, can we use timer_route instead of
>>> an external script?
>>> Regards, Ivan.
>>>
>>> пн, 10 окт. 2022 г. в 17:04, Bogdan-Andrei Iancu
>>> <bogdan at opensips.org <mailto:bogdan at opensips.org>>:
>>>
>>> Hi Ryzhik,
>>>
>>> Without a t_relay() it makes not much sense to
>>> have an dialog structure at all - the dialog
>>> module in opensips is actually design for
>>> proxied calls, not for UAC calls.
>>>
>>> IMO, you should keep it a transaction level, by
>>> sending replies back only. When getting the
>>> INVITE, put its call-id into a DB table (to keep
>>> only the "active" session) together with a
>>> lifetime / expiration time. When getting a
>>> CANCEL, update the table (set lifetime to 0), to
>>> know it is terminated. And use an simple
>>> external script that keeps scanning the DB for
>>> (1) sending 487 Terminated via MI if the record
>>> has 0 lifetime or (2) send a 408 Timeout via MI
>>> if the lifetime exceeded.
>>> In a similar way you can handle the BYE - send
>>> back 200OK for the BYE and set 0 in lifetime, to
>>> send a 487 canceled back
>>>
>>> Regards,
>>>
>>> Bogdan-Andrei Iancu
>>>
>>> OpenSIPS Founder and Developer
>>> https://www.opensips-solutions.com <https://www.opensips-solutions.com>
>>> OpenSIPS Summit 27-30 Sept 2022, Athens
>>> https://www.opensips.org/events/Summit-2022Athens/ <https://www.opensips.org/events/Summit-2022Athens/>
>>>
>>> On 10/10/22 4:33 PM, Ryzhik Ivan wrote:
>>>> Hello!
>>>> My opensips version is 3.1 with tm,dialog and
>>>> rtpengine modules.
>>>> On incoming INVITE i'm creating an early dialog
>>>> with 183 replies and i'm playing audio to
>>>> caller with rtpengine, no t_relay() on this
>>>> step, OS is acting as UAS endpoint.
>>>> If the caller cancels the invite with a CANCEL
>>>> message - all works great.
>>>> But some users terminate dialog with BYE message.
>>>> 1) on BYE with to-tag OS can't find dialog with
>>>> match_dialog(), because to-tag presents.
>>>> 2) if i use load_dialog_ctx($ci) - it is
>>>> possible to handle BYE.
>>>> 3) in early dialog termination with BYE we also
>>>> need to send final response to the INVITE
>>>> transaction.
>>>>
>>>> Maybe I did something wrong, but I can't handle
>>>> the final response to INVITE in this case.
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20221017/97c59f1e/attachment.html>
More information about the Users
mailing list