[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