Dear Community,
I have a problem with rtpproxy not changing the SDP IP in connection information in following scenario:
SIP1 -> kamailio1 + rtpproxy1 -> kamailio2 + rtpproxy2 -> SIP2
The first kamailio put SDP IP correctly (from rtpproxy) then the second kamailio does not change SDP connection information.
I think its related to SDP body which has:
a=nortpproxy:yes
line added by kamailio1.
So i tried to remove the a=nortpproxy:yes line from SDP before calling rtpproxy_manage.
But it looks like no difference in working - i think the SDP sent to rtpproxy is still having the line even when i removed it.
The issue is not happening when i remove kamailio1 + rtpproxy1. In that case my IP is put correctly in SDP in INVITE and in 200 OK.
In case of two kamailio with rtpproxy (kamailio1 and kamailio2) in signalling path i am getting:
rtpproxy [rtpproxy.c:2586]: force_rtp_proxy(): incorrect port 0 in reply from rtp proxy
for replies (SIP2 IP address in 200OK SDP is present instead of kamailio2 IP address).
For request INVITE i am not getting the error but the IP in SDP doesn't change.
kamailio2 config is now like below (but the attempt to remove a=nortpproxy:yes, did not work for me)
# RTPProxy control and signaling updates for NAT traversal
route[NATMANAGE] {
#!ifdef WITH_NAT
if (is_request()) {
if(has_totag()) {
if(check_route_param("nat=yes")) {
setbflag(FLB_NATB);
}
}
}
# if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB))) return; -- commented this out because sometimes rtpproxy was not used and i wanted to use it always
# added below code to remove a=nortpproxy:yes from SDP before rtpproxy_manage but its still not working
if( has_body("application/sdp") && (1 == sdp_get_line_startswith("$avp(nortpproxy)", "a=nortpproxy" )) ){
sdp_remove_line_by_prefix("a=nortpproxy:yes");
xlog("removed nortpproxy:yes from SDP");
}
if(nat_uac_test("8")) {
xlog("rtpproxy CO");
rtpproxy_manage("co","MY_PUBLIC_IP_HERE");
} else {
xlog("rtpproxy COR");
rtpproxy_manage("cor","
MY_PUBLIC_IP_HERE
");
}
if (is_request()) {
if (!has_totag()) {
if(t_is_branch_route()) {
add_rr_param(";nat=yes");
}
}
}
if (is_reply()) {
if(isbflagset(FLB_NATB)) {
if(is_first_hop())
set_contact_alias();
}
}
if(isbflagset(FLB_NATB)) {
# no connect message in a dialog involving NAT traversal
if (is_request()) {
if(has_totag()) {
set_forward_no_connect();
}
}
}
#!endif
return;
}
Best regards,
Tom
PS. thanks for any hints to resolve the issue.