[asterisk-users] Non-global variable that follows channel?

Jonathan H lardconcepts at gmail.com
Sun Nov 27 08:07:32 CST 2016


Thanks, Max.

Yes, of course, you are right, and I am an idiot because I was tired
and putting underscores before the variable name when I read it back!
Then I forgot to post the followup email to say I had figured it out.

Now, this SHARED was not something I was aware of, but looked like an
ideal solution to passing variables BACK from to the parent channel.

However, it does not seem to be very reliable.

Code:

[svtest1]
exten => s,1,Answer()
    same => n,Verbose(1,Answered channel:${CHANNEL})
    same => n,Dial(Local/s at svtest2,,g)
    same => n,Verbose(1,***In channel:${CHANNEL} sharedVar:
${SHARED(sharedVar,Local/s at svtest2)} )
    same => n,Hangup()

[svtest2]
exten => s,1,NoOp()
    same => n,Set(SHARED(sharedVar,Local/s at svtest2)="I have been set
in svtest2")
    same => n,Verbose(1,***In channel:${CHANNEL} sharedVar:
${SHARED(sharedVar,Local/s at svtest2)})
    same => n,Answer()
    same => n,Hangup()


Output, 4 times from console, 4 times from a normal PJSIP dialin:

Of the 8 attempts. in only 3 instances the variable survives the
journey back to the parent channel, and seemingly randomly, too.
Am I using it incorrectly?

CLI> originate local/s at svtest1 application echo
 Answered channel:Local/s at svtest1-00000027;2
 ***In channel:Local/s at svtest2-00000028;2 sharedVar: "I have been set
in svtest2"
 ***In channel:Local/s at svtest1-00000027;2 sharedVar:
CLI> originate local/s at svtest1 application echo
 Answered channel:Local/s at svtest1-00000029;2
 ***In channel:Local/s at svtest2-0000002a;2 sharedVar: "I have been set
in svtest2"
 ***In channel:Local/s at svtest1-00000029;2 sharedVar:
CLI> originate local/s at svtest1 application echo
 Answered channel:Local/s at svtest1-0000002b;2
 ***In channel:Local/s at svtest2-0000002c;2 sharedVar: "I have been set
in svtest2"
 ***In channel:Local/s at svtest1-0000002b;2 sharedVar: "I have been set
in svtest2"
CLI> originate local/s at svtest1 application echo
 Answered channel:Local/s at svtest1-0000002d;2
 ***In channel:Local/s at svtest2-0000002e;2 sharedVar: "I have been set
in svtest2"
 ***In channel:Local/s at svtest1-0000002d;2 sharedVar:
 Answered channel:PJSIP/6001-00000007
 ***In channel:Local/s at svtest2-0000002f;2 sharedVar: "I have been set
in svtest2"
 ***In channel:PJSIP/6001-00000007 sharedVar: "I have been set in svtest2"
 Answered channel:PJSIP/6001-00000008
 ***In channel:Local/s at svtest2-00000030;2 sharedVar: "I have been set
in svtest2"
 ***In channel:PJSIP/6001-00000008 sharedVar:
 Answered channel:PJSIP/6001-00000009
 ***In channel:Local/s at svtest2-00000031;2 sharedVar: "I have been set
in svtest2"
 ***In channel:PJSIP/6001-00000009 sharedVar:
 Answered channel:PJSIP/6001-0000000a
 ***In channel:Local/s at svtest2-00000032;2 sharedVar: "I have been set
in svtest2"
 ***In channel:PJSIP/6001-0000000a sharedVar: "I have been set in svtest2"

On 27 November 2016 at 11:39, Max Grobecker
<max.grobecker at ml.grobecker.info> wrote:
> Hi,
>
> is channel variable inheritance working for your setup?
> Passing variables to other channels can normally simply be done by naming the variable with one or two prefixed undersorces
> to make it available to the channel that is created from that one defining the variable.
> But I have no idea if it's getting inherited to Gosub called from a Dial command...
>  -> https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_Set
>
> If that is not working for you, you might use the SHARED() variables which are kind of global accessible by the channel ID.
> So you might call your Gosub with only the (unique) reference name of the variables you wish to pass and then call it from your Gosub.
>  -> https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Function_SHARED
>
>
> Greetings,
>  Max
>
>
> Am 23.11.2016 um 13:06 schrieb Jonathan H:
>> Related to http://lists.digium.com/pipermail/asterisk-users/2016-November/290384.html,
>> at the moment I'm passing one variable via DIAL.
>>
>> Now I'd like to pass a whole bunch, and my idea was to rather than
>> having a great string of
>>
>> b(synctest3b^setVar^1(something)^2(more things)^3(etc))
>>
>> and then get them with ARG1..ARGn etc, I could bundle the whole lot
>> into a HASH and then unbundle them at the called channel.
>>
>> Passing the HASH as a var isn't working (I wasn't expecting it to!)
>> but is there any other way of doing this, or is it setVar for each
>> one?
>>
>
>
> --
> _____________________________________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> Check out the new Asterisk community forum at: https://community.asterisk.org/
>
> New to Asterisk? Start here:
>       https://wiki.asterisk.org/wiki/display/AST/Getting+Started
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users



More information about the asterisk-users mailing list