<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi Folks, <br><br>I forgot to attach my configs, here it is.<br><br>Thanks<br>Sawyer<br><br><br>route{<br><br> if (!mf_process_maxfwd_header("10")) {<br> sl_send_reply("483","Too Many Hops");<br> exit;<br> }<br><br>#---- NAT Detection ----#<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>force_rport();<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>if (nat_uac_test("18")) {<br><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>if (method=="REGISTER")<br><span class="Apple-tab-span" style="white-space: pre; ">        </span><span class="Apple-tab-span" style="white-space: pre; ">        </span>#is_()<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>{<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>fix_nated_register();<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>}<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>else {<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>fix_nated_contact();<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>}<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>setflag(5);<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>}<br><br>if (has_totag()) {<br> if (loose_route()) {<br> if (is_method("BYE")) {<br> setflag(1); # do accounting ...<br> setflag(3); # ... even if the transaction fails<br> } else if (is_method("INVITE")) {<br> record_route();<br> }<br> route(1);<br><br> } else {<br><br> if ( is_method("ACK") ) {<br> if ( t_check_trans() ) {<br> # non loose-route, but stateful ACK; must be an ACK after<br> # a 487 or e.g. 404 from upstream server<br> t_relay();<br> exit;<br> } else {<br> # ACK without matching transaction -><br> # ignore and discard<br> exit;<br> }<br> }<br> sl_send_reply("404","Not here");<br> }<br> exit;<br>}<br><br> #initial requests<br><br> # CANCEL processing<br> if (is_method("CANCEL"))<br> {<br> if (t_check_trans())<br> t_relay();<br> exit;<br> }<br><br> t_check_trans();<br><br><br> # preloaded route checking<br> if (loose_route()) {<br> xlog("L_ERR",<br> "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");<br> if (!is_method("ACK"))<br> sl_send_reply("403","Preload Route denied");<br> exit;<br> }<br><br> # record routing<br> if (!is_method("REGISTER|MESSAGE"))<br> record_route();<br><br> # account only INVITEs<br> if (is_method("INVITE")) {<br> setflag(1); # do accounting<br> }<br> if (!uri==myself)<br><br> {<br> append_hf("P-hint: outbound\r\n");<br><br> route(1);<br> }<br><br> if (is_method("PUBLISH"))<br> {<br> sl_send_reply("503", "Service Unavailable");<br> exit;<br> }<br><br><br> if (is_method("REGISTER"))<br> {<br><br> #-- Request is behind NAT(flag5) save with bflag 6 -#<br> #---- Use bflag 7 to start SIP pinging (Options) ---#<br> if (isflagset(5)) {<br> setbflag(6);<br> setbflag(7);<br> };<br> if (!save("location"))<br> sl_reply_error();<br><br> exit;<br> }<br><br> if ($rU==NULL) {<br> # request with no Username in RURI<br> sl_send_reply("484","Address Incomplete");<br> exit;<br> }<br><br> # apply DB based aliases (uncomment to enable)<br> ##alias_db_lookup("dbaliases");<br><br> # do lookup with method filtering<br> if (!lookup("location","m")) {<br> switch ($retcode) {<br> case -1:<br> case -3:<br> t_newtran();<br> t_reply("404", "Not Found");<br> exit;<br> case -2:<br> sl_send_reply("405", "Method Not Allowed");<br> exit;<br> }<br> }<br><br> # when routing via usrloc, log the missed calls also<br> setflag(2);<br><br> route(1);<br>}<br><br><br>route[1] {<br> # for INVITEs enable some additional helper routes<br><br> #---- Helper route, if nat=yes in the R-URI set flag 6 ----#<br> #---- This is used to Process REINVITES ----#<br> if (subst_uri('/(<a href="sip:.*">sip:.*</a>);nat=yes/\1/')){<br> setbflag(6);<br> };<br> #-- If caller(flag 5) or callee(flag 6) are behind NAT --#<br> #-- Call the route(6) to force the use of the RTP Proxy --#<br> if (isflagset(5)||isbflagset(6)) {<br> route(6);<br> };<br> if (isflagset(5)){<br> search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes');<br> }<br> if (is_method("INVITE")) {<br> t_on_branch("2");<br> t_on_reply("2");<br> t_on_failure("1");<br> }<br><br> if (!t_relay()) {<br> sl_reply_error();<br> };<br> exit;<br>}<br><br><br><br>route[6] {<br> #---- RTP Proxy handling ---#<br> if (is_method("BYE|CANCEL")) {<br> unforce_rtp_proxy();<br><br> }<br> else if (is_method("INVITE")){<br> #---- Activates the RTP Proxy for the CALLEE ---#<br>#checnged force_rtp_proxy();<br>rtpproxy_answer();<br> t_on_failure("1");<br> };<br> }<br><br>branch_route[2] {<br> xlog("new branch at $ru\n");<br>}<br><br><br>onreply_route[2] {<br> xlog("incoming reply\n");<br>if ((isflagset(5) || isbflagset(6)) && status=~"(183)|(2[0-9][0-9])"){<br><br><br>rtpproxy_offer();<br>append_hf("P-hint: onreply_route|force_rtp_proxy \r\n");<br>}<br><br>if (isbflagset(6)) {<br><br>search_append('Contact:.*sip:[^>[:cntrl:]]*', ';nat=yes');<br>append_hf("P-hint: Onreply-route - fixcontact \r\n");<br>fix_nated_contact();<br>}<br>exit;<br>}<br><br><br>failure_route[1] {<br><br> if (isflagset(5) || isbflagset(6)){<br> unforce_rtp_proxy();<br> }<br><br> if (t_was_cancelled()) {<br> exit;<br> }<br><br>}<br><div><div>On 17 Apr, 2012, at 2:24 PM, sawyerzhang wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Hi Folks,<br><br>I have installed opensips 1.7 without TLS support. Everything was fine expect there was an issue with nated clients. The RTPproxy did a trick and things were ok for a while. Now, sometime I am experiencing very strange behaviour. I just can't send or receive messages across the clients. And its so random that its hard to know what exactly went wrong. I have a strong feeling that it got to be something with routing logic.<br><br>Any thoughts?<br><br>Here is how I do it (X.Y.Z public IP), starting the rtprpxy:<br><br>rtpproxy -l X.Y.Z -s udp:X.Y.Z:8888 -F<br><br>And then I restart opensips:<br><br>opensipsctl start<br><br>I can see opensip can talk to rtpproxy in /var/log/syslog :<br><br>INFO:rtpproxy:rtpp_test: rtp proxy <udp:X.Y.Z:8888> found, support for it enabled<br>DBG:rtpproxy:raise_rtpproxy_event: no event sent<br>DBG:core:init_m<br><br>And here is snip from log while a UA is trying to send a message;<br><br>DBG:uri:has_totag: no totag<br>DBG:core:parse_headers: flags=78<br>DBG:tm:t_lookup_request: start searching: hash=42124, isACK=0<br>DBG:tm:matching_3261: RFC3261 transaction matching failed<br>DBG:tm:t_lookup_request: no transaction found<br>DBG:core:parse_headers: flags=200<br>DBG:rr:find_first_route: No Route headers found<br>DBG:rr:loose_route: There is no Route HF<br><br>It seem routing part is broken but I wonder how come it can work sometime?<br><br>thanks,<br>sawyer</div></blockquote></div><br>
<br></body></html>