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 <bog...@opensips.org <mailto:bog...@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.i...@gmail.com
    <mailto:ryzhik.i...@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.i...@gmail.com <mailto:ryzhik.i...@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
            <bog...@opensips.org <mailto:bog...@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
                <bog...@opensips.org <mailto:bog...@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@lists.opensips.org  <mailto:Users@lists.opensips.org>
                    http://lists.opensips.org/cgi-bin/mailman/listinfo/users  
<http://lists.opensips.org/cgi-bin/mailman/listinfo/users>




_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to