[Freeswitch-users] Random number generation

Anthony Minessale anthony.minessale at gmail.com
Wed Jan 25 21:46:43 MSK 2017


On further review, this has been a bug in the expr library used in that
module since the beginning.

Fixed in master and 1.6 branch
https://freeswitch.org/jira/browse/FS-9978


--------------------------------------------------------------------------------------------------------------------
Help FEED the FS Developers during the annual developer summit!
https://www.gofundme.com/freeswitch-developer-meeting-2017



On Wed, Jan 25, 2017 at 2:32 AM, Chris Young <Chris.Young at enghouse.com>
wrote:

> Hi Anthony,
>
>
>
> Yes, it's a VM but I also tried it on a physical machine and got the same
> behaviour. I am running on Windows so perhaps that's the issue (although
> I'm not sure why it should be). Unfortunately, because of that I don't
> think the services you mentioned will be applicable.
>
>
>
> I also tried the command direct from the FreeSWITCH console (sorry, I
> forgot to mention that in my previous post) but saw the same results.
>
>
>
> Thanks,
>
> Chris
>
>
>
> *From:* freeswitch-users-bounces at lists.freeswitch.org [mailto:
> freeswitch-users-bounces at lists.freeswitch.org] *On Behalf Of *Anthony
> Minessale
> *Sent:* 24 January 2017 20:52
>
> *To:* FreeSWITCH Users Help <freeswitch-users at lists.freeswitch.org>
> *Subject:* Re: [Freeswitch-users] Random number generation
>
>
>
> Is it a VM? Maybe you have no entropy, can also prevent startup sometimes.
>
>
>
> Try installing rng-tools
>
> If the service doesn't start you have to edit /etc/init.d/rng-tools and
> change the device to /dev/urandom
>
>
>
> then
>
> systemctl daemon-reload
>
> systemctl start rng-tools.service
>
>
>
> you can test it without making calls by just running this at the cli
>
> expr randomize(&x);ceil(random(0,100,&x))
>
>
>
>
>
>
>
> On Tue, Jan 24, 2017 at 2:30 PM, Srigo Kana <ksrigo at gmail.com> wrote:
>
> We are running on Debian Jessie.
>
>
>
> Srigo
>
>
> On 24 Jan 2017, at 14:36, Chris Young <Chris.Young at enghouse.com> wrote:
>
> It's very strange. Anyway, thank you for trying and for confirming my
> dialplan.
>
>
>
> Out of interest, which platform are you running FreeSWITCH on?
>
>
>
> *From:* freeswitch-users-bounces at lists.freeswitch.org [
> mailto:freeswitch-users-bounces at lists.freeswitch.org
> <freeswitch-users-bounces at lists.freeswitch.org>] *On Behalf Of *KSrigo
> *Sent:* 24 January 2017 13:26
> *To:* FreeSWITCH Users Help <freeswitch-users at lists.freeswitch.org>
> *Subject:* Re: [Freeswitch-users] Random number generation
>
>
>
> Then I have no idea why it’s not working for you. I even tried your
> dialplan its working fine:
>
>
>
> Dialplan:
>
>
>
> <!--TEST START-->
>
>
>
> <extension name="call_duration" continue="true">
>
>         <condition field="destination_number"
> expression="^call_duration$" break="never">
>
>                 <action application="set" data="call_length=${expr(
> randomize(&x);ceil(random(29999,45000,&x)))}" inline="true"/>
>
>                 <action application="log" data="INFO Random value is
> ${call_length}"/>
>
>         </condition>
>
> </extension>
>
>
>
> <extension name="transfer_request">
>
>         <condition field="destination_number" expression="^\*(85)$">
>
>                 <action application="pre_answer"/>
>
>                 <action application="answer"/>
>
>                 <action application="execute_extension"
> data="call_duration XML from-core"/>
>
>                 <action application="log" data="INFO Call from
> ${caller_id_number} to ${destination_number} will last for
> ${call_length}ms"/>
>
>                 <action application="execute_extension"
> data="call_duration XML from-core"/>
>
>                 <action application="log" data="INFO Call from
> ${caller_id_number} to ${destination_number} will last for
> ${call_length}ms"/>
>
>                 <action application="sleep" data="${call_length}"/>
>
>                 <action application="hangup" data="NORMAL_CLEARING"/>
>
>         </condition>
>
> </extension>
>
>
>
> <!--TEST END-->
>
>
>
>
>
> Output:
>
>
>
> 2017-01-24 13:22:23.616006 [INFO] mod_dialplan_xml.c:637 Processing
> 33170567631 <33170567631>->call_duration in context from-core
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->unloop] continue=false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (PASS) [unloop]
> ${unroll_loops}(true) =~ /^true$/ break=on-false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (FAIL) [unloop]
> ${sip_looped_call}() =~ /^true$/ break=on-false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->outside_call] continue=true
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Absolute Condition
> [outside_call]
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action
> set(outside_call=true)
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action
> export(RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)})
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->call_duration] continue=true
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (PASS)
> [call_duration] destination_number(call_duration) =~ /^call_duration$/
> break=never
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action
> set(call_length=${expr(randomize(&x);ceil(random(29999,45000,&x)))})
> INLINE
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com set(call_length=35719)
>
> 2017-01-24 13:22:23.616006 [DEBUG] mod_dptools.c:1519 SET
> sofia/core/33170567631 at sip.v.ibrowse.com [call_length]=[35719]
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action log(INFO Random
> value is ${call_length})
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->transfer_request] continue=false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (FAIL)
> [transfer_request] destination_number(call_duration) =~ /^\*(85)$/
> break=on-false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->call_debug] continue=true
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (FAIL)
> [call_debug] ${call_debug}(false) =~ /^true$/ break=never
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->homer_X_cid] continue=true
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (PASS)
> [homer_X_cid] destination_number(call_duration) =~ /.*/ break=on-false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action
> set(sip_h_X-CID=${sip_call_id})
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->Local_Extension] continue=false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (FAIL)
> [Local_Extension] destination_number(call_duration) =~ /^\*(85)$/
> break=on-false
>
> 2017-01-24 13:22:23.616006 [NOTICE] switch_core_session.c:2895 Execute
> set(outside_call=true)
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com set(outside_call=true)
>
> 2017-01-24 13:22:23.616006 [DEBUG] mod_dptools.c:1519 SET
> sofia/core/33170567631 at sip.v.ibrowse.com [outside_call]=[true]
>
> 2017-01-24 13:22:23.616006 [NOTICE] switch_core_session.c:2895 Execute
> export(RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)})
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com export(RFC2822_DATE=Tue,
> 24 Jan 2017 13:22:23 +0000)
>
> 2017-01-24 13:22:23.616006 [DEBUG] switch_channel.c:1296 EXPORT
> (export_vars) [RFC2822_DATE]=[Tue, 24 Jan 2017 13:22:23 +0000]
>
> 2017-01-24 13:22:23.616006 [NOTICE] switch_core_session.c:2895 Execute
> log(INFO Random value is ${call_length})
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com log(INFO Random value is
> 35719)
>
> *2017-01-24 13:22:23.616006 [INFO] mod_dptools.c:1713 Random value is
> 35719*
>
> 2017-01-24 13:22:23.616006 [NOTICE] switch_core_session.c:2895 Execute
> set(sip_h_X-CID=${sip_call_id})
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com set(sip_h_X-CID=
> 313438353236343134333135383733-7sj1k4kl0i83)
>
> 2017-01-24 13:22:23.616006 [DEBUG] mod_dptools.c:1519 SET
> sofia/core/33170567631 at sip.v.ibrowse.com [sip_h_X-CID]=[
> 313438353236343134333135383733-7sj1k4kl0i83]
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com log(INFO Call from
> 33170567631 to *85 will last for 35719ms)
>
> 2017-01-24 13:22:23.616006 [INFO] mod_dptools.c:1713 Call from 33170567631
> to *85 will last for 35719ms
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com execute_extension(call_duration
> XML from-core)
>
> 2017-01-24 13:22:23.616006 [INFO] mod_dialplan_xml.c:637 Processing
> 33170567631 <33170567631>->call_duration in context from-core
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->unloop] continue=false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (PASS) [unloop]
> ${unroll_loops}(true) =~ /^true$/ break=on-false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (FAIL) [unloop]
> ${sip_looped_call}() =~ /^true$/ break=on-false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->outside_call] continue=true
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Absolute Condition
> [outside_call]
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action
> set(outside_call=true)
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action
> export(RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)})
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->call_duration] continue=true
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (PASS)
> [call_duration] destination_number(call_duration) =~ /^call_duration$/
> break=never
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action
> set(call_length=${expr(randomize(&x);ceil(random(29999,45000,&x)))})
> INLINE
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com set(call_length=33576)
>
> 2017-01-24 13:22:23.616006 [DEBUG] mod_dptools.c:1519 SET
> sofia/core/33170567631 at sip.v.ibrowse.com [call_length]=[33576]
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action log(INFO Random
> value is ${call_length})
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->transfer_request] continue=false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (FAIL)
> [transfer_request] destination_number(call_duration) =~ /^\*(85)$/
> break=on-false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->call_debug] continue=true
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (FAIL)
> [call_debug] ${call_debug}(false) =~ /^true$/ break=never
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->homer_X_cid] continue=true
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (PASS)
> [homer_X_cid] destination_number(call_duration) =~ /.*/ break=on-false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Action
> set(sip_h_X-CID=${sip_call_id})
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com parsing
> [from-core->Local_Extension] continue=false
>
> Dialplan: sofia/core/33170567631 at sip.v.ibrowse.com Regex (FAIL)
> [Local_Extension] destination_number(call_duration) =~ /^\*(85)$/
> break=on-false
>
> 2017-01-24 13:22:23.616006 [NOTICE] switch_core_session.c:2895 Execute
> set(outside_call=true)
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com set(outside_call=true)
>
> 2017-01-24 13:22:23.616006 [DEBUG] mod_dptools.c:1519 SET
> sofia/core/33170567631 at sip.v.ibrowse.com [outside_call]=[true]
>
> 2017-01-24 13:22:23.616006 [NOTICE] switch_core_session.c:2895 Execute
> export(RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)})
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com export(RFC2822_DATE=Tue,
> 24 Jan 2017 13:22:23 +0000)
>
> 2017-01-24 13:22:23.616006 [DEBUG] switch_channel.c:1296 EXPORT
> (export_vars) [RFC2822_DATE]=[Tue, 24 Jan 2017 13:22:23 +0000]
>
> 2017-01-24 13:22:23.616006 [NOTICE] switch_core_session.c:2895 Execute
> log(INFO Random value is ${call_length})
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com log(INFO Random value is
> 33576)
>
> *2017-01-24 13:22:23.616006 [INFO] mod_dptools.c:1713 Random value is
> 33576*
>
> 2017-01-24 13:22:23.616006 [NOTICE] switch_core_session.c:2895 Execute
> set(sip_h_X-CID=${sip_call_id})
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com set(sip_h_X-CID=
> 313438353236343134333135383733-7sj1k4kl0i83)
>
> 2017-01-24 13:22:23.616006 [DEBUG] mod_dptools.c:1519 SET
> sofia/core/33170567631 at sip.v.ibrowse.com [sip_h_X-CID]=[
> 313438353236343134333135383733-7sj1k4kl0i83]
>
> EXECUTE sofia/core/33170567631 at sip.v.ibrowse.com log(INFO Call from
> 33170567631 to *85 will last for 33576ms)
>
> 2017-01-24 13:22:23.616006 [INFO] mod_dptools.c:1713 Call from 33170567631
> to *85 will last for 33576ms
>
>
>
>
>
> regards,
>
> srigo
>
>
>
>
>
> On Jan 24, 2017, at 2:00 PM, Chris Young <Chris.Young at enghouse.com> wrote:
>
>
>
> I was running an older version of FreeSWITCH (1.5.15) but I've just
> retried with 1.6.14 and I still get the same behaviour. I am running on
> Windows in case that makes any difference.
>
>
>
> Here is my dialplan. This server is part of a test environment and what I
> am trying to achieve is to have a variable call duration:
>
>
>
> <?xml version="1.0" encoding="utf-8"?>
>
> <include>
>
>                 <extension name="persistent_agent_leg">
>
> <condition field="destination_number" expression="^([78]\d{3})$">
>
>
> <action application="set" data="send_silence_when_idle=400"/>
>
> <action application="pre_answer"/>
>
>                                                 <action
> application="answer"/>
>
>                                <action application="park"/>
>
>                                 </condition>
>
>                 </extension>
>
>
>
>                 <extension name="call_duration" continue="true">
>
>                                 <condition field="destination_number"
> expression="^call_duration$" break="never">
>
>                                                 <action application="set"
> data="call_length=${expr(randomize(&x);ceil(random(29999,45000,&x)))}"
> inline="true"/>
>
>                                 </condition>
>
>                 </extension>
>
>
>
>                 <extension name="transfer_request">
>
>                                 <condition field="destination_number"
> expression="^([45]\d{3})$">
>
>                                                 <action
> application="pre_answer"/>
>
>                                                 <action
> application="answer"/>
>
>                                                 <action
> application="execute_extension" data="call_duration XML default"/>
>
>                                                 <action application="log"
> data="INFO Call from ${caller_id_number} to ${destination_number} will last
> for ${call_length}ms"/>
>
>                                                 <action
> application="sleep" data="${call_length}"/>
>
>                                                 <action
> application="hangup" data="NORMAL_CLEARING"/>
>
>                                 </condition>
>
>                 </extension>
>
> </include>
>
>
>
>
>
> *From:* freeswitch-users-bounces at lists.freeswitch.org [
> mailto:freeswitch-users-bounces at lists.freeswitch.org
> <freeswitch-users-bounces at lists.freeswitch.org>] *On Behalf Of *KSrigo
> *Sent:* 24 January 2017 10:37
> *To:* FreeSWITCH Users Help <freeswitch-users at lists.freeswitch.org>
> *Subject:* Re: [Freeswitch-users] Random number generation
>
>
>
> Yes “from-core" was my context for the test. You have to update according
> your config. Could you tell me your freeswitch version?
>
> Mine is: FreeSWITCH Version 1.6.8-15-99de0ad~64bit. The config I gave you
> works fine on it.
>
>
>
> Could you post your dialplan ?
>
>
>
> Here is the whole dial plan I used for the test:
>
>
>
> <include>
>
>   <context name="from-core">
>
>     <extension name="random_number_gen" continue="true">
>
>       <condition field="destination_number" expression="^random_number_gen$"
> break="never">
>
>         <!-- generate random number between 1 and 100 -->
>
>         <action application="set" data="rand_val=${expr(
> randomize(&x);ceil(random(0,100,&x)))}" inline="true"/>
>
>         <action application="log" data="INFO Random value is ${rand_val}"/>
>
>       </condition>
>
>     </extension>
>
>
>
>     <extension name="Local_Extension">
>
>       <condition field="destination_number" expression="^\*(85)$">
>
>         <!--test 1-->
>
>         <action application="execute_extension" data="random_number_gen
> XML from-core"/>
>
>         <!--test 2-->
>
>         <action application="execute_extension" data="random_number_gen
> XML from-core"/>
>
>         <action application="hangup"/>
>
>       </condition>
>
>     </extension>
>
>   </context>
>
> <include>
>
>
>
> Regards,
>
> Srigo
>
>
>
> On Jan 24, 2017, at 10:52 AM, Chris Young <Chris.Young at enghouse.com>
> wrote:
>
>
>
> Hi Srigo,
>
>
>
> Thanks for your help. Unfortunately, I still see the same value getting
> generated each time the extension gets executed e.g.
>
>
>
>                 51a7a226-27e6-4fe3-979b-0b0bb28253d9 2017-01-24
> 09:49:21.504783 [INFO] mod_dptools.c:1628 Random value is 1
>
> 70aae2dc-cee6-4a3c-805f-5655abd7e6e6 2017-01-24 09:49:21.965642 [INFO]
> mod_dptools.c:1628 Random value is 1
>
> 92e81c00-0ff0-4ddc-819f-019c145f39be 2017-01-24 09:49:22.444287 [INFO]
> mod_dptools.c:1628 Random value is 1
>
>
>
> I take it that from-core is some context you've defined in your
> environment rather than anything special, as it didn't work when I used
> that (so I changed it to 'default')?
>
>
>
> Regards,
>
> Chris
>
>
>
>
>
> *From:* freeswitch-users-bounces at lists.freeswitch.org [
> mailto:freeswitch-users-bounces at lists.freeswitch.org
> <freeswitch-users-bounces at lists.freeswitch.org>] *On Behalf Of *KSrigo
> *Sent:* 24 January 2017 09:14
> *To:* FreeSWITCH Users Help <freeswitch-users at lists.freeswitch.org>
> *Subject:* Re: [Freeswitch-users] Random number generation
>
>
>
> Hi Chris,
>
>
>
> I’m not sure if I understood exactly your needs. This is how I use
> randomize function:
>
>
>
> Define Random Number Generator extension:
>
>
>
> <extension name="random_number_gen" continue="true">
>
>   <condition field="destination_number" expression="^random_number_gen$"
> break="never">
>
>     <!-- generate random number between 1 and 100 -->
>
>     <action application="set" data="rand_val=${expr(
> randomize(&x);ceil(random(0,100,&x)))}" inline="true"/>
>
>     <action application="log" data="INFO Random value is ${rand_val}"/>
>
>   </condition>
>
> </extension>
>
>
>
>
>
> then call it in your diaplan each time you need to get a random number set:
>
>
>
> <action application="execute_extension" data="random_number_gen XML
> from-core"/>
>
>
>
>
>
> Regards,
>
> Srigo
>
>
>
>
>
> On Jan 24, 2017, at 9:51 AM, Chris Young <Chris.Young at enghouse.com> wrote:
>
>
>
> Hello all,
>
>
>
> On the wiki, there is an example of using mod_expr to generate a random
> number:
>
>
>
>                 <!-- generate random number between 1 and 100 -->
>
>                 <action application="set" data="rand_val=${expr(
> randomize(&x);ceil(random(0,100,&x)))}"/>
>
>                 <action application="log" data="INFO Random value is
> ${rand_val}"/>
>
>
>
> This works well the first time but if the same dialplan instructions are
> executed subsequently, the same number is produced each time.
>
>
>
> Is this by design? Is there any other way to seed the random number
> generator so it will produce different results, as randomize() doesn't seem
> to be doing quite what I thought it would?
>
>
>
> Many thanks,
>
> Chris
>
>
>
> Chris Young
> Software Engineer
> <image001.png>
> t:  +44 118 943 9249 <+44%20118%20943%209249>
> e:  chris.young at enghouse.com
> w: www.enghouseinteractive.co.uk
> <image002.png>
>
> Enghouse Interactive (UK) Ltd is a company registered in England and
> Wales. Registered number: 04230977. Registered office: Imperium, Imperial
> Way, Reading, Berkshire, RG2 0TD
>
>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
>
>
>
> --
>
> Anthony Minessale II       ♬ @anthmfs  ♬ @FreeSWITCH  ♬
>
>
>
>http://freeswitch.org/http://cluecon.com/> http://twitter.com/FreeSWITCH
>
> ☞ irc.freenode.net #freeswitch ☞ *http://freeswitch.org/g+
> <http://freeswitch.org/g+>*
>
> ClueCon Weekly Development Call
>
> ☎ sip:888 at conference.freeswitch.org  ☎ +19193869900 <(919)%20386-9900>
>
>
>
> https://www.youtube.com/watch?v=9XXgW34t40s
>
> https://www.youtube.com/watch?v=NLaDpGQuZDA
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>



-- 
Anthony Minessale II       ♬ @anthmfs  ♬ @FreeSWITCH  ♬

☞ http://freeswitch.org/http://cluecon.com/http://twitter.com/FreeSWITCH
☞ irc.freenode.net #freeswitch ☞ *http://freeswitch.org/g+
<http://freeswitch.org/g+>*

ClueCon Weekly Development Call
☎ sip:888 at conference.freeswitch.org  ☎ +19193869900

https://www.youtube.com/watch?v=9XXgW34t40s
https://www.youtube.com/watch?v=NLaDpGQuZDA
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20170125/81d27cb7/attachment-0001.html 


Join us at ClueCon 2016 Aug 8-12, 2016
More information about the FreeSWITCH-users mailing list