[Asterisk-Dev] Variable Ideas, Perl a possiblity but native
would be cool too.
Steven Critchfield
critch at basesys.com
Mon Sep 1 09:52:42 MST 2003
On Mon, 2003-09-01 at 11:35, Anthony Minessale wrote:
> I was setting up an extensions.conf the other day when I realized some
> things I wish were possible and just tossing it up for input.
>
> 1)
>
> If you used a certian variable in a context it would be nice if you
> could
> change the value of that variable right before you do an include so
> you
> could make templates of sorts that could be controlled by the include
> command.
>
> For example
>
> [globals]
> OUT1=Zap/1
> OUT2=Zap/2
>
> [generic]
> exten => _9.,1,Dial(${OUT}/${EXTEN:1})
>
> [ex1]
> include => generic, OUT=${OUT1}
>
> [ex2]
> include => generic, OUT=${OUT2}
>
>
> I accomplished this using my app_perl module but doing at natively
> doesnt seem too complicated.
>
> [generic]
> exten => _9.,1,Perl,dial_by_context:${CONTEXT}
> exten => _9.,2,Dial(${USETRUNK}/${EXTEN:1})
>
> [ex1]
> include => generic
>
> [ex2]
> include => generic
>
> # in my asterisk_init.pm
>
> sub dial_by_context(@) {
> my ($context) = @_;
> my %trunks = (
> ex1 => "Zap/1",
> ex2 => "Zap/2",
> default => "Zap/1"
> );
> $trunks{$context} ||= $trunks{default};
> return ("setvar:USETRUNK:$trunks{$context}");
> }
>
> then when you are in context ex1 the ${USETRUNK} is Zap/1
> and in ex2 it's Zap/2 but you only need 1 generic context.
>
>
> 2)
>
> Another possibility could be to implement associative arrays as global
> variables.
>
> [globals]
>
> [global_hashes]
> TRUNKS = (ex1 => "Zap/1", ex2 => "Zap/2")
>
> [generic]
> exten => _9.,1,Dial(${TRUNKS}->[${CONTEXT}]/${EXTEN:1})
>
> [ex1]
> include => generic, OUT=${OUT1}
>
> [ex2]
> include => generic, OUT=${OUT2}
>
> 3)
>
> Finally a regex engine would be nice to perform tranlation on
> variables
> I also do this with app_perl but it could be native as well
>
> Say you want to be able to dial an IP address on an analog phone by
> using the * as a period and pattern match it and feed it to H323
>
> exten => _9*.*.*.*.,1,Perl,star_to_ip:${EXTEN:2}
> exten => _9*.*.*.*.,2,Ringing
> exten => _9*.*.*.*.,3,Dial(H323/${CALLIP})
> exten => _9*.*.*.*.,4,Congestion
>
> sub star_to_ip(@) {
> my $num = shift;
> $num =~ s/\*/\./g;
> return "setvar:CALLIP:$num";
> }
>
> perhaps just magic special var called ${SUBSTITUTE}
>
>
> exten => _9*.*.*.*.,1,Substitute,${EXTEN:2},*,.
> exten => _9*.*.*.*.,2,Ringing
> exten => _9*.*.*.*.,3,Dial(H323/${SUBSTITUTED})
> exten => _9*.*.*.*.,4,Congestion
>
> i'm sure app_substitute could be its own module I'm just offering
> input
> That's kinda why I wanted to make an app_perl so I could just make
> stuff
> on the fly w/o doing any C but I think i need to go work on it a
> little more before
> it's pubicly accepted.
So why wouldn't a Macro work for you?
--
Steven Critchfield <critch at basesys.com>
More information about the asterisk-dev
mailing list