[OpenSIPS-Users] Opensips and rtpengine_play_media not absorbing ACK

Kevin Kennedy kennedy4260 at gmail.com
Sat Nov 11 01:26:30 UTC 2023


I was able to send the BYE to the call by adding a parameter in the dialog
module to timeout the dialog with a short time letting the announcement
play, and added the create_dialog with the flag of B to send BYE on dialog
timeout at the beginning of the route.  Now that the transactions are
working correctly, I can use the same route for the calls with SDP as well
and tighten up the script.  Thanks for helping out with some code examples,
and letting me update on my progress on this thread.  Hopefully this can
help someone else out having a similar problem when trying to use Opensips
with RTPENGINE as an announcement server.

modparam("dialog", "default_timeout", 12)

route["RTPENGINE"]{
    if (has_body("application/sdp")) {
        create_dialog("B");
        rtpengine_offer();
        $json(reply) := $rtpquery;
        $var(port)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local
port);
        $var(addr)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local
address);
        remove_body_part();
        append_to_reply("Contact:<sip:$rU@
$socket_in(ip):$socket_in(port)>\r\n");
        append_to_reply("Content-Type: application/sdp\r\n");
        $var(body) = $(rb{re.subst,/(IP4.).*/\1$var(addr)/g});
        $var(body) = $(var(body){re.subst,/(audio.)...../\1$var(port)/g});
        t_reply_with_body(200, "OK", $var(body));
        rtpengine_play_media("call-id=$ci from-tag=$ft
file=/etc/rtpengine/unk_num.wav");
        exit;
    } else {
        create_dialog("B");
        $var(newbody) = ("v=0\r\no=Opensips " + $Ts + " 0 IN IP4 " +
$socket_in(ip) + "\r\ns=-\r\nc=IN IP4 " + $socket_in(ip) + "\r\nt=0
0\r\nm=audio " + $sp + " RTP/AVP 0 101\r\na=sendrecv\r\na=rtpmap:0
PCMU/8000\r\na=rtpmap:101 telephone-event/8000\r\na=fmtp:101 0-15\r\n");
        rtpengine_offer("from-tag=$ft replace-session-connection
trust-address replace-origin codec-strip-g729",,$var(body),$var(newbody));
        $json(reply) := $rtpquery;
        $var(port)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local
port);
        $var(addr)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local
address);
        append_to_reply("Contact:<sip:$rU@
$socket_in(ip):$socket_in(port)\r\n");
        append_to_reply("Content-Type: application/sdp\r\n");
        $var(body) = $(var(body){re.subst,/(audio.)...../\1$var(port)/g});
        t_reply_with_body(200, "OK", $var(body));
        rtpengine_play_media("call-id=$ci from-tag=$ft
file=/etc/rtpengine/unk_num.wav");
        exit;
    }

}

Thank you.

Kevin

On Fri, Nov 10, 2023 at 4:54 PM Kevin Kennedy <kennedy4260 at gmail.com> wrote:

> Looks like if I put t_newtran(); in the main route this created the
> transaction and allowed the ACK to be recognized.  Now How do I force
> Opensips to send a BYE.
>
> Thank you.
>
> On Fri, Nov 10, 2023 at 11:44 AM Kevin Kennedy <kennedy4260 at gmail.com>
> wrote:
>
>>
>>
>>
>>>>>>>>> I was able to get audio,  The problem I was having is the
>>>>>>>>> Originator string in the SDP.  However, I am still having the same issue
>>>>>>>>> with accepting the ACK from the Originator and not resending the 200OK.
>>>>>>>>> Can someone please help with this issue?
>>>>>>>>>
>>>>>>>>> Thank you
>>>>>>>>>
>>>>>>>>> *Code snippet for the Late Media route*
>>>>>>>>> route["LateMedia3"]{
>>>>>>>>>     if (has_body("application/sdp")) {
>>>>>>>>>         xlog("######## Entered route LateMedia3 with Fake SDP from
>>>>>>>>> Originator ########\r\n");
>>>>>>>>>         rtpengine_offer();
>>>>>>>>>         $json(reply) := $rtpquery;
>>>>>>>>>
>>>>>>>>> $var(port)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local port);
>>>>>>>>>
>>>>>>>>> $var(addr)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local address);
>>>>>>>>>         remove_body_part();
>>>>>>>>>         append_to_reply("Contact:<sip:$rU@
>>>>>>>>> $socket_in(ip):$socket_in(port);user=phone>\r\n");
>>>>>>>>>         append_to_reply("Content-Type: application/sdp\r\n");
>>>>>>>>>         $var(body) = $(rb{re.subst,/(IP4.).*/\1$var(addr)/g});
>>>>>>>>>         $var(body) =
>>>>>>>>> $(var(body){re.subst,/(audio.)...../\1$var(port)/g});
>>>>>>>>>         t_reply_with_body(200, "OK", $var(body));
>>>>>>>>>         rtpengine_play_media("call-id=$ci from-tag=$ft
>>>>>>>>> file=/etc/rtpengine/unk_num.wav");
>>>>>>>>>         async(sleep(10), after_media);
>>>>>>>>>      } else {
>>>>>>>>>         xlog("######## Entered route LateMedia3 No SDP received,
>>>>>>>>> Create one from variable ########\r\n");
>>>>>>>>>         $var(newbody) = ("v=0\r\no=Opensips " + $Ts + " 0 IN IP4
>>>>>>>>> 10.255.100.147\r\ns=-\r\nc=IN IP4 10.255.100.147\r\nt=0 0\r\nm=audio 3140
>>>>>>>>> RTP/AVP 0 101\r\na
>>>>>>>>> =sendrecv\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:101
>>>>>>>>> telephone-event/8000\r\na=fmtp:101 0-15\r\n");
>>>>>>>>>         xlog("######################### Body to RTPENGINE is
>>>>>>>>> ###########################\r\n$var(newbody)\r\n");
>>>>>>>>>         rtpengine_offer("from-tag=$ft replace-session-connection
>>>>>>>>> trust-address replace-origin codec-strip-g729",,$var(body),$var(newbody));
>>>>>>>>>         xlog("######################### Body from RTPENGINE is
>>>>>>>>> ###########################\r\n$var(body)\r\n");
>>>>>>>>>         $json(reply) := $rtpquery;
>>>>>>>>>
>>>>>>>>> $var(port)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local port);
>>>>>>>>>
>>>>>>>>> $var(addr)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local address);
>>>>>>>>>         append_to_reply("Contact:<sip:$rU@
>>>>>>>>> $socket_in(ip):$socket_in(port);transport=udp>\r\n");
>>>>>>>>>         append_to_reply("Content-Type: application/sdp\r\n");
>>>>>>>>>         $var(body) =
>>>>>>>>> $(var(body){re.subst,/(IP4.).*/\1$var(addr)/g});
>>>>>>>>>         $var(body) =
>>>>>>>>> $(var(body){re.subst,/(audio.)...../\1$var(port)/g});
>>>>>>>>>         xlog("######################### Body being sent in Reply
>>>>>>>>> is ######################\r\n$var(body)\r\n");
>>>>>>>>>         t_reply_with_body(200, "OK", $var(body));
>>>>>>>>>         rtpengine_play_media("call-id=$ci from-tag=$ft
>>>>>>>>> file=/etc/rtpengine/unk_num.wav");
>>>>>>>>>         async(sleep(10), after_media);
>>>>>>>>>         }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> route[after_media]
>>>>>>>>>     { if (t_was_cancelled()) {
>>>>>>>>>         rtpengine_delete();
>>>>>>>>>         exit;
>>>>>>>>>     } else {
>>>>>>>>>         rtpengine_delete();
>>>>>>>>>         sl_send_reply(486,"Busy here");
>>>>>>>>>         exit;
>>>>>>>>>     }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20231110/a3269a40/attachment.html>


More information about the Users mailing list