[asterisk-users] Large dial plans and variables
Doug Garstang
dgarstan at talkplus.com
Wed May 2 14:00:42 MST 2007
Philipp Kempgen wrote:
> Doug Garstang wrote:
>
>
>> I have a large dial plan here with over 3000 lines, and several dozen
>> macros. As it grew, it became apparent that there was some problems.
>>
>> 1. When you pass arguments to a macro in the form of $ARG1, $ARG2 etc,
>> if that macro calls another macro, and passes arguments like this as
>> well, you lose the original values.
>>
>> 2. When the macro's 'return' some value, it has to set a channel
>> variable. If your not careful, this quickly becomes a mess. Some
>> standard mechanism is needed.
>>
>> In fact, the over all problem is that all channel variables are global
>> within that channel. Macro's don't have local variables and it makes
>> programming large dial plans problematic. Even things like loop counters
>> can get trashed when your inside of a loop, and you jump somewhere else
>> and modify that loop variable, and jump back.
>>
>> Anyone got any tips on how to manage this? It would be awesome if AEL2
>> could address this somehow...
>>
>
> A possible "solution" would be to prefix all variables used
> within a macro with the name of the macro but you really feel
> it's a workaround.
>
> macro do_something( do_something_foo, do_something_bar ) {
> Set(do_something_i=0);
> //...
> }
>
> But how nice is ${do_something_i} ?
>
>
> Regards,
> Philipp
>
>
Philipp, that's what I've been doing. For readability sake, I normally
have macro's with long descriptive names, like macro-VMRetrCheckGeneral
for example. That;s ok until you start suffixing variable names to the
end. You might end up with:
VMRetrCheckGeneral_new
VMRetrCheckGeneral_old
VMRetrCheckGeneral_i
and so on. I guess it's better than nothing....
I feel that the lack of local macro variables is a big problem for the
dial plan. Until it's fixed it will hamper the development of large dial
plans.
More information about the asterisk-users
mailing list