<DIV>&nbsp;</DIV>
<DIV>I never heard of a macro , it looks cool and I'll probably go use it 100 times now </DIV>
<DIV>thank you for pointing it out.... I have my box in production so I dont look </DIV>
<DIV>at the new config file very much to catch these new things.</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>I still think it would be cool to have in/out functions and that is&nbsp;my motivation for </DIV>
<DIV>making the app_perl</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>Macros look neat but only work in a 1 way type request </DIV>
<DIV>which I realize will satisfy my original example (well not the <STRONG>"*"</STRONG> to <STRONG>"."</STRONG> ip translation part)</DIV>
<DIV>but i'd like to get something back from it too and continue on with that info.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Does anyone think its useful to feed the data collected on the call into a Perl</DIV>
<DIV>function who can eat it up and set more global vars etc based on the input?</DIV>
<DIV>&nbsp;</DIV>
<DIV>or perhaps something cool like this below:</DIV>
<DIV>&nbsp;</DIV>
<DIV>(all my perl&nbsp;examples are really possible&nbsp;btw not just my imagination)&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>DISCLAIMER:</DIV>
<DIV>The following is an arbitrary example I came up with and if there already </DIV>
<DIV>is a way to perform the same thing I am just providing it as a demonstration</DIV>
<DIV>of something one could home grow for an application without&nbsp;hacking the </DIV>
<DIV>actual asterisk software.&nbsp; also I braved my way through setting up a box </DIV>
<DIV>with 4 t100p's and&nbsp;1 tdm400p as well as another one with a t400p</DIV>
<DIV>all without asking 1 stupid rtfm type question. so I beg of you not </DIV>
<DIV>to jump on me for missing somehting along the way, (not that anyone has yet </DIV>
<DIV>but I have read some other ones where ppl do)&nbsp; (maybe there should be </DIV>
<DIV>rtfm.asterisk.org !) </DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>[authed]</DIV>
<DIV>exten =&gt; s,1,Festival,Hello ${AUTH_USER}</DIV>
<DIV>&nbsp;</DIV>
<DIV>[incoming]</DIV>
<DIV>exten _XXXX,1,Perl,dbauth:${EXTEN}</DIV>
<DIV>exten _XXXX,2,Authenticate(${THEPASS})</DIV>
<DIV>exten _XXXX,3,Goto(authed,s,1)</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>sub lookup_pass($) {</DIV>
<DIV>
<DIV>&nbsp; # any dbi code to look up $exten's pass in a db or elsewhere &nbsp;</DIV>
<DIV>&nbsp;&nbsp;#.... for simplicity i'll hardcode 1234 </DIV>
<DIV>&nbsp;&nbsp;my $pass = "1234";</DIV>
<DIV>&nbsp; return($pass);&nbsp;</DIV></DIV>
<DIV>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>sub dbauth(@) {</DIV>
<DIV>&nbsp; my($exten) = shift;</DIV>
<DIV>&nbsp; </DIV>
<DIV>&nbsp;my $pass = lookup_pass($exten);</DIV>
<DIV>&nbsp;return )"setvar:THEPASS:$pass",</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "setvar:AUTH_USER:$exten"</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</DIV>
<DIV>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>&nbsp;</DIV>
<DIV>
<BLOCKQUOTE class=replbq style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid">Subject: Re: [Asterisk-Dev] Variable Ideas, Perl a possiblity but native<BR>would be cool too.<BR>From: Steven Critchfield <CRITCH@BASESYS.COM><BR>To: asterisk-dev@lists.digium.com<BR>Date: 01 Sep 2003 11:52:42 -0500<BR>Reply-To: asterisk-dev@lists.digium.com<BR><BR>On Mon, 2003-09-01 at 11:35, Anthony Minessale wrote:<BR>&gt; I was setting up an extensions.conf the other day when I realized some<BR>&gt; things I wish were possible and just tossing it up for input. <BR>&gt; <BR>&gt; 1)<BR>&gt; <BR>&gt; If you used a certian variable in a context it would be nice if you<BR>&gt; could<BR>&gt; change the value of that variable right before you do an include so<BR>&gt; you <BR>&gt; could make templates of sorts that could be controlled by the include<BR>&gt; command.<BR>&gt; <BR>&gt; For example<BR>&gt; <BR>&gt; [globals]<BR>&gt; OUT1=Zap/1<BR>&gt; OUT2=Zap/2<BR>&gt; <BR>&gt;
 [generic]<BR>&gt; exten =&gt; _9.,1,Dial(${OUT}/${EXTEN:1})<BR>&gt; <BR>&gt; [ex1]<BR>&gt; include =&gt; generic, OUT=${OUT1}<BR>&gt; <BR>&gt; [ex2] <BR>&gt; include =&gt; generic, OUT=${OUT2}<BR>&gt; <BR>&gt; <BR>&gt; I accomplished this using my app_perl module but doing at natively<BR>&gt; doesnt seem too complicated.<BR>&gt; <BR>&gt; [generic]<BR>&gt; exten =&gt; _9.,1,Perl,dial_by_context:${CONTEXT}<BR>&gt; exten =&gt; _9.,2,Dial(${USETRUNK}/${EXTEN:1})<BR>&gt; <BR>&gt; [ex1]<BR>&gt; include =&gt; generic<BR>&gt; <BR>&gt; [ex2] <BR>&gt; include =&gt; generic<BR>&gt; <BR>&gt; # in my asterisk_init.pm <BR>&gt; <BR>&gt; sub dial_by_context(@) {<BR>&gt; my ($context) = @_;<BR>&gt; my %trunks = (<BR>&gt; ex1 =&gt; "Zap/1",<BR>&gt; ex2 =&gt; "Zap/2",<BR>&gt; default =&gt; "Zap/1"<BR>&gt; );<BR>&gt; $trunks{$context} ||= $trunks{default};<BR>&gt; return ("setvar:USETRUNK:$trunks{$context}");<BR>&gt; }<BR>&gt; <BR>&gt; then when you are in context ex1 the ${USETRUNK} is Zap/1<BR>&gt;
 and in ex2 it's Zap/2 but you only need 1 generic context.<BR>&gt; <BR>&gt; <BR>&gt; 2)<BR>&gt; <BR>&gt; Another possibility could be to implement associative arrays as global<BR>&gt; variables.<BR>&gt; <BR>&gt; [globals]<BR>&gt; <BR>&gt; [global_hashes]<BR>&gt; TRUNKS = (ex1 =&gt; "Zap/1", ex2 =&gt; "Zap/2") <BR>&gt; <BR>&gt; [generic]<BR>&gt; exten =&gt; _9.,1,Dial(${TRUNKS}-&gt;[${CONTEXT}]/${EXTEN:1})<BR>&gt; <BR>&gt; [ex1]<BR>&gt; include =&gt; generic, OUT=${OUT1}<BR>&gt; <BR>&gt; [ex2] <BR>&gt; include =&gt; generic, OUT=${OUT2}<BR>&gt; <BR>&gt; 3)<BR>&gt; <BR>&gt; Finally a regex engine would be nice to perform tranlation on<BR>&gt; variables<BR>&gt; I also do this with app_perl but it could be native as well<BR>&gt; <BR>&gt; Say you want to be able to dial an IP address on an analog phone by<BR>&gt; using the * as a period and pattern match it and feed it to H323<BR>&gt; <BR>&gt; exten =&gt; _9*.*.*.*.,1,Perl,star_to_ip:${EXTEN:2}<BR>&gt; exten =&gt;
 _9*.*.*.*.,2,Ringing<BR>&gt; exten =&gt; _9*.*.*.*.,3,Dial(H323/${CALLIP})<BR>&gt; exten =&gt; _9*.*.*.*.,4,Congestion<BR>&gt; <BR>&gt; sub star_to_ip(@) {<BR>&gt; my $num = shift;<BR>&gt; $num =~ s/\*/\./g;<BR>&gt; return "setvar:CALLIP:$num";<BR>&gt; }<BR>&gt; <BR>&gt; perhaps just magic special var called ${SUBSTITUTE}<BR>&gt; <BR>&gt; <BR>&gt; exten =&gt; _9*.*.*.*.,1,Substitute,${EXTEN:2},*,.<BR>&gt; exten =&gt; _9*.*.*.*.,2,Ringing<BR>&gt; exten =&gt; _9*.*.*.*.,3,Dial(H323/${SUBSTITUTED})<BR>&gt; exten =&gt; _9*.*.*.*.,4,Congestion<BR>&gt; <BR>&gt; i'm sure app_substitute could be its own module I'm just offering<BR>&gt; input <BR>&gt; That's kinda why I wanted to make an app_perl so I could just make<BR>&gt; stuff <BR>&gt; on the fly w/o doing any C but I think i need to go work on it a<BR>&gt; little more before <BR>&gt; it's pubicly accepted.<BR><BR><BR>So why wouldn't a Macro work for you? <BR>-- <BR>Steven Critchfield
 <CRITCH@BASESYS.COM><BR><BR><BR></BLOCKQUOTE></DIV><p><hr SIZE=1>
Do you Yahoo!?<br>
<a href="http://us.rd.yahoo.com/evt=10469/*http://sitebuilder.yahoo.com">Yahoo! SiteBuilder</a> - Free, easy-to-use web site design software