[asterisk-dev] AEL, GoSub and DIALPLAN_EXISTS() do not like each other!

Kirill Katsnelson kkm at adaptiveai.com
Wed Feb 2 17:04:55 CST 2011


Thank you very much for your answer, but I think it misses the point 

> In the beginning, we implemented macros with macros. But, there is a limit
> of about 7 levels, and then you crash. So I changed AEL to
> implement macros with gosubs instead. Now you can use recursion to your
> heart's content.

This I understand. In fact, I am using  DIALPLAN_EXISTS() and GoSub(), 
if you noted in the code sample I shown, which will not even work with 
the old-style Macro macros:

 >>    if (${DIALPLAN_EXISTS("setup-${CUSTAPP}",s,1)}) {
 >>      GoSub(setup-${CUSTAPP},s,1);
 >>    }

> My advise: don't mix AEL macro calls with gosubs.
> Really, there should be little to no need. It'll only complicate things.

Unfortunately, we have couple hundred of applications here, but only a 
handful requires custom set-up macros (I am using the word "macro" 
*strictly* in AEL sense).

Requiring that every application had a set up macro would certainly 
complicate things. We already run about 2 thousand lines of AEL code, 
and adding 200 empty macros to it would not make it less complicated, 
with added fun of maintaining it. This is something that I am using only 
as an override to the default flow.

Besides, AEL lacks capability to call a macro by name: the macro 
invocation `& IDENTIFIER' requires IDENTIFIER be visible as a macro name 
at compile time.

> Need to use routines in extensions.conf? Take a few minutes and rewrite them
> into AEL.

I never wrote extension.conf. We went AEL from the very start few years ago.

> If you need to do some real low-level tweaks in extensions.conf, then mimic
> the conventions of AEL there. (Look at the code AEL generates for macros as
> an example).

That was my whole point. AEL lacks the capability to check if a macro 
with a run time produced name exists, and, if it is, to call it.


More information about the asterisk-dev mailing list