Yuriy Gorlichenko
2014-10-23 10:03:38 UTC
Hello all. I use rtpengine and rtpproxy-ng module at kamailio for proxying
RTP and modifying SDP between endpoints. I use two types of clients - such
as WSS based and UDP based clients.
I have a trouble with append_branch and rtpengine handling for this
packets.
I try to implement this logic of my script
Logic of my script:
--checking location table for rows with needed account
--get info from contact at loop
for every step
--check technology (sip or ws)
--append_branch with existing destination for this account
--rewrite packet with rtpengine to needed technology
after loop forward packets via t_relay
At listing bellow rtpproxy_manage have no flag "b" that implement needed
functionality. It not included at the script because I tried include it but
rtpengine says that ca nnot handle this request. As i understand this flag
worked with rtpproxy and rtpproxy-ng apps only. Not with rtpengine.
At my test I have 2 endpoints with WS and UDP phones (at fist step ir WS
and 2 step it UDP). All calls going form asterisk via UDP. When I do these
steps (at my script) I see packet at TCP dump and saw that sended only one
packet to UDP but body of packet is WS. Then I saw log of kamailio. I see
that at second step packet changed body to WS body (so strange because
other steps before and after goes for UDP (as at logic of script))
If I set "b" flag I can call only UDP endpoint, but at log I see as I say
that rtpengine can not do thomething with SIP packets and send with
t_relay uncghanged UDP packet only.
sql_query("ca", "select contact from location where username='$tU'", "ra");
xlog("rows: $dbr(ra=>rows) cols: $dbr(ra=>cols)\n");
if($dbr(ra=>rows)>0){
$var(i)=0;
while($var(i)<$dbr(ra=>rows)){
xlog("L_INFO","SQL query return contact {$dbr(ra=>[$var(i),0])} for {$tU}
at step {$var(i)}\n");
if ($dbr(ra=>[$var(i),0])=~"transport=ws"){
xlog("L_INFO", "This is a Websocket call to endpoint");
sql_pvquery("ca", "select received from location where
contact='$dbr(ra=>[$var(i),0])'","$var(recieved)");
xlog("L_INFO","SQL query return recieved {$var(recieved)} for {$tU}\n");
$du=$var(recieved);
xlog("L_INFO", "Request going FROM ASTERISK to WS. Destination is {$du}\n");
xlog("L_INFO","Websocket Destination URI is {$var(recieved)} for {$tU}\n");
rtpproxy_manage("froc+SP");
t_on_reply("REPLY_FROM_WS");
append_branch("sip:$tU@$du");
$var(i) = $var(i) + 1;
}
else
{
xlog("L_INFO", "This is a classic UDP call to endpoint");
$du="sip:"+$(dbr(ra=>[$var(i),0]){s.select,1,@});
xlog("L_INFO","Classic Destination URI is {$dbr(ra=>[$var(i),0])} for
{$tU}\n");
rtpproxy_manage("co");
t_on_reply("MANAGE_CLASSIC_REPLY");
append_branch("sip:$tU@$du");
$var(i) = $var(i) + 1;
}
#append_branch("sip:$tU@$du");
}
}
return 1;
So it customised schema of standart example
seturi("sip:***@example.com
<https://e.mail.ru/compose/?mailto=mailto%3asip%253Aa-***@public.gmane.org>");
append_branch("sip:***@example.com
<https://e.mail.ru/compose/?mailto=mailto%3asip%253Ab-***@public.gmane.org>");
append_branch("sip:***@example.com
<https://e.mail.ru/compose/?mailto=mailto%3asip%253Ac-***@public.gmane.org>");
append_branch("sip:***@example.com
<https://e.mail.ru/compose/?mailto=mailto%3asip%253Ad-***@public.gmane.org>");
t_relay();
I need fro advice how to fix this may be with another applications or with
another steps. Thanks.
RTP and modifying SDP between endpoints. I use two types of clients - such
as WSS based and UDP based clients.
I have a trouble with append_branch and rtpengine handling for this
packets.
I try to implement this logic of my script
Logic of my script:
--checking location table for rows with needed account
--get info from contact at loop
for every step
--check technology (sip or ws)
--append_branch with existing destination for this account
--rewrite packet with rtpengine to needed technology
after loop forward packets via t_relay
At listing bellow rtpproxy_manage have no flag "b" that implement needed
functionality. It not included at the script because I tried include it but
rtpengine says that ca nnot handle this request. As i understand this flag
worked with rtpproxy and rtpproxy-ng apps only. Not with rtpengine.
At my test I have 2 endpoints with WS and UDP phones (at fist step ir WS
and 2 step it UDP). All calls going form asterisk via UDP. When I do these
steps (at my script) I see packet at TCP dump and saw that sended only one
packet to UDP but body of packet is WS. Then I saw log of kamailio. I see
that at second step packet changed body to WS body (so strange because
other steps before and after goes for UDP (as at logic of script))
If I set "b" flag I can call only UDP endpoint, but at log I see as I say
that rtpengine can not do thomething with SIP packets and send with
t_relay uncghanged UDP packet only.
sql_query("ca", "select contact from location where username='$tU'", "ra");
xlog("rows: $dbr(ra=>rows) cols: $dbr(ra=>cols)\n");
if($dbr(ra=>rows)>0){
$var(i)=0;
while($var(i)<$dbr(ra=>rows)){
xlog("L_INFO","SQL query return contact {$dbr(ra=>[$var(i),0])} for {$tU}
at step {$var(i)}\n");
if ($dbr(ra=>[$var(i),0])=~"transport=ws"){
xlog("L_INFO", "This is a Websocket call to endpoint");
sql_pvquery("ca", "select received from location where
contact='$dbr(ra=>[$var(i),0])'","$var(recieved)");
xlog("L_INFO","SQL query return recieved {$var(recieved)} for {$tU}\n");
$du=$var(recieved);
xlog("L_INFO", "Request going FROM ASTERISK to WS. Destination is {$du}\n");
xlog("L_INFO","Websocket Destination URI is {$var(recieved)} for {$tU}\n");
rtpproxy_manage("froc+SP");
t_on_reply("REPLY_FROM_WS");
append_branch("sip:$tU@$du");
$var(i) = $var(i) + 1;
}
else
{
xlog("L_INFO", "This is a classic UDP call to endpoint");
$du="sip:"+$(dbr(ra=>[$var(i),0]){s.select,1,@});
xlog("L_INFO","Classic Destination URI is {$dbr(ra=>[$var(i),0])} for
{$tU}\n");
rtpproxy_manage("co");
t_on_reply("MANAGE_CLASSIC_REPLY");
append_branch("sip:$tU@$du");
$var(i) = $var(i) + 1;
}
#append_branch("sip:$tU@$du");
}
}
return 1;
So it customised schema of standart example
seturi("sip:***@example.com
<https://e.mail.ru/compose/?mailto=mailto%3asip%253Aa-***@public.gmane.org>");
append_branch("sip:***@example.com
<https://e.mail.ru/compose/?mailto=mailto%3asip%253Ab-***@public.gmane.org>");
append_branch("sip:***@example.com
<https://e.mail.ru/compose/?mailto=mailto%3asip%253Ac-***@public.gmane.org>");
append_branch("sip:***@example.com
<https://e.mail.ru/compose/?mailto=mailto%3asip%253Ad-***@public.gmane.org>");
t_relay();
I need fro advice how to fix this may be with another applications or with
another steps. Thanks.