[asterisk-users] AEL switch & case

asterisk at phreaknet.org asterisk at phreaknet.org
Wed Aug 31 05:47:13 CDT 2022


On 8/31/2022 6:32 AM, Antony Stone wrote:
> Hi.
>
> I think I've discovered a bug in either the implementation of the
> documentation of the AEL switch command.
>
> https://wiki.asterisk.org/wiki/display/AST/AEL+Conditionals gives an example
> of using switch, and states at the bottom:
>
> "Neither the switch nor case values are wrapped in $[ ]; they can be
> constants, or ${var} type references only."
>
> However, I've run into a problem, which can be demonstrated by the simple
> context:
>
> context SwitchTest {
>    s => {
>      Set(FortyTwo=42);
>      Set(SixByNine=54);
>      switch(${SixByNine}) {
>        case 123:
>          NoOp(123);
>          break;
>        case ${FortyTwo}:
>          NoOp(${FortyTwo});
>          break;
>      }
>    }
> }
>
> This gets converted by AEL into:
>
> [ Context 'SwitchTest' created by 'pbx_ael' ]
>    's' =>            1. MSet(~~EXTEN~~=${EXTEN})
>                      2. Set(FortyTwo=42)
>                      3. Set(SixByNine=54)
>                      4. Goto(sw_5410_${SixByNine},10)
>                      5. NoOp(Finish switch_SwitchTest_5410)
>    'sw_5410_' =>     10. Goto(sw_5410_.,10)
>                      11. Goto(s,5)
>    'sw_5410_123' =>  10. NoOp(123)
>                      11. Goto(s,5)
>    '_sw_5410_.' =>   10. Goto(s,5)
>
> So, there was no implementation of the "case ${FortyTwo}" match.
>
> Am I misundertanding "they can be constants, or ${var} type references only."?
I don't think this is a bug. ${FortyTwo} is not defined when the AEL 
dialplan is transpiled into dialplan. It only gets set at runtime.
This might work if you made FortyTwo a global variable, which would be 
available when this gets parsed.

NA



More information about the asterisk-users mailing list