[Freeswitch-users] Random number generation
Srigo Kana
ksrigo at gmail.com
Tue Jan 24 23:30:18 MSK 2017
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] 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] 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] 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
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20170124/cd073849/attachment-0001.html
Join us at ClueCon 2016 Aug 8-12, 2016
More information about the FreeSWITCH-users
mailing list