Hi there,
trying to maintain a dialog stateful UAS from script level may be
something difficult and painful to do. Maybe you should take a look at
the UAC/UAS support provided by the b2b_entities module in OpenSIPS 3.4:
https://blog.opensips.org/2023/03/22/api-driven-sip-user-agent-end-point-with-opensips-3-4/
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
https://www.opensips-solutions.com
https://www.siphub.com
On 11/11/23 3:26 AM, Kevin Kennedy wrote:
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 <kennedy4...@gmail.com
<mailto:kennedy4...@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
<kennedy4...@gmail.com <mailto:kennedy4...@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;
}
}
_______________________________________________
Users mailing list
Users@lists.opensips.org
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