[Asterisk-Users] New Module app_perl

Martin Pycko martinp at digium.com
Tue Jun 17 09:11:01 MST 2003


Of course you can use Gotoif with expressions.

Gotoif,$[${VAR} > 12]?1|4:1|5

Martin

On Tue, 17 Jun 2003, Anthony Minessale wrote:

>
> I just made my first 2 modules for asterisk (The 1st one is depriciated already).
>
> I was annoyed that i couldn't get GotoIf to take any expressions besides a boolean
> then i made a module to mimic gotoif and parse a few expressions like (${var} > 12)
> exten => 1,1,gotoif_expr,${var} > 12:1|4:1|5
>
> Then I immediatly obseleted it with this new embedded perl module that lets
> you implement stuff at will from perl instead of needing to make a module
>
> Say you want to make gotoif that can parse expressions
>
> exten => 1,1,Perl,gotoif:${var} > 12:1|4:1|5
>
> say ${var} = 4
>
> then gotoif perl sub is launched as
>
> gotoif(4,"1|4","1|5");
>
> and gotoif() looks like:
>
>
> sub gotoif(@) {
>   my($expr,$goto1,$goto2) = @_;
>   my $test;
>   eval "\$test = ($expr)";
>   my $ret = "goto:" . (($test) ? $goto1 : $goto2);
>   print "test: [$expr] = [$test] [$ret]\n";
>   $ret;
> }
>
> Funy thing is I was too obcessed with what I had already seen so far in asterisk that
> I didnt even notice AGI until yesterday =)
>
> here is my beta README
>
>
>
> app_perl 1.0
>
>
> This is app_perl the "mod_perl" of sorts for asterisk.  It is an actual live Perl Interpreter
> embeded in a module so when it starts up the perl stays resident in memory the whole life of the
> Asterisk process.
>
> FEATURES:
>
>         It can call perl functions from extensions.conf in a special package called Asterisk::Perl.
>         that is loaded on startup from /etc/asterisk/Asterisk::Perl.pm.
>
>         exten => 1,1,Perl,myfunc:arg_1:arg_2:arg_n......
>
>         It then does it's business and returns one or more special directives that
>         are asterisk related operations processed by the module.
>         they are returned as a list (array) of scalar each containing a specially formated
>         command to feed back into asterisk via the C module.
>
>         These are counterparts to the real directives found in extensions.conf only probably
>         there is less error checking and more direct control a.k.a. likelyhood to crash.
>
>
>         Valid commands so far.......
>
>         setvar:<name>:<value>
>         goto:<ext>|<line>
>         add_ext:<context>:<replace>:<extension>:<priority>:<application>:<data>:<callerid>
>         runapp:<app>:<data>
>         include:<new_context>:<existing_context>
>         ignorepat:<context>:<name>
>         switch:<context>:<app>:<data>
>
>
>         There are also some special commands: (1 for now)
>
>         thread:<function>
>         This will spin off a thread with the perl sub you specify running inside it.
>         the sub will get 1 scalar arg being the number of times it was run (starting with 1)
>         you can return an array full of more commands listed above with 1 exception:
>         if you put the keyword "loop" in the list, it will call the function again and increment the counter arg.
>         You can use this to say run 1 thread to listen on a tcp port and populate a shared data object
>         and use another to run in a loop and pass the altered data back to asterisk and relaunch
>         every 1 min or so.  And of core all this stuff can be used to horribly crash the program.
>
>         The function can return as many commands as it wants but of corse several goto or other such nonsense
>         may not be too smart.
>
>
>         The functions startup() and shutdown() are called respectively on load and unload of the module
>         allowing you to create on the fly contexts and configuration by looking up data from a database,more files etc.
>         you can even make the dialing of a certian extension cause a perl func to create more extensions or to
>         rewrite the existing one on the fly.  Of course, you can't do any channel related commands (runapp etc)
>         from the startup function because there is no call in progress so they get ignored.
>
>
> BUGS:
>
>         If you stare at the source code from about 2 feet back for approx 30 seconds you will start
>         to see that the entire thing is in itself 1 large bug.  I am not a C programmer but rather
>         a Perl programmer so that was my motivation for this idea but it probably is sucky C style etc...
>
>
>
>
>
>
>
> ---------------------------------
> Do you Yahoo!?
> SBC Yahoo! DSL - Now only $29.95 per month!




More information about the asterisk-users mailing list