Basically this solution gives me exactly what I need at the moment.<div><br><div>If there is a still special reason to use OpenSIPS, maybe we should expect opinion of some better FS experts then me :-)</div><div><br></div>
<div>vIT<br><br><div class="gmail_quote">2010/3/16 Alfredo Quiroga-Villamil <span dir="ltr">&lt;<a href="mailto:lawwton@gmail.com">lawwton@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Vit:<br>
<br>
Nice email, very informative; curious to find out the reasons why you<br>
decided to go with FS instead of OpenSip. We soon have to make a<br>
similar decision and would like to find out the rationale behind it.<br>
<br>
Thanks,<br>
<br>
Alfredo<br>
<div class="im"><br>
On Tue, Mar 16, 2010 at 8:04 AM, Vitalii Colosov &lt;<a href="mailto:vetali100@gmail.com">vetali100@gmail.com</a>&gt; wrote:<br>
</div><div><div></div><div class="h5">&gt; Hi dear FS community,<br>
&gt; After a brief analysis of 2 solutions using OpenSIPS<br>
&gt; and Kamailio (<a href="http://www.opensips.org/html/docs/modules/devel/load_balancer.html#id226109" target="_blank">http://www.opensips.org/html/docs/modules/devel/load_balancer.html#id226109</a><br>
&gt; ) and (<a href="http://wiki.freeswitch.org/wiki/SBC_Setup" target="_blank">http://wiki.freeswitch.org/wiki/SBC_Setup</a>) I decided to implement my<br>
&gt; own solution using ONLY FreeSWITCH and ONLY 1 table of any database server<br>
&gt; (we use MySQL).<br>
&gt; It works on few of our servers right now without any issues.<br>
&gt; Feel free to reuse / improve it or provide your comments if you see<br>
&gt; something wrong with it.<br>
&gt;<br>
&gt; We have one routing server (RS) and several Media Servers (MS).<br>
&gt; FreeSWITCH is installed on each server in default configuration.<br>
&gt; --&gt; MS_1<br>
&gt; RS  --&gt; MS_2<br>
&gt; --&gt; MS_N<br>
&gt;<br>
&gt; (Failover can be implemented by adding one more routing server, but this is<br>
&gt; out of scope of current description).<br>
&gt; Routing server routes calls to media servers based on logic that you can<br>
&gt; easily define.<br>
&gt; (Generally speaking, Routing server can route part of the calls onto itself,<br>
&gt; but to simplify let&#39;s say that it will route only to Media Servers).<br>
&gt;<br>
&gt; Routing server is used to register subscribers (it will have directory files<br>
&gt; ./freeswitch/conf/directory/default/10001whatever.xml-99999whatever.xml).<br>
&gt; Media servers do NOT contain files with users (security issue? probably<br>
&gt; should be managed on dialplan stage of media servers by comparing ip<br>
&gt; addresses of requests).<br>
&gt;<br>
&gt; The whole routing can be presented by the following chain:<br>
&gt; Call arrives into Default context--&gt;RS default dialplan--&gt;Lua script--&gt;PHP<br>
&gt; script to get destination MEDIA SERVER IP--&gt;back to Lua script--&gt;Bridge<br>
&gt; &quot;sofia/external/&quot; to determined MS IP address--&gt;[Bridge to fail over media<br>
&gt; server, optionally]--&gt;End<br>
&gt; Let&#39;s say we need to route all international calls based on less loaded<br>
&gt; server (other logic can be easily implemented in PHP script as well).<br>
&gt; 1. RS Dialplan: default.xml<br>
&gt; &lt;include&gt;<br>
&gt;         &lt;extension name=&quot;route&quot;&gt;<br>
&gt;                 &lt;condition field=&quot;destination_number&quot;<br>
&gt; expression=&quot;^(00)(\d+)&quot;&gt;<br>
&gt;                         &lt;action application=&quot;lua&quot; data=&quot;route.lua $2&quot;/&gt;<br>
&gt;                 &lt;/condition&gt;<br>
&gt;         &lt;/extension&gt;<br>
&gt; &lt;/include&gt;<br>
&gt;<br>
&gt; 2. RS Lua script: route.lua<br>
&gt; called_number = argv[1]; //without &quot;00&quot;<br>
&gt; api = freeswitch.API();<br>
&gt; server_ip_address = api:executeString(&quot;curl<br>
&gt; <a href="http://localhost/get_server_ip.php" target="_blank">http://localhost/get_server_ip.php</a>);<br>
&gt; forwarding_session_string =<br>
&gt; &quot;sofia/external/&quot;..called_number..&quot;@&quot;..server_ip_address;<br>
&gt; session:setVariable(&quot;bypass_media&quot;, &quot;true&quot;); //described below!!!<br>
&gt; session:execute(&quot;bridge&quot;,forwarding_session_string);<br>
&gt; 3. PHP script: get_server_ip.php<br>
&gt; &lt;&lt;&lt;  ANY PHP CODE THAT WILL QUERY COMMON DATABASE AND WILL DETERMINE LESS<br>
&gt; LOADED AT THE MOMENT SERVER&gt;&gt;&gt;<br>
&gt; die($less_loaded_server_ip);<br>
&gt;<br>
&gt; All Media Servers should provide information about their current load into<br>
&gt; one common database (dedicated server or routing server can be used for<br>
&gt; database).<br>
&gt; If you use scripts you can update this table on starting a call and after<br>
&gt; call finished.<br>
&gt; Or you can create a job that will query FreeSWITCH and will update the<br>
&gt; database every, say, 10 seconds.<br>
&gt;<br>
&gt; Basically that&#39;s all (really!)<br>
&gt; I beleive it can be used for most general purpose scenarios without need of<br>
&gt; third-party tools.<br>
&gt; P.S.<br>
&gt; The only problem we had from the beginning was that RTP media traffic was<br>
&gt; passing thru both servers: RS and Media Server.<br>
&gt; But after we added the following command to the routing script, RTP media<br>
&gt; traffic started to pass only thru Media server, making RS almost free.<br>
&gt; session:setVariable(&quot;bypass_media&quot;, &quot;true&quot;);<br>
&gt;<br>
&gt;<br>
&gt; Best regards,<br>
&gt; vIT<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; FreeSWITCH-users mailing list<br>
&gt; <a href="mailto:FreeSWITCH-users@lists.freeswitch.org">FreeSWITCH-users@lists.freeswitch.org</a><br>
&gt; <a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
&gt; UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
&gt; <a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
&gt;<br>
&gt;<br>
<br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
</blockquote></div><br></div></div>