<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><tt>Hi Terry,</tt></p>
<p><tt><br>
</tt></p>
<p><tt>Currently, mid-registrar is incompatible with topology
hiding, as they both attempt to edit the "Contact" header field.</tt></p>
<pre class="moz-signature" cols="72">Liviu Chircu
OpenSIPS Developer
<a class="moz-txt-link-freetext" href="http://www.opensips-solutions.com">http://www.opensips-solutions.com</a></pre>
<div class="moz-cite-prefix">On 09.04.2019 14:01, Terry Walters
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:AM6PR0402MB3702B5EF0F1B61497F7FB133E72D0@AM6PR0402MB3702.eurprd04.prod.outlook.com">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
I have a working OpenSIPS deployment running as a PSTN proxy and
am trying to add in support for WebRTC which will forward
requests to an internal SIP PBX. Currently the registrations
appear to be passing through the mid_registrar correctly and the
initial invite from my PBX is correctly routed to the websocket
client.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
The PBX receives messages up to the 180 ringing correctly, but
on the 200 OK from the websocket client the r.uri contains a
d.id rather than the ctid, this then results in the calling
timing out and the ACK from the PBX not routing to the websocket
client. I believe this is the script area that is falling over
once the has_totag function is checked.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<span>if (loose_route()) <br>
</span>
<div> {<br>
</div>
<div> if (is_method("INVITE")) <br>
</div>
<div> {<br>
</div>
<div> # even if in most of the cases is useless, do RR for<br>
</div>
<div> # re-INVITEs alos, as some buggy clients do change
route set<br>
</div>
<div> # during the dialog.<br>
</div>
<div> record_route();<br>
</div>
<div> } <br>
</div>
<div> else if (is_method("ACK")) <br>
</div>
<div> {<br>
</div>
<div> if (has_body("application/sdp")) <br>
</div>
<div> {<br>
</div>
<div> # check if destination is WS<br>
</div>
<div> if ($du != NULL)<br>
</div>
<div> $var(proto) = $dP;<br>
</div>
<div> else<br>
</div>
<div> $var(proto) = $rP;<br>
</div>
<div> if ($var(proto) == "WS" || $var(proto) == "WSS")<br>
</div>
<div> setbflag(DST_WS);<br>
</div>
<div><br>
</div>
<div> route(rtpengine_answer);<br>
</div>
<div> }<br>
</div>
<div> }<br>
</div>
<div><br>
</div>
<div> # route it out to whatever destination was set by
loose_route()<br>
</div>
<div> # in $du (destination URI).<br>
</div>
<div> route(websocket);<br>
</div>
<div> } <br>
</div>
<div> else <br>
</div>
<div> {<br>
</div>
<div> if ( is_method("ACK") ) <br>
</div>
<div> {<br>
</div>
<div> if ( t_check_trans() ) <br>
</div>
<div> {<br>
</div>
<div> # non loose-route, but stateful ACK; must be an ACK
after<br>
</div>
<div> # a 487 or e.g. 404 from upstream server<br>
</div>
<div> t_relay();<br>
</div>
<div> exit;<br>
</div>
<div> } <br>
</div>
<div> else <br>
</div>
<div> {<br>
</div>
<div> # ACK without matching transaction -><br>
</div>
<div> # ignore and discard<br>
</div>
<div> exit;<br>
</div>
<div> }<br>
</div>
<div> }<br>
</div>
<span> sl_send_reply("404","Not here");</span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<span><br>
</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
The route[websocket] is using force send socket to remove the
NAT address that cannot be accessed internally:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif;
font-size: 12pt; color: rgb(0, 0, 0);">
<span>route[webscoket] <br>
</span>
<div>{<br>
</div>
<div>xlog("L_INFO","Entered websocket route");<br>
</div>
<div># for each branch we will call the function below<br>
</div>
<div>t_on_branch("per_branch_ops");<br>
</div>
<div><br>
</div>
<div># for each reply we will call the function below<br>
</div>
<div>t_on_reply("handle_nat");<br>
</div>
<div># initial invites from the main registrar - need to look
them up!<br>
</div>
<div>if (is_method("INVITE"))<br>
</div>
<div> if($Ri == "1.1.1.1" and $Rp == 5070) <br>
</div>
<div> {<br>
</div>
<div> xlog("L_INFO","Call received for a websocket client");<br>
</div>
<div> if (!mid_registrar_lookup("location")) <br>
</div>
<div> {<br>
</div>
<div> t_reply("404", "Not Found");<br>
</div>
<div> exit;<br>
</div>
<div> }<br>
</div>
<div><br>
</div>
<div> } <br>
</div>
<div> else if($Ri=="1.1.1.1" && $Rp == "8080")<br>
</div>
<div> {<br>
</div>
<div> xlog("L_INFO","Inbound call received on port 8080");<br>
</div>
<div> route("ToInternal");<br>
</div>
<div> t_on_failure("int_invites");<br>
</div>
<div> } <br>
</div>
<div><br>
</div>
<div>if((is_method("REGISTER"))&&($Ri=="1.1.1.1")&&($Rp
=="8080"))<br>
</div>
<div>{<br>
</div>
<div> xlog("L_INFO","Register received - mid-registrar
actions");<br>
</div>
<div> fix_nated_register();<br>
</div>
<div> mid_registrar_save("location");<br>
</div>
<div> switch ($retcode) <br>
</div>
<div> {<br>
</div>
<div> case 1:<br>
</div>
<div> xlog("L_INFO", "forwarding REGISTER to main
registrar...\n");<br>
</div>
<div> $ru = "sip:2.2.2.2:5060";<br>
</div>
<div> force_send_socket(UDP:1.1.1.1:5070);<br>
</div>
<div> if (!t_relay()) {<br>
</div>
<div> send_reply("500", "Server Internal Error 1");<br>
</div>
<div> }<br>
</div>
<div> t_on_failure("int_invites");<br>
</div>
<div> break;<br>
</div>
<div> case 2:<br>
</div>
<div> xlog("L_INFO", "REGISTER has been absorbed!\n");<br>
</div>
<div> break;<br>
</div>
<div> default:<br>
</div>
<div> xlog("L_ERR", "mid-registrar error!\n");<br>
</div>
<div> send_reply("500", "Server Internal Error 2");<br>
</div>
<div> }<br>
</div>
<div><br>
</div>
<div> exit;<br>
</div>
<div>}<br>
</div>
<div><br>
</div>
<div># removing the rtpproxy session<br>
</div>
<div>if(is_method("CANCEL|BYE"))<br>
</div>
<div>{<br>
</div>
<div> rtpengine_delete();<br>
</div>
<div>}<br>
</div>
<div><br>
</div>
<div> # try to send the request on its way, if it fails send
back a<br>
</div>
<div> # stateless error to the requestor<br>
</div>
<div> if (t_relay())<br>
</div>
<div> {<br>
</div>
<div> xlog("L_INFO", "$ci|pass|$rd:$rp");<br>
</div>
<div> }<br>
</div>
<div> else<br>
</div>
<div> {<br>
</div>
<div> xlog("L_ERR", "$ci|end|unable to relay message");<br>
</div>
<div><br>
</div>
<div> sl_reply_error();<br>
</div>
<div> }<br>
</div>
<div><br>
</div>
<div><br>
</div>
<span>}</span><br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
Users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a>
<a class="moz-txt-link-freetext" href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
</blockquote>
</body>
</html>