The libsofia_sip has its own concurrency model that only uses 1 thread per UA instance.&nbsp; The code in our module is only our usage implementation of that library.&nbsp; So each UA that has 1 ip:port to listen too manages all the SIP traffic for that port with this alternate concurrency model that runs in 1 thread provided by mod_sofia.&nbsp; Each individual call is then broken into it&#39;s own thread for&nbsp; I/O etc.<br>
<br>I can assure you, it&#39;s very efficient.&nbsp; We have FreeSWITCH users taking 200k switches offline just by sending them legitimate SIP traffic.<br><br>You can call the public conference if you wish at <a href="mailto:sip%3A888@conference.freeswitch.org">sip:888@conference.freeswitch.org</a><br>
you can also join IRC at <a href="http://irc.freenode.net">irc.freenode.net</a> #freeswitch<br><br><div class="gmail_quote">On Fri, Apr 18, 2008 at 4:33 PM, xmlya &lt;<a href="mailto:telecomsphere@163.com">telecomsphere@163.com</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>&nbsp;</div><div>&nbsp;Hi Anthony,&nbsp;&nbsp;  <br>&nbsp;&nbsp;&nbsp; I saw your name on the right section of <a href="http://freeswitch.org" target="_blank">freeswitch.org</a> homepage. Didn&#39;t know it was you, a big surprise! my honour to talk with you, the great creator to bring promising Freeswitch to the world, which will benefit everyone!&nbsp; <br>
&nbsp;&nbsp;&nbsp; Just a few days ago, I read an article about the born of Freeswitch, named &quot;How does FreeSWITCH compare to Asterisk&quot;. It&#39;s a very good article and we can see there is a long story behind the born of Freeswitch. Every time a new thing born, the creator spends much more efforts than we can imagine. Now I know the author is you!<br>
&nbsp;&nbsp;&nbsp; Before receiving your email, I spent some time to go through Freeswitch source code and I think I get the answer for Q2 now.<br>&nbsp;&nbsp;&nbsp; Perhaps I did not explain my puzzle well enough to let you understand. When I talked thread-safe, I mean, can messages of a same sip transaction be handled by multiple Freeswitch sip endpoint threads. The answer is &quot;No&quot;.&nbsp; <br>
&nbsp;&nbsp;&nbsp; There can be multiple sip endpoint threads, but each thread has different assigned job. For example, one thread for outboud, one thread for nat, one thread for normal sip message processing on port 5060. These different threads are thread-safe and well protected within switch core service logic. But these threads work on different ports and for different purposes. For a kind of job, there is actually only one single thread.<br>
&nbsp;&nbsp;&nbsp; When you talked about thread-safe, you mean thread-safe between different job threads, while I mean thread-safe for a kind of job, a more lower level thread safe(multiple threads for single job).<br><br>&nbsp;&nbsp;&nbsp; Below is my found,<br>
&nbsp;&nbsp;&nbsp; (1) initialization<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when sofia module is loaded, config_sofia() called<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&gt; load sip profiles, check xml tag with &quot;profiles&quot;, if the profile <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; has &quot;sip_ip&quot; tag ==&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aunch_sofia_profile_thread ==&gt; create thread and run&nbsp;&nbsp; sofia_profile_thread_run, =&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create seperate root object and nua object, register <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sofia_event_callback<br>&nbsp;&nbsp;&nbsp; (2) Run time<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; each thread runs its event loop<br><br>&nbsp;&nbsp;&nbsp; For performance, it&#39;s very good. If you test the on multiple cores server, the performance should be even better.<br>&nbsp;&nbsp;&nbsp; Last, is there online Freeswitch server for experience purpose? Experience plan can help promotion of Freeswitch and bring users &quot;close touch&quot;, especially when the binary distributions can&#39;t cover all platforms.<br>
&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; Thanks many, good luck!<br>&nbsp; &nbsp; xmlya <br></div><div><div></div><div class="Wj3C7c"><br> <blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0px 0px 0px 0.8ex; padding-left: 1ex;"><br><br><div class="gmail_quote">
On Fri, Apr 18, 2008 at 1:22 PM, xmlya &lt;<a href="mailto:telecomsphere@163.com" target="_blank">telecomsphere@163.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div>&nbsp;</div><div>&nbsp;Anthony,<br>&nbsp;&nbsp;&nbsp; Glad to have you join the discussion. Seems you are one of the developers of Freeswitch and thanks for your answer. It will help us to learn Freeswitch more and clarify what we don&#39;t know and misunderstand.<br>

</div></blockquote><div><br><br>Yes, I am the primary author of FreeSWITCH as a matter of fact.<br>
<br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>&nbsp;&nbsp;&nbsp; I am not a user of freeswith now. I only keep an eye on it and join the mailing list to get what experts say about Freeswitch and get latest update. I think I will experience Freeswitch once a stable release can be seen. <br>

&nbsp;&nbsp;&nbsp; Now let&#39;s get down to the our discussions.<br>&nbsp;&nbsp;&nbsp; Q1: Registar&nbsp;&nbsp;  <br>&nbsp;&nbsp;&nbsp; Your answer: Freeswitch can act as stand-alone registar, even without openser, etc.<br>&nbsp;&nbsp;&nbsp; OK, that&#39;s great.<br><br>&nbsp;&nbsp;&nbsp; Q2: Thread-safe&nbsp;&nbsp;  <br>

</div><div>&nbsp;&nbsp;&nbsp; Why I post here is that, I noticed that there was no mutex proection over sofia sip transaction hash table. SIP thread run its own event loop(if there is something wrong, please correct me). <br>&nbsp;&nbsp;&nbsp; I still don&#39;t know how many threads(only sip signaling threads) Freeswith sip endpoint can launch, from technique aspect. The answer is more like a function description, can you explain in detail how these threads work? Or give me a link I can learn myself.<br>

<i><div>&nbsp;&nbsp;&nbsp; &quot;To teach you something, there is no such thing as &quot;thread safe&quot;.&nbsp; All
code needs to be able to exist in a threaded environment to have any
useful purpose.&nbsp; This does not mean trying to use mutexes and threads
on your behalf.&nbsp; It means to design your api so that whatever code is
using it can implement it in a threaded environment.&quot;<br></div>&nbsp;&nbsp;&nbsp;&nbsp; </i>Are you talking about lock/mutex free programming? but the fact is Freeswith is using sofia as the sip channel, so Freeswitch design must base on sofia, what&#39;s the wrapper you&#39;ve done, I am keen to hear the detail...<br>

&nbsp;&nbsp;&nbsp;&nbsp; Thanks a lot!<br></div></blockquote><div><br><br>No, I&#39;m just saying that all code should be &quot;thread safe&quot; that&#39;s all.<br><br>Our SIP module is defiantly thread safe I can assure you.<br>We have people doing 450 calls per second nonstop.<br>

FreeSWITCH is a heavily threaded application and is tested quite thoroughly to work with thousands of threads at the same time.<br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div>&nbsp;&nbsp;&nbsp; <br></div><div><div></div><div><div></div><br> <blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0px 0px 0px 0.8ex; padding-left: 1ex;">Respectfully the much work you refer to that we have to do is mostly to seek out and correct the page where you gentlemen were both misinformed about FreeSWITCH.<br>

<br>FreeSWITCH supports not only inbound and outbound registration but enterprise scaled simultaneous instances of a complete SIP UA where each instance can be in charge of it&#39;s own registration entities.<br>
<br>Inbound registrations support multiple simultaneous registrations to the same account and full subscription presence with SLA and BLF on several popular SIP phones.<br><br>Sofia is quite threaded and our sofia endpoint can easily sustain hundreds of calls per second with each call in it&#39;s own thread.<br>


<br>To teach you something, there is no such thing as &quot;thread safe&quot;.&nbsp; All code needs to be able to exist in a threaded environment to have any useful purpose.&nbsp; This does not mean trying to use mutexes and threads on your behalf.&nbsp; It means to design your api so that whatever code is using it can implement it in a threaded environment.<br>


<br>Our SIP module also does SRTP TLS SIP and wide and narrow band audio.<br><br>Below is our spec sheet that is listed twice on our homepage in the top 10% of the page.<br><a href="http://wiki.freeswitch.org/wiki/Specsheet" target="_blank">http://wiki.freeswitch.org/wiki/Specsheet</a><br>


<br>Can you please show me where you got the information that we do not support registrations so I may correct it because clearly that document is in excess of 2 years old since we have supported registration since at least 2006 (about 8 months into the projects start from scratch)<br>


<br><br><div class="gmail_quote">On Fri, Apr 18, 2008 at 10:12 AM, xmlya &lt;<a href="mailto:telecomsphere@163.com" target="_blank">telecomsphere@163.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


<div>&nbsp;</div><div>&nbsp;Brian,<br>&nbsp;&nbsp;&nbsp;&nbsp; I think I can understand Pete Kay. His concern is whether Freeswitch can have registration function in one day, or the development activity for this feature has been scheduled.<br>&nbsp;&nbsp;&nbsp;&nbsp; By the way, as said in the website documents, Freeswitch is a multi-threaded softswitch and has different endpoints for each protocols, SIP, H.323, etc. My question is, does each endpoint use multiple threads, say SIP endpoint? It seems that sofia is not thread-safe, how did Freeeswitch use this library? If it is used in multi-thread environment, there is much work to do.<br>


&nbsp;&nbsp;&nbsp;&nbsp; Don&#39;t have time to look into the code yet. And see your back and forth email. <br>&nbsp;&nbsp;&nbsp;&nbsp; Thanks for your reply!<br><br>&nbsp;&nbsp;&nbsp; Regards,<br>&nbsp;&nbsp;&nbsp; xmlya<br></div><div><div></div><div><div></div><br> <blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0px 0px 0px 0.8ex; padding-left: 1ex;">


<pre>This really isn&#39;t for us to decide.  OpenSER is built for that so you  
have to make the choice on what tool to use for your needs.

On Apr 18, 2008, at 7:41 AM, Pete Kay wrote:

&gt; I have a question for the creators of freeswitch.  With freeswitch,  
&gt; people are still going to need Openser to do sip registering and it  
&gt; is understandable that a pure sip register is more efficient.   The  
&gt; problem with Openser is that it is not that easy to config as  
&gt; compared to freeswitch.  So, I am wondering does it make sense for  
&gt; use part of the current freeswitch function to just make a  
&gt; &quot;freeser&quot; ( for pure sip registration) so that users can enjoy an  
&gt; efficient sip server and the ease-of-use from the freeswitch design?

Brian West
<a href="mailto:sip%3Abrian@freeswitch.org" target="_blank">sip:brian@freeswitch.org</a>




_______________________________________________
Freeswitch-dev mailing list
<a href="mailto:Freeswitch-dev@lists.freeswitch.org" target="_blank">Freeswitch-dev@lists.freeswitch.org</a>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev</a>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-dev</a>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a>
</pre></blockquote><br><br> 
</div></div><hr>
<font style="font-size: 12px; line-height: 15px;"></font><a style="font-size: 12px; line-height: 15px; color: blue; text-decoration: underline;" href="http://popme.163.com/link/004062_0416_4599.html" target="_blank">ì­Îè׬QQÐãÓ®ÂÃÐÐȯ</a><br>


_______________________________________________<br>
Freeswitch-dev mailing list<br>
<a href="mailto:Freeswitch-dev@lists.freeswitch.org" target="_blank">Freeswitch-dev@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-dev</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Anthony Minessale II<br><br>FreeSWITCH <a href="http://www.freeswitch.org/" target="_blank">http://www.freeswitch.org/</a><br>ClueCon <a href="http://www.cluecon.com/" target="_blank">http://www.cluecon.com/</a><br>


<br>AIM: anthm<br><a href="mailto:MSN%3Aanthony_minessale@hotmail.com" target="_blank">MSN:anthony_minessale@hotmail.com</a><br>GTALK/JABBER/<a href="mailto:PAYPAL%3Aanthony.minessale@gmail.com" target="_blank">PAYPAL:anthony.minessale@gmail.com</a><br>


IRC: <a href="http://irc.freenode.net" target="_blank">irc.freenode.net</a> #freeswitch<br><br>FreeSWITCH Developer Conference<br><a href="mailto:sip%3A888@conference.freeswitch.org" target="_blank">sip:888@conference.freeswitch.org</a><br>

<a href="http://iax:guest@conference.freeswitch.org/888" target="_blank">iax:guest@conference.freeswitch.org/888</a><br>
<a href="mailto:googletalk%3Aconf%2B888@conference.freeswitch.org" target="_blank">googletalk:conf+888@conference.freeswitch.org</a><br>pstn:213-799-1400
</blockquote><br><br> 
</div></div><hr>
<font style="font-size: 12px; line-height: 15px;"></font><a style="font-size: 12px; line-height: 15px; color: blue; text-decoration: underline;" href="http://popme.163.com/link/004062_0416_4599.html" target="_blank">ì­Îè׬QQÐãÓ®ÂÃÐÐȯ</a><br>

_______________________________________________<br>
Freeswitch-dev mailing list<br>
<a href="mailto:Freeswitch-dev@lists.freeswitch.org" target="_blank">Freeswitch-dev@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-dev</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Anthony Minessale II<br><br>FreeSWITCH <a href="http://www.freeswitch.org/" target="_blank">http://www.freeswitch.org/</a><br>ClueCon <a href="http://www.cluecon.com/" target="_blank">http://www.cluecon.com/</a><br>

<br>AIM: anthm<br><a href="mailto:MSN%3Aanthony_minessale@hotmail.com" target="_blank">MSN:anthony_minessale@hotmail.com</a><br>GTALK/JABBER/<a href="mailto:PAYPAL%3Aanthony.minessale@gmail.com" target="_blank">PAYPAL:anthony.minessale@gmail.com</a><br>

IRC: <a href="http://irc.freenode.net" target="_blank">irc.freenode.net</a> #freeswitch<br><br>FreeSWITCH Developer Conference<br><a href="mailto:sip%3A888@conference.freeswitch.org" target="_blank">sip:888@conference.freeswitch.org</a><br>
<a href="http://iax:guest@conference.freeswitch.org/888" target="_blank">iax:guest@conference.freeswitch.org/888</a><br>
<a href="mailto:googletalk%3Aconf%2B888@conference.freeswitch.org" target="_blank">googletalk:conf+888@conference.freeswitch.org</a><br>pstn:213-799-1400
</blockquote><br><br> 
</div></div><hr>
<font style="font-size: 12px; line-height: 15px;"></font><a style="font-size: 12px; line-height: 15px; color: blue; text-decoration: underline;" href="http://popme.163.com/link/004062_0416_4599.html" target="_blank">ì­Îè׬QQÐãÓ®ÂÃÐÐȯ</a><br>
_______________________________________________<br>
Freeswitch-dev mailing list<br>
<a href="mailto:Freeswitch-dev@lists.freeswitch.org">Freeswitch-dev@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-dev</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Anthony Minessale II<br><br>FreeSWITCH <a href="http://www.freeswitch.org/">http://www.freeswitch.org/</a><br>ClueCon <a href="http://www.cluecon.com/">http://www.cluecon.com/</a><br>
<br>AIM: anthm<br><a href="mailto:MSN%3Aanthony_minessale@hotmail.com">MSN:anthony_minessale@hotmail.com</a><br>GTALK/JABBER/<a href="mailto:PAYPAL%3Aanthony.minessale@gmail.com">PAYPAL:anthony.minessale@gmail.com</a><br>
IRC: <a href="http://irc.freenode.net">irc.freenode.net</a> #freeswitch<br><br>FreeSWITCH Developer Conference<br><a href="mailto:sip%3A888@conference.freeswitch.org">sip:888@conference.freeswitch.org</a><br><a href="http://iax:guest@conference.freeswitch.org/888">iax:guest@conference.freeswitch.org/888</a><br>
<a href="mailto:googletalk%3Aconf%2B888@conference.freeswitch.org">googletalk:conf+888@conference.freeswitch.org</a><br>pstn:213-799-1400