Schneur,<div><br></div><div>You can examine the src_ip first to see if the call if from your pbx or not. Then you can also examine to request-uri to distinguish the call between a pstn call or a sip client - assuming your sip clients have a different sip address/pattern than pstn numbers. Things like this:</div>
<div><br></div><div><div>if ( src_ip == pbx1_ip || src_ip == pbx2_ip ){<span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># From PBXs</div>
<div>}</div><div><br></div><div>if ($rU=~&quot;^\+?[0-9]{3,18}&quot;) {<span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># request-uri is for a PSTN number, send the message to whatever<span class="Apple-tab-span" style="white-space:pre">                </span></div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>route(1)</div><div>}</div><div><br></div><div>Basically you need to find a difference between the call attributes and examine that, it can be the src_ip, ruri pattern, etc.</div>
<div><br></div><div>Regards,</div><div>Ali Pey</div><br><div class="gmail_quote">On Wed, Jul 25, 2012 at 9:41 AM, Schneur Rosenberg <span dir="ltr">&lt;<a href="mailto:rosenberg11219@gmail.com" target="_blank">rosenberg11219@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">check_source_address won&#39;t work for me, my clients are behind Dynamic<br>
ip&#39;s, there is no way for me to know in advance their ip address<br>
<div class="HOEnZb"><div class="h5"><br>
On Mon, Jul 23, 2012 at 8:55 PM, Brett Nemeroff &lt;<a href="mailto:brett@nemeroff.com">brett@nemeroff.com</a>&gt; wrote:<br>
&gt; Scot,<br>
&gt; the function &quot;is_from_local&quot; uses the From URI and as such, will not work if<br>
&gt; the originator mangles the from uri (as in the case of your example below).<br>
&gt;<br>
&gt; A more secure way to do this that may suit your needs is to use the<br>
&gt; permissions module and actually check the source IP of the request:<br>
&gt;<br>
&gt; <a href="http://www.opensips.org/html/docs/modules/1.8.x/permissions.html#id293503" target="_blank">http://www.opensips.org/html/docs/modules/1.8.x/permissions.html#id293503</a><br>
&gt;<br>
&gt; Look at the &quot;check_source_address&quot; and or &quot;get_source_group&quot;. Either of<br>
&gt; these can compare the source IP of the originator to a known list. From<br>
&gt; there, you can perform script logic based on where the request came from.<br>
&gt;<br>
&gt; Hope that helps!<br>
&gt; -Brett<br>
&gt;<br>
&gt;<br>
&gt; On Mon, Jul 23, 2012 at 11:38 AM, Schneur Rosenberg<br>
&gt; &lt;<a href="mailto:rosenberg11219@gmail.com">rosenberg11219@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; I&#39;m using opensips as a registrar server and as a loadbalancer, all<br>
&gt;&gt; phones are registered to opensips and all incoming and outgoing calls<br>
&gt;&gt; go to Asterisk boxes via load balancing, therefore I have 3 kinds of<br>
&gt;&gt; calls going to opensips,<br>
&gt;&gt; 1) outgoing calls coming from one of the phones Registered to opensips,<br>
&gt;&gt; 2) incoming calls (we allow all incoming calls no matter from where<br>
&gt;&gt; they come, I call them unauthenticated DID)<br>
&gt;&gt; 3) Calls ringing to a phone registered to opensips, the Asterisk boxes<br>
&gt;&gt; will send the calls to the phone either after getting a call from a<br>
&gt;&gt; DID, or when a internal user wants to call another internal user<br>
&gt;&gt;<br>
&gt;&gt; The way I differentiate between the calls is  I do a      if<br>
&gt;&gt; (!(method==&quot;REGISTER&quot;) &amp;&amp; is_from_local()) this will check credentials<br>
&gt;&gt; and send call to asterisk to process outgoing call, then I do a  else<br>
&gt;&gt; if ((method==&quot;INVITE&quot;))  which will check if the call is going to a<br>
&gt;&gt; local phone by doing  if (!lookup(&quot;location&quot;, &quot;m&quot;)) if that fails that<br>
&gt;&gt; it assumes its a incoming did call, and it will send it to asterisk<br>
&gt;&gt; with a prefix so asterisk knows its a unauthenticated incoming call,<br>
&gt;&gt; bellow I pasted a skeleton of the code I&#39;m using.<br>
&gt;&gt;<br>
&gt;&gt; Everything worked fine, until I connected a PBX to my opensips, then<br>
&gt;&gt; the from came in with the address of the PBX and the  is_from_local()<br>
&gt;&gt; test was not true, so it did not work, I had the same problem when<br>
&gt;&gt; sending a call from a SPA3000 and blocking caller id, in that case it<br>
&gt;&gt; also obscured the from address, as follows &quot;From: Anonymous<br>
&gt;&gt; &lt;sip:anonymous@localhost&gt;;tag=ea3ee097cd947aeeo0.&quot; , the only<br>
&gt;&gt; reference of the user or domain was in the RPID field  and calls did<br>
&gt;&gt; not go through.<br>
&gt;&gt;<br>
&gt;&gt; Is there anyway to check if a source IP is registered to our system<br>
&gt;&gt; and only then it should send a 407? this way if I have a BPX<br>
&gt;&gt; registered it will then ask for credentials, all others it will assume<br>
&gt;&gt; that either a call to the local phone or unauthenticated DID, I<br>
&gt;&gt; understand that I wont be able to send calls to the system only if<br>
&gt;&gt; registration was done before, but I have no problem with that,  I<br>
&gt;&gt; could do it with avp_db_query() on the subscriber table, but I want to<br>
&gt;&gt; know if there is a better way.<br>
&gt;&gt;<br>
&gt;&gt; If there is there a better solution then the above solution please let me<br>
&gt;&gt; know<br>
&gt;&gt;<br>
&gt;&gt;         if (!(method==&quot;REGISTER&quot;) &amp;&amp; is_from_local())<br>
&gt;&gt;         {<br>
&gt;&gt;                #check credentials<br>
&gt;&gt;         }<br>
&gt;&gt;          else if ((method==&quot;INVITE&quot;))   #unathenticated did or call<br>
&gt;&gt; going to phone registered to opensips<br>
&gt;&gt;         {<br>
&gt;&gt;<br>
&gt;&gt;                 if (!lookup(&quot;location&quot;, &quot;m&quot;))   #calling local phone<br>
&gt;&gt;                 {<br>
&gt;&gt;                          #send to phone registered to opensips<br>
&gt;&gt;                 }<br>
&gt;&gt;                 else<br>
&gt;&gt;                 {<br>
&gt;&gt;                          #incoming did send call to asterisk to process<br>
&gt;&gt;                 }<br>
&gt;&gt;         }<br>
&gt;&gt;         else<br>
&gt;&gt;         {<br>
&gt;&gt;                #outgoing calls route continues here<br>
&gt;&gt;         }<br>
&gt;&gt; ...................................<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Users mailing list<br>
&gt;&gt; <a href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a><br>
&gt;&gt; <a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Users mailing list<br>
&gt; <a href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a><br>
&gt; <a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
&gt;<br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</div></div></blockquote></div><br></div>