Hi Guys,
I've encountered one-way voice situation, where caller on Public IP make a P2P call to callee behind NAT, wondering is there any OpenSER module/function that could actually query callee's network type, if OpenSER can detect callee network (whether it's NAT or not), I can use rtp proxy to overcome the one-way voice.
Currently my setup works on following: Caller --- Callee 1) WAN to WAN 2) NAT to NAT (force_rtp_proxy) 3) NAT to WAN (force_rtp_proxy)
but for the WAN to NAT case, due to the caller aren't behind NAT, I didn't run force_rtp_proxy, but whenever the P2P call established, it result one-way voice.
I'm thinking of querying the callee detail from database via AVP, but it doesn't sound feasible; wondering if there's any better solution.
P/S: My openser.cfg (INVITE route) ------------------------------- route[3] { if(nat_uac_test("19")) { fix_nated_contact(); }
# 10* = P2P call if(uri=~"^sip:10*.+@.*") { strip(3);
if(!lookup("location")) { xlog("L_INFO", "DBG: P2P Peer not found [$tu] from [$fu]($si)"); sl_send_reply("404", "User Offline"); exit; }
xlog("L_INFO", "DBG: P2P Call [$fu]($si) to [$tu]");
# For NAT-to-WAN or NAT-to-NAT, supposedly WAN-to-NAT should run this too :( if(nat_uac_test("19") || search("^Route:.*;nat=yes")) { # onreply_route[2] will do a "force_rtp_proxy" t_on_reply("2"); force_rtp_proxy(); xlog("L_INFO", "DBG: NAT-ed P2P Call, RTP Proxy Forced [$fu]($si)"); } } else if(!proxy_authorize("", "subscriber")) { xlog("L_INFO", "DBG: INVITE [$fu]($si) PROXY authentication FAILED"); proxy_challenge("", "1"); exit; }
if(!check_from()) { xlog("L_INFO", "INVITE Spoofed From-URI detected - RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n"); sl_send_reply("403", "Spoofed From-URI Detected"); exit; }
rewritehost("1.2.3.4"); }
t_on_reply("1"); t_on_failure("1"); t_relay(); xlog("L_INFO", "DBG: INVITE F-[$fu] T-[$tu] IP-[$si] UA-[$ua] SUCCESSFUL"); } -------------------------------
Thanks, David Loh