aboutsummaryrefslogtreecommitdiffstats
path: root/1.2-netsec/doc/README.ael
diff options
context:
space:
mode:
Diffstat (limited to '1.2-netsec/doc/README.ael')
-rw-r--r--1.2-netsec/doc/README.ael273
1 files changed, 0 insertions, 273 deletions
diff --git a/1.2-netsec/doc/README.ael b/1.2-netsec/doc/README.ael
deleted file mode 100644
index e2014a4e1..000000000
--- a/1.2-netsec/doc/README.ael
+++ /dev/null
@@ -1,273 +0,0 @@
-The Asterisk Extension Language
-===================================
-
-Over time, people have been pushing to add features to extensions.conf to make
-it more like a programming language. AEL is intended to provide an actual
-programming language that can be used to write an Asterisk dialplan.
-
-Getting Started
--------------------------
-The AEL parser (pbx_ael.so) is completely separate from the module
-that parses extensions.conf (pbx_config.so). To use AEL, the only thing that
-has to be done is the module pbx_ael.so must be loaded by Asterisk. This will
-be done automatically if using 'autoload=yes' in /etc/asterisk/modules.conf.
-When the module is loaded, it will look for 'extensions.ael' in /etc/asterisk/.
-Both extensions.conf and extensions.ael can be used in conjunction with each
-other if that is what is desired. Some users may want to keep extensions.conf
-for the features that are configured in the 'general' section of
-extensions.conf.
-
-
-Reloading extensions.ael
--------------------------
-To reload extensions.ael, the following command can be issued at the CLI.
-
- *CLI> reload pbx_ael.so
-
-
-Contexts
--------------------------
-Contexts in AEL represent a set of extensions in the same way that they do
-in extensions.conf.
-
-context default {
-
-};
-
-
-Extensions
--------------------------
-To specify an extension in a context, the following syntax is used. If more
-than one application is be called in an extension, they can be listed in order
-inside of a block.
-
-context default {
- 1234 => Playback(tt-monkeys);
- 8000 => {
- NoOp(one);
- NoOp(two);
- NoOp(three);
- };
- _5XXX => NoOp(it's a pattern!);
-};
-
-
-Includes
--------------------------
-Contexts can be included in other contexts. All included contexts are listed
-within a single block.
-
-context default {
- includes {
- local;
- longdistance;
- international;
- };
-};
-
-
-Dialplan Switches
--------------------------
-Switches are listed in their own block within a context.
-
-context default {
- switches {
- DUNDi/e164;
- IAX2/box5;
- };
- eswitches {
- IAX2/context@${CURSERVER};
- };
-};
-
-
-Ignorepat
--------------------------
-ignorepat can be used to instruct channel drivers to not cancel dialtone upon
-receipt of a particular pattern. The most commonly used example is '9'.
-
-context outgoing {
- ignorepat => 9;
-};
-
-
-Variables
--------------------------
-Variables in Asterisk do not have a type, so to define a variable, it just has
-to be specified with a value.
-
-Global variables are set in their own block.
-
-globals {
- CONSOLE=Console/dsp;
- TRUNK=Zap/g2;
-};
-
-Variables can be set within extensions as well.
-
-context foo {
- 555 => {
- x=5;
- y=blah;
- NoOp(x is ${x} and y is ${y} !);
- };
-};
-
-Writing to a dialplan function is treated the same as writing to a variable.
-
-context blah {
- s => {
- CALLERID(name)=ChickenMan;
- NoOp(My name is ${CALLERID(name)} !);
- };
-};
-
-
-Loops
--------------------------
-AEL has implementations of 'for' and 'while' loops.
-
-context loops {
- 1 => {
- for (x=0; ${x} < 3; x=${x} + 1) {
- Verbose(x is ${x} !);
- };
- };
- 2 => {
- y=10;
- while (${y} >= 0) {
- Verbose(y is ${y} !);
- y=${y}-1;
- };
- };
-};
-
-
-Conditionals
--------------------------
-AEL supports if and switch statements. Note that if you have an else
-clause, you MUST place braces around the non-else portion of the if
-statement.
-
-context conditional {
- _8XXX => {
- Dial(SIP/${EXTEN});
- if (${DIALSTATUS} = "BUSY") {
- Voicemail(${EXTEN}|b);
- } else
- Voicemail(${EXTEN}|u);
- };
- _777X => {
- switch (${EXTEN}) {
- case 7771:
- NoOp(You called 7771!);
- break;
- case 7772:
- NoOp(You called 7772!);
- break;
- case 7773:
- NoOp(You called 7773!);
- // fall through
- default:
- NoOp(In the default clause!);
- };
- };
-};
-
-
-goto and labels
--------------------------
-This is an example of how to do a goto in AEL.
-
-context gotoexample {
- s => {
-begin:
- NoOp(Infinite Loop! yay!);
- Wait(1);
- goto begin;
- };
-};
-
-
-Macros
--------------------------
-A macro is defined in its own block like this. The arguments to the macro are
-specified with the name of the macro. They are then reffered to by that same
-name. A catch block can be specified to catch special extensions.
-
-macro std-exten( ext , dev ) {
- Dial(${dev}/${ext},20);
- switch(${DIALSTATUS) {
- case BUSY:
- Voicemail(b${ext});
- break;
- default:
- Voicemail(u${ext});
- };
- catch a {
- VoiceMailMain(${ext});
- return;
- };
-};
-
-A macro is then called by preceeding the macro name with an ampersand.
-
-context example {
- _5XXX => &std-exten(${EXTEN}, "IAX2");
-};
-
-
-Examples
-------------------------
-
-context demo {
- s => {
- Wait(1);
- Answer();
- TIMEOUT(digit)=5;
- TIMEOUT(response)=10;
-restart:
- Background(demo-congrats);
-instructions:
- for (x=0; ${x} < 3; x=${x} + 1) {
- Background(demo-instruct);
- WaitExten();
- };
- };
- 2 => {
- Background(demo-moreinfo);
- goto s|instructions;
- };
- 3 => {
- LANGUAGE()=fr;
- goto s|restart;
- };
- 500 => {
- Playback(demo-abouttotry);
- Dial(IAX2/guest@misery.digium.com);
- Playback(demo-nogo);
- goto s|instructions;
- };
- 600 => {
- Playback(demo-echotest);
- Echo();
- Playback(demo-echodone);
- goto s|instructions;
- };
- # => {
-hangup:
- Playback(demo-thanks);
- Hangup();
- };
- t => goto #|hangup;
- i => Playback(invalid);
-};
-
-
-Syntax Note
-------------------------
-Please note that all opening {'s are on the same line as the keyword. For
-the time being, that syntax is mandatory. We are looking at ways to allow
-other syntax in the future for flexibility, but for now, that is the way
-you must write AEL clauses.
-