I confirmed that pop(1) works for me. since it&#39;s spinning in it&#39;s own thread, that&#39;s probably the right solution. These are the relevant pieces of core code, though:<div><br></div><div><br><div>APU_DECLARE(apr_status_t) apr_queue_trypop(apr_queue_t *queue, void **data)</div>
<div>{</div><div>    apr_status_t rv;</div><div><br></div><div>    if (queue-&gt;terminated) {</div><div>        return APR_EOF; /* no more elements ever again */</div><div>    }</div><div><br></div><div>    rv = apr_thread_mutex_lock(queue-&gt;one_big_mutex);</div>
<div>    if (rv != APR_SUCCESS) {</div><div>        return rv;</div><div>    }</div><div><br></div><div>    if (apr_queue_empty(queue)) {</div><div>        rv = apr_thread_mutex_unlock(queue-&gt;one_big_mutex);</div><div>
        return APR_EAGAIN;</div><div>    } </div><div><br></div><div>    *data = queue-&gt;data[queue-&gt;out];</div><div>    queue-&gt;nelts--;</div><div><br></div><div>    queue-&gt;out = (queue-&gt;out + 1) % queue-&gt;bounds;</div>
<div>    if (queue-&gt;full_waiters) {</div><div>        Q_DBG(&quot;signal !full&quot;, queue);</div><div>        rv = apr_thread_cond_signal(queue-&gt;not_full);</div><div>        if (rv != APR_SUCCESS) {</div><div>            apr_thread_mutex_unlock(queue-&gt;one_big_mutex);</div>
<div>            return rv;</div><div>        }</div><div>    }</div><div><br></div><div>    rv = apr_thread_mutex_unlock(queue-&gt;one_big_mutex);</div><div>    return rv;</div><div>}</div><div><br></div><div>AND</div><div>
<br></div><div><div>APU_DECLARE(apr_status_t) apr_queue_pop(apr_queue_t *queue, void **data)</div><div>{</div><div>    apr_status_t rv;</div><div><br></div><div>    if (queue-&gt;terminated) {</div><div>        return APR_EOF; /* no more elements ever again */</div>
<div>    }</div><div><br></div><div>    rv = apr_thread_mutex_lock(queue-&gt;one_big_mutex);</div><div>    if (rv != APR_SUCCESS) {</div><div>        return rv;</div><div>    }</div><div><br></div><div>    /* Keep waiting until we wake up and find that the queue is not empty. */</div>
<div>    if (apr_queue_empty(queue)) {</div><div>        if (!queue-&gt;terminated) {</div><div>            queue-&gt;empty_waiters++;</div><div>            rv = apr_thread_cond_wait(queue-&gt;not_empty, queue-&gt;one_big_mutex);</div>
<div>            queue-&gt;empty_waiters--;</div><div>            if (rv != APR_SUCCESS) {</div><div>                apr_thread_mutex_unlock(queue-&gt;one_big_mutex);</div><div>                return rv;</div><div>            }</div>
<div>        }</div><div>        /* If we wake up and it&#39;s still empty, then we were interrupted */</div><div>        if (apr_queue_empty(queue)) {</div><div>            Q_DBG(&quot;queue empty (intr)&quot;, queue);</div>
<div>            rv = apr_thread_mutex_unlock(queue-&gt;one_big_mutex);</div><div>            if (rv != APR_SUCCESS) {</div><div>                return rv;</div><div>            }</div><div>            if (queue-&gt;terminated) {</div>
<div>                return APR_EOF; /* no more elements ever again */</div><div>            }</div><div>            else {</div><div>                return APR_EINTR;</div><div>            }</div><div>        }</div><div>
    } </div><div><br></div><div>    *data = queue-&gt;data[queue-&gt;out];</div><div>    queue-&gt;nelts--;</div><div><br></div><div>    queue-&gt;out = (queue-&gt;out + 1) % queue-&gt;bounds;</div><div>    if (queue-&gt;full_waiters) {</div>
<div>        Q_DBG(&quot;signal !full&quot;, queue);</div><div>        rv = apr_thread_cond_signal(queue-&gt;not_full);</div><div>        if (rv != APR_SUCCESS) {</div><div>            apr_thread_mutex_unlock(queue-&gt;one_big_mutex);</div>
<div>            return rv;</div><div>        }</div><div>    }</div><div><br></div><div>    rv = apr_thread_mutex_unlock(queue-&gt;one_big_mutex);</div><div>    return rv;</div><div>}</div><div><br></div><div>Is the trypop method returning without unlocking the mutex?</div>
<div><div><br></div><div>    rv = apr_thread_mutex_lock(queue-&gt;one_big_mutex);</div><div>    if (rv != APR_SUCCESS) {</div><div>        return rv;</div><div>    }</div><div><br></div></div></div><div class="gmail_quote">
On Tue, Sep 8, 2009 at 7:06 PM, Michael Giagnocavo <span dir="ltr">&lt;<a href="mailto:mgg@giagnocavo.net">mgg@giagnocavo.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">









<div lang="EN-US" link="blue" vlink="purple">

<div>

<p><span style="font-size:11.0pt;color:#1F497D">I’m not sure how EventConsumer is supposed to work – maybe one
of the real devs can explain how pop works and if it should fail on pop 0 or
not.</span></p>

<p><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">

<p><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt">
<a href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>
[mailto:<a href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>] <b>On Behalf Of </b>Phillip
Jones<br>
<b>Sent:</b> Tuesday, September 08, 2009 3:50 PM</span></p><div><div></div><div class="h5"><br>
<b>To:</b> <a href="mailto:freeswitch-users@lists.freeswitch.org" target="_blank">freeswitch-users@lists.freeswitch.org</a><br>
<b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET</div></div><p></p>

</div><div><div></div><div class="h5">

<p> </p>

<p style="margin-bottom:12.0pt">I build this out. <br>
<br>
This seems to work fine:<br>
<br>
ThreadPool.QueueUserWorkItem((o) =&gt;<br>
            {<br>
               
Log.WriteLine(LogLevel.Notice, &quot;Thread Starting. &quot;);<br>
               
EventConsumer con = new EventConsumer(&quot;all&quot;, &quot;&quot;);<br>
               
while (true)<br>
               
{<br>
                  <span style="background:yellow"> <b> Event ev = con.pop(1);</b></span><br>
                   
Log.WriteLine(LogLevel.Alert, &quot;Event: &quot; +
ev.GetHeader(&quot;Event-Name&quot;));<br>
                   <span style="background:#FFCC66"> </span><span style="background:yellow">//freeswitch.msleep(100);</span><br>
               
}<br>
            });<br>
<br>
With <br>
            Event ev =
con.pop(0) however FS crashes with a System.NullReferenceException (attached)<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</p>

<div>

<p>On Tue, Sep 8, 2009 at 5:20 PM, Raffaele P. Guidi &lt;<a href="mailto:raffaele.p.guidi@gmail.com" target="_blank">raffaele.p.guidi@gmail.com</a>&gt;
wrote:</p>

<p>Oh, I see... all those years wasted doing java stuff! :D</p>

<div>

<div>

<p style="margin-bottom:12.0pt"> </p>

<div>

<p>On Tue, Sep 8, 2009 at 22:46, Michael Giagnocavo &lt;<a href="mailto:mgg@giagnocavo.net" target="_blank">mgg@giagnocavo.net</a>&gt;
wrote:</p>

<div>

<div>

<p>“ ThreadPool.QueueUserWorkItem((o) =&gt;”</p>

<p>That starts a lambda, which is compiled to a delegate, same as anonymous
methods.</p>

<p>Guess I’ll wait for him to respond on the crash he gets.</p>

<p><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<div style="border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;border-color:-moz-use-text-color -moz-use-text-color">

<p><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> <a href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a> [mailto:<a href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>]
<b>On Behalf Of </b>Raffaele P. Guidi<br>
<b>Sent:</b> Tuesday, September 08, 2009 12:22 PM</span></p>

<div>

<div>

<p><br>
<b>To:</b> <a href="mailto:freeswitch-users@lists.freeswitch.org" target="_blank">freeswitch-users@lists.freeswitch.org</a><br>
<b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET</p>

</div>

</div>

</div>

<div>

<div>

<p> </p>

<p>Well, I can&#39;t see any delegate in josh sample, just a <span style="font-size:10.0pt;color:#444444">ThreadPool.QueueUserWorkItem. </span>Here
is an example that, at least on my system (I reached my home pc in
the meanwhile), works fine.</p>

<div>

<p> </p>

</div>

<div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">     public
class LoadPluginDemo : ILoadNotificationPlugin {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">         
delegate void Listener();</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">         
private void EventListener() {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
     EventConsumer con = new EventConsumer(&quot;all&quot;,
null);</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
     while (true){</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">         
       Event ev = con.pop(1);</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">         
       Log.WriteLine(LogLevel.Notice, &quot;Got event
&quot; + ev.GetHeader(&quot;Event-Name&quot;));        </span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
     }</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">         
}</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
 public bool Load() {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
     Log.WriteLine(LogLevel.Notice, &quot;LoadDemo
running.&quot;);</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
     new Listener(EventListener).BeginInvoke(null,null);</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
     return true;</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
 }</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">     }</span></p>

</div>

<div>

<p> </p>

</div>

<div>

<p> </p>

</div>

<p> </p>

<div>

<p>On Tue, Sep 8, 2009 at 18:43, Michael Giagnocavo &lt;<a href="mailto:mgg@giagnocavo.net" target="_blank">mgg@giagnocavo.net</a>&gt;
wrote:</p>

<div>

<div>

<p><span style="font-size:11.0pt;color:#1F497D">That’s what his sample does,
but he says it crashes.</span></p>

<p><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<div style="border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;border-color:-moz-use-text-color -moz-use-text-color">

<p><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt"> <a href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a> [mailto:<a href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>]
<b>On Behalf Of </b>Raffaele P. Guidi<br>
<b>Sent:</b> Tuesday, September 08, 2009 10:08 AM</span></p>

<div>

<p><br>
<b>To:</b> <a href="mailto:freeswitch-users@lists.freeswitch.org" target="_blank">freeswitch-users@lists.freeswitch.org</a><br>
<b>Subject:</b> Re: [Freeswitch-users] Subscribing to events in managed C# /
.NET</p>

</div>

</div>

<p> </p>

<div>

<p>Hi, you just have to use delegates to asynchronously call the function
containing the loop and return back the control to the calling thread. Here an
example (don&#39;t have my code at hand, hope it doesn&#39;t contain typos).</p>

</div>

<div>

<div>

<div>

<p> </p>

</div>

<div>

<p>Regards,</p>

</div>

<div>

<p>   Raffaele</p>

</div>

<div>

<p> </p>

</div>

<div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">   public class TestLoop :
ILoadNotificationPlugin</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">    {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">  </span></p>

<div>

<p><span style="font-family:&quot;Courier New&quot;">       Delegate
void DoStuffDelegate();</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;"> </span></p>

</div>

<p><span style="font-family:&quot;Courier New&quot;">       public
void doStuff()</span></p>

</div>

<div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        
   EventConsumer con = new EventConsumer(&quot;all&quot;,
&quot;&quot;);</span></p>

</div>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        
   while (true)</span></p>

</div>

<div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        
   {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        
       Event ev = con.pop(0);</span></p>

</div>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        
       Log.WriteLine(LogLevel.Notice, &quot;Event: &quot; +
ev.serialized_string);</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        
       freeswitch.msleep(100);</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        
   }</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        }</span></p>

</div>

<div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        public
bool Load()</span></p>

</div>

<div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">        {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">            DoStuffDelegate
dsdlg = new DoStuffDelegate(doStuff);</span></p>

</div>

<div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">            dsdlg.BeginInvoke();</span></p>

</div>

<p><span style="font-family:&quot;Courier New&quot;">        }</span></p>

</div>

</div>

<p style="margin-bottom:12.0pt"><span style="font-family:&quot;Courier New&quot;">    }</span></p>

</div>

</div>

<div>

<p>On Tue, Sep 8, 2009 at 08:21, Josh Rivers &lt;<a href="mailto:josh@radianttiger.com" target="_blank">josh@radianttiger.com</a>&gt;
wrote:</p>

<p>Thanks for the response! </p>

<div>

<p> </p>

</div>

<div>

<p>I have tried putting a long-running loop here, but then it blocks anything
else managed from happening:</p>

</div>

<div>

<p> </p>

</div>

<div>

<div>

<p>   public class TestLoop : ILoadNotificationPlugin</p>

</div>

<div>

<p>    {</p>

</div>

<div>

<p>        public bool Load()</p>

</div>

<div>

<div>

<p>        {</p>

</div>

<div>

<p>            EventConsumer con = new
EventConsumer(&quot;all&quot;, &quot;&quot;);</p>

</div>

</div>

<div>

<p>            while (true)</p>

</div>

<div>

<div>

<p>            {</p>

</div>

<div>

<p>                Event ev =
con.pop(0);</p>

</div>

</div>

<div>

<p>                Log.WriteLine(LogLevel.Notice,
&quot;Event: &quot; + ev.serialized_string);</p>

</div>

<div>

<p>              
 freeswitch.msleep(100);</p>

</div>

<div>

<p>            }</p>

</div>

<div>

<p>        }</p>

</div>

<div>

<p>    }</p>

</div>

<div>

<p> </p>

</div>

<div>

<p>However, if I fork off a thread here, freeswitch crashes:</p>

</div>

<div>

<div>

<p>    public class TestLoop : ILoadNotificationPlugin</p>

</div>

<div>

<p>    {</p>

</div>

<div>

<p>        public bool Load()</p>

</div>

<div>

<p>        {</p>

</div>

<div>

<p>          
 ThreadPool.QueueUserWorkItem((o) =&gt;</p>

</div>

<div>

<p>            {</p>

</div>

<div>

<p>              
 Log.WriteLine(LogLevel.Notice, &quot;Thread Starting. &quot;);</p>

</div>

<div>

<div>

<p>                EventConsumer
con = new EventConsumer(&quot;all&quot;, &quot;&quot;);</p>

</div>

</div>

<div>

<p>                while (true)</p>

</div>

<div>

<div>

<p>                {</p>

</div>

<div>

<p>                  
 Event ev = con.pop(0);</p>

</div>

</div>

<div>

<p>                  
 Log.WriteLine(LogLevel.Notice, &quot;Event: &quot; +
ev.serialized_string);</p>

</div>

<div>

<p>                  
 freeswitch.msleep(100);</p>

</div>

<div>

<p>                }</p>

</div>

<div>

<p>            });</p>

</div>

<div>

<p>            return true;</p>

</div>

<div>

<p>        }</p>

</div>

<div>

<p>    }</p>

</div>

<div>

<p> </p>

</div>

<div>

<p>It doesn&#39;t look like this is a good place to start a long-running process?</p>

</div>

<div>

<p> </p>

</div>

<div>

<p>Thanks!</p>

</div>

<div>

<p>Josh</p>

</div>

<div>

<p><span style="color:#888888"> </span></p>

</div>

</div>

</div>

<div>

<div>

<div>

<div>

<p>On Mon, Sep 7, 2009 at 11:05 PM, Raffaele P. Guidi &lt;<a href="mailto:raffaele.p.guidi@gmail.com" target="_blank">raffaele.p.guidi@gmail.com</a>&gt;
wrote:</p>

<p>Yes! </p>

<div>

<p> </p>

</div>

<div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">public class LoadDemo :
ILoadNotificationPlugin {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">    public bool
Load() {</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
 Log.WriteLine(LogLevel.Notice, &quot;LoadDemo running.&quot;);</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">      
 return true;</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">    }</span></p>

</div>

<div>

<p><span style="font-family:&quot;Courier New&quot;">}</span></p>

</div>

<div>

<p> </p>

</div>

<div>

<p>this example is from Michael Giagnocavo&#39;s Demo.csx which you can find into
the mod_managed svn.</p>

</div>

<div>

<p> </p>

</div>

<div>

<p>And let me add that works like a charm :)</p>

</div>

<div>

<p> </p>

</div>

<div>

<p>Ciao,</p>

</div>

<div>

<p>   Raffaele</p>

</div>

<p> </p>

<div>

<div>

<div>

<p>On Sun, Sep 6, 2009 at 22:50, Josh Rivers &lt;<a href="mailto:josh@radianttiger.com" target="_blank">josh@radianttiger.com</a>&gt;
wrote:</p>

</div>

</div>

<blockquote style="border:none;border-left:solid windowtext 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt;border-color:-moz-use-text-color -moz-use-text-color -moz-use-text-color rgb(204, 204, 204)">


<div>

<div>

<div>

<p>Is there a way to start this when FreeSWITCH starts? The lua and perl
modules have a &#39;startup-script&#39; configuration preference. Is there something
similar in mod_managed? Or is there a way to have an api command executed at a
startup?</p>

</div>

<div>

<p> </p>

</div>

<div>

<p>&lt;quote author=&quot;Phillip Jones&quot;&gt;</p>

</div>

<div>

<div>

<div>

<p>Exactly what I was after - thank you!</p>

</div>

<div>

<p> </p>

</div>

<div>

<p>On Thu, Sep 3, 2009 at 1:54 PM, Jeff Lenk &lt;<a href="mailto:jlenk@frontiernet.net" target="_blank">jlenk@frontiernet.net</a>&gt;
wrote:</p>

</div>

<div>

<p> </p>

</div>

<div>

<p>&gt; </p>

</div>

<div>

<p>&gt; try something like this</p>

</div>

<div>

<p>&gt; </p>

</div>

<div>

<p>&gt; EventConsumer con = new EventConsumer(&quot;all&quot;, &quot;&quot;);</p>

</div>

<div>

<p>&gt; Event ev = con.pop(0);</p>

</div>

<div>

<p>&gt; </p>

</div>

<div>

<p>&gt; see lua sample -</p>

</div>

<div>

<p>&gt; <a href="http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer" target="_blank">http://wiki.freeswitch.org/wiki/Lua#freeswitch.EventConsumer</a></p>

</div>

<div>

<p>&gt; </p>

</div>

<div>

<p>&gt; </p>

</div>

<div>

<p>&gt; Phillip Jones-2 wrote:</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt; Hi there,</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt; mod_managed exposes EventReceivedFunction such that:</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt;  Session.EventReceivedFunction = (e) =&gt;</p>

</div>

<div>

<p>&gt; &gt;  {</p>

</div>

<div>

<p>&gt; &gt;        Log.WriteLine(LogLevel.Alert,
&quot;Received Event {0}&quot;, e.ToString());</p>

</div>

<div>

<p>&gt; &gt;        return &quot;&quot;;</p>

</div>

<div>

<p>&gt; &gt;  };</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt; should trap all events to which i subscribe.</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt; But how do I subscribe to events? What is the .NET / managed
equivalent</p>

</div>

<div>

<p>&gt; &gt; of:</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt; switch_event_bind(const char *id, switch_event_types_t event,
const char</p>

</div>

<div>

<p>&gt; &gt; *subclass_name, switch_event_callback_t callback, void
*user_data);</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt; Thank you!</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

<div>

<p>&gt; &gt;</p>

</div>

</div>

</div>

<p> </p>

</div>

</div>

<p style="margin-bottom:12.0pt">_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">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></p>

</blockquote>

</div>

<p> </p>

</div>

<p style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">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></p>

</div>

<p> </p>

</div>

</div>

</div>

<p style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">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></p>

</div>

<p> </p>

</div>

</div>

</div>

</div>

<p style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">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></p>

</div>

<p> </p>

</div>

</div>

</div>

</div>

</div>

<p style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">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></p>

</div>

<p> </p>

</div>

</div>

<p style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">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></p>

</div>

<p> </p>

</div></div></div>

</div>


<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>
<br></blockquote></div><br></div>