<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Hi Klaus,<br>
<br>
I've tried setbflag and everything work fine except for caller (from
Public IP) call to callee (behind NAT), it supposed to establish the
call via RTP Proxy, but due to OpenSER doesn't detect any flag/bflag
therefore the onreply route wasn't execute force_rtp_proxy. (but remote
peer is NATed)<br>
I'll paste my configuration here, can you point out what mistakes I've
made?<br>
<br>
<hr size="2" width="100%">## Register route<br>
route[1] {<br>
&nbsp;&nbsp;&nbsp; sl_send_reply("100", "Trying");<br>
<br>
&nbsp;&nbsp;&nbsp; if(!www_authorize("", "subscriber")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www_challenge("", "0");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; consume_credentials();<br>
<br>
&nbsp;&nbsp;&nbsp; if(!check_to()) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "REGISTER Spoofed To-URI detected - RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("403", "Spoofed To-URI Detected");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; if(!search("^Contact:[ ]*\*") &amp;&amp; nat_uac_test("19")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: REGISTER [$fu]($si) is NATED");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fix_nated_register();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setbflag(5);<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; if(!save("location")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_reply_error();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: REGISTER [$fu]($si) ($ua) Registration
SUCCESSFUL");<br>
&nbsp;&nbsp;&nbsp; exit;<br>
}<br>
<hr size="2" width="100%">## Invite Route<br>
route[3] {<br>
&nbsp;&nbsp;&nbsp; if(nat_uac_test("19")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fix_nated_contact();<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; t_on_reply("1");<br>
<br>
&nbsp;&nbsp;&nbsp; if(uri=~<a class="moz-txt-link-rfc2396E" href="mailto:^sip:10\*.+@.*">"^sip:10\*.+@.*"</a> ||
uri=~"^sip:([A-Z][a-z])([A-Z][a-z]).+@*") {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(uri=~"^sip:10\*") {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strip(3);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: P2P call [$fu]($si) to [$tu]");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!lookup("location")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: P2P Peer not found [$tu] from
[$fu]($si)");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("404", "User Offline");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(nat_uac_test("19")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t_on_reply("2");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; force_rtp_proxy();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setflag(3);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: P2P call in NATed Environment - Force
RTP Proxy [$fu]($si) to [$tu]");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!proxy_authorize("", "subscriber")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: INVITE [$fu]($si) PROXY authentication
FAILED");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_challenge("", "1");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!check_from()) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "INVITE Spoofed From-URI detected - RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl_send_reply("403", "Spoofed From-URI Detected");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rewritehostport("1.2.3.4:5060");<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; t_on_failure("1");<br>
&nbsp;&nbsp;&nbsp; t_relay();<br>
&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: INVITE F-[$fu] T-[$tu] IP-[$si] UA-[$ua]
SUCCESSFUL");<br>
}<br>
<hr size="2" width="100%">## Onreply route for P2P call<br>
onreply_route[2] {<br>
&nbsp;&nbsp;&nbsp; if(nat_uac_test("1")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fix_nated_contact();<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; if(status=~"(180)|(183)|2[0-9][0-9]") {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!search("^Content-Length:[ ]*0")) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isflagset(3) || isbflagset(5)) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: [$fu]($si) - Onreply route need to
RTP proxy.");<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; force_rtp_proxy();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; xlog("L_INFO", "DBG: On Reply - S=$rs D=$rr F=$fu T=$tu RURI=$ru");<br>
}<br>
<hr size="2" width="100%"><br>
<br>
Thanks,<br>
David Loh<br>
<br>
Klaus Darilion wrote:
<blockquote cite="mid:47CC4E97.3090400@pernau.at" type="cite">David Loh
wrote:
  <br>
  <blockquote type="cite">Hi All,
    <br>
    <br>
I'm facing a situation for P2P call where it need to determine both
caller and callee network type,
    <br>
except for both parties having direct (internet) connection (on Public
IP), the rest of combinations will implement force_rtp_proxy.
    <br>
(the 4 combinations are: NAT-&gt; NAT, NAT -&gt; Public IP, Public IP
-&gt; NAT, Public IP -&gt; Public IP).
    <br>
    <br>
Wondering if I can use isflagset or fetch flag from remote peer
(callee) ? or is there any function that allow this to be happen ?
    <br>
  </blockquote>
  <br>
  <br>
Usually you do it this way (pseudo code):
  <br>
- configure NAT flag (e.g. flag 5).
  <br>
<a class="moz-txt-link-freetext" href="http://www.openser.org/docs/modules/1.3.x/usrloc.html#AEN76">http://www.openser.org/docs/modules/1.3.x/usrloc.html#AEN76</a>
  <br>
  <br>
  <br>
if (REGISTER) {
  <br>
&nbsp; if (behind NAT)
  <br>
&nbsp;&nbsp;&nbsp; setbflag(5)
  <br>
&nbsp; save();
  <br>
&nbsp; exit;
  <br>
}
  <br>
  <br>
...call routing...
  <br>
&nbsp; if (behind NAT)
  <br>
&nbsp;&nbsp;&nbsp; setflag(6)
  <br>
..
  <br>
activate branch route
  <br>
....
  <br>
t_relay();
  <br>
exit;
  <br>
  <br>
  <br>
  <br>
branch_route[1] {
  <br>
&nbsp; if isflagset(6) || isbflagset(5)
  <br>
&nbsp;&nbsp;&nbsp; force_rtpproxy();
  <br>
&nbsp; ...
  <br>
&nbsp; do other NAT traversal stuff
  <br>
&nbsp; ...
  <br>
}
  <br>
  <br>
  <br>
regards
  <br>
klaus
  <br>
}
  <br>
</blockquote>
<br>
</body>
</html>