]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
(closes issue #13236)
authorSteve Murphy <murf@digium.com>
Fri, 8 Aug 2008 00:15:34 +0000 (00:15 +0000)
committerSteve Murphy <murf@digium.com>
Fri, 8 Aug 2008 00:15:34 +0000 (00:15 +0000)
Reported by: korihor

Wow, this one was a challenge!

I regrouped and ran a new strategy for
setting the ~~MACRO~~ value; I set it once
per extension, up near the top. It is only
set if there is a switch in the extension.

So, I had to put in a chunk of code to detect
a switch in the pval tree.

I moved the code to insert the set of ~~exten~~
up to the beginning of the gen_prios routine,
instead of down in the switch code.

I learned that I have to push the detection
of the switches down into the code, so everywhere
I create a new exten in gen_prios, I make sure
to pass onto it the values of the mother_exten
first, and the exten next.

I had to add a couple fields to the exten
struct to accomplish this, in the ael_structs.h
file. The checked field makes it so we don't
repeat the switch search if it's been done.

I also updated the regressions.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@136726 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/ael_structs.h
pbx/ael/ael-test/ref.ael-ntest10
pbx/ael/ael-test/ref.ael-test18
pbx/ael/ael-test/ref.ael-test8
pbx/ael/ael-test/ref.ael-vtest13
pbx/pbx_ael.c

index 01a4244e1f080c96c98997bc1a1ab0a0cd809c36..6ab3a8cf1cb5268a5491e8f2de97a756ddb9d72e 100644 (file)
@@ -178,7 +178,8 @@ struct ael_extension
        char *hints;
        int regexten;
        int is_switch;
-       int has_switch;
+       int has_switch; /* set if a switch exists in the extension */
+       int checked_switch; /* set if we checked for a switch in the extension -- so we don't have to do it again */
        
        struct ast_context *context;
        
index eaff1ea35d6b6e6bd875a250313fc6d9154dd0e5..a3ffbb801a6ff3386ee38316af6d8fc37597f94a 100644 (file)
@@ -5,20 +5,20 @@
 
 
 (You can use the -w option to dump extensions.conf format to extensions.conf.aeldump)
-LOG: lev:2 file:pbx_ael.c  line:4131 func: pbx_load_module  Starting AEL load process.
-LOG: lev:2 file:pbx_ael.c  line:4138 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4146 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 13-13: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 36-36: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 48-48: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 60-60: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 72-72: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 84-84: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 87-87: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 106-106: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 119-119: A default case was automatically added to the switch.
-LOG: lev:3 file:pbx_ael.c  line:2235 func: check_switch_expr  Warning: file ./extensions.ael, line 122-122: A default case was automatically added to the switch.
-LOG: lev:2 file:pbx_ael.c  line:4149 func: pbx_load_module  AEL load process: checked config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4468 func: pbx_load_module  Starting AEL load process.
+LOG: lev:2 file:pbx_ael.c  line:4475 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4483 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 13-13: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 36-36: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 48-48: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 60-60: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 72-72: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 84-84: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 87-87: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 106-106: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 119-119: A default case was automatically added to the switch.
+LOG: lev:3 file:pbx_ael.c  line:2248 func: check_switch_expr  Warning: file ./extensions.ael, line 122-122: A default case was automatically added to the switch.
+LOG: lev:2 file:pbx_ael.c  line:4486 func: pbx_load_module  AEL load process: checked config file name './extensions.ael'.
 Executed ast_context_create(conts, name=macro-endsess, registrar=pbx_ael);
 Executed ast_context_create(conts, name=macro-nullchk, registrar=pbx_ael);
 Executed ast_context_create(conts, name=macro-endcall, registrar=pbx_ael);
@@ -98,15 +98,14 @@ Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=s, priority=8,
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=s, priority=9, label=(null), callerid=(null), appl=NoOp, data=Finish switch-endcall4-13, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=_sw-13-., priority=10, label=(null), callerid=(null), appl=Goto, data=s|9, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-13-, priority=10, label=(null), callerid=(null), appl=Goto, data=sw-13-.|10, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-13-out, priority=10, label=(null), callerid=(null), appl=Set, data=~~EXTEN~~=${EXTEN}, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-13-out, priority=11, label=(null), callerid=(null), appl=Goto, data=sw-14-${type}|10, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-13-out, priority=12, label=(null), callerid=(null), appl=NoOp, data=Finish switch-sw-endcall4-out-13-14, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-13-out, priority=13, label=(null), callerid=(null), appl=Goto, data=sw-13-.|10, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=_sw-14-., priority=10, label=(null), callerid=(null), appl=Goto, data=sw-13-out|12, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-13-out, priority=10, label=(null), callerid=(null), appl=Goto, data=sw-14-${type}|10, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-13-out, priority=11, label=(null), callerid=(null), appl=NoOp, data=Finish switch-sw-endcall4-out-13-14, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-13-out, priority=12, label=(null), callerid=(null), appl=Goto, data=sw-13-.|10, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=_sw-14-., priority=10, label=(null), callerid=(null), appl=Goto, data=sw-13-out|11, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-14-, priority=10, label=(null), callerid=(null), appl=Goto, data=sw-14-.|10, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-14-in, priority=10, label=(null), callerid=(null), appl=GotoIf, data=$[${testnotnull}]?11:13, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-14-in, priority=11, label=ptr1, callerid=(null), appl=Softhangup, data=${CHANNEL}, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-14-in, priority=12, label=(null), callerid=(null), appl=Goto, data=sw-13-out|12, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-14-in, priority=12, label=(null), callerid=(null), appl=Goto, data=sw-13-out|11, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-14-in, priority=13, label=(null), callerid=(null), appl=NoOp, data=Finish if-sw-sw-endcall4-out-13-in-14-15, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-14-in, priority=14, label=(null), callerid=(null), appl=Noop, data=esac, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall4, rep=0, exten=sw-14-in, priority=15, label=(null), callerid=(null), appl=Goto, data=sw-14-.|10, FREE, registrar=pbx_ael);
@@ -130,15 +129,14 @@ Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=s, priority=8,
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=s, priority=9, label=(null), callerid=(null), appl=NoOp, data=Finish switch-endcall5-20, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=_sw-20-., priority=10, label=(null), callerid=(null), appl=Goto, data=s|9, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-20-, priority=10, label=(null), callerid=(null), appl=Goto, data=sw-20-.|10, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-20-out, priority=10, label=(null), callerid=(null), appl=Set, data=~~EXTEN~~=${EXTEN}, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-20-out, priority=11, label=(null), callerid=(null), appl=Goto, data=sw-21-${type}|10, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-20-out, priority=12, label=(null), callerid=(null), appl=NoOp, data=Finish switch-sw-endcall5-out-20-21, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-20-out, priority=13, label=(null), callerid=(null), appl=Goto, data=sw-20-.|10, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=_sw-21-., priority=10, label=(null), callerid=(null), appl=Goto, data=sw-20-out|12, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-20-out, priority=10, label=(null), callerid=(null), appl=Goto, data=sw-21-${type}|10, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-20-out, priority=11, label=(null), callerid=(null), appl=NoOp, data=Finish switch-sw-endcall5-out-20-21, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-20-out, priority=12, label=(null), callerid=(null), appl=Goto, data=sw-20-.|10, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=_sw-21-., priority=10, label=(null), callerid=(null), appl=Goto, data=sw-20-out|11, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-21-, priority=10, label=(null), callerid=(null), appl=Goto, data=sw-21-.|10, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-21-in, priority=10, label=(null), callerid=(null), appl=GotoIf, data=$[${testnotnull}]?11:13, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-21-in, priority=11, label=ptr1, callerid=(null), appl=Softhangup, data=${CHANNEL}, FREE, registrar=pbx_ael);
-Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-21-in, priority=12, label=(null), callerid=(null), appl=Goto, data=sw-20-out|12, FREE, registrar=pbx_ael);
+Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-21-in, priority=12, label=(null), callerid=(null), appl=Goto, data=sw-20-out|11, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-21-in, priority=13, label=(null), callerid=(null), appl=NoOp, data=Finish if-sw-sw-endcall5-out-20-in-21-22, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-21-in, priority=14, label=(null), callerid=(null), appl=Noop, data=esac, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-21-in, priority=15, label=(null), callerid=(null), appl=Goto, data=sw-21-.|10, FREE, registrar=pbx_ael);
@@ -157,9 +155,9 @@ Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-16-out, prio
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-16-out, priority=13, label=(null), callerid=(null), appl=Goto, data=sw-21-in|ptr1, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-16-out, priority=14, label=(null), callerid=(null), appl=NoOp, data=Finish if-sw-endcall5-out-16-17, FREE, registrar=pbx_ael);
 Executed ast_add_extension2(context=macro-endcall5, rep=0, exten=sw-16-out, priority=15, label=(null), callerid=(null), appl=Goto, data=sw-16-in|10, FREE, registrar=pbx_ael);
-LOG: lev:2 file:pbx_ael.c  line:4151 func: pbx_load_module  AEL load process: compiled config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4488 func: pbx_load_module  AEL load process: compiled config file name './extensions.ael'.
 Executed ast_merge_contexts_and_delete();
-LOG: lev:2 file:pbx_ael.c  line:4154 func: pbx_load_module  AEL load process: merged config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4491 func: pbx_load_module  AEL load process: merged config file name './extensions.ael'.
 Executed ast_walk_contexts();
-LOG: lev:2 file:pbx_ael.c  line:4157 func: pbx_load_module  AEL load process: verified config file name './extensions.ael'.
-LOG: lev:4 file:ael2_parse  line:543 func: main  7 contexts, 37 extensions, 131 priorities
+LOG: lev:2 file:pbx_ael.c  line:4494 func: pbx_load_module  AEL load process: verified config file name './extensions.ael'.
+LOG: lev:4 file:ael2_parse  line:543 func: main  7 contexts, 37 extensions, 129 priorities
index 05047ad90561c935854712ce42e905208a2d0a29..dc5bc31fcfaf77043041b5e6dea2fa99b29b389b 100644 (file)
@@ -2,11 +2,11 @@
 (If you find progress and other non-error messages irritating, you can use -q to suppress them)
 
 (You can use the -w option to dump extensions.conf format to extensions.conf.aeldump)
-LOG: lev:2 file:pbx_ael.c  line:4131 func: pbx_load_module  Starting AEL load process.
-LOG: lev:2 file:pbx_ael.c  line:4138 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4146 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4149 func: pbx_load_module  AEL load process: checked config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4151 func: pbx_load_module  AEL load process: compiled config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4154 func: pbx_load_module  AEL load process: merged config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4157 func: pbx_load_module  AEL load process: verified config file name './extensions.ael'.
-LOG: lev:4 file:ael2_parse  line:543 func: main  1 contexts, 7 extensions, 29 priorities
+LOG: lev:2 file:pbx_ael.c  line:4468 func: pbx_load_module  Starting AEL load process.
+LOG: lev:2 file:pbx_ael.c  line:4475 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4483 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4486 func: pbx_load_module  AEL load process: checked config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4488 func: pbx_load_module  AEL load process: compiled config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4491 func: pbx_load_module  AEL load process: merged config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4494 func: pbx_load_module  AEL load process: verified config file name './extensions.ael'.
+LOG: lev:4 file:ael2_parse  line:543 func: main  1 contexts, 7 extensions, 28 priorities
index b6959205e8059ccf55dec536f1275ee6f8628e42..fba8ed1553b67aae3ae85e19e90bf6b78a4a9bc8 100644 (file)
@@ -2,11 +2,11 @@
 (If you find progress and other non-error messages irritating, you can use -q to suppress them)
 
 (You can use the -w option to dump extensions.conf format to extensions.conf.aeldump)
-LOG: lev:2 file:pbx_ael.c  line:4131 func: pbx_load_module  Starting AEL load process.
-LOG: lev:2 file:pbx_ael.c  line:4138 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4146 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4149 func: pbx_load_module  AEL load process: checked config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4151 func: pbx_load_module  AEL load process: compiled config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4154 func: pbx_load_module  AEL load process: merged config file name './extensions.ael'.
-LOG: lev:2 file:pbx_ael.c  line:4157 func: pbx_load_module  AEL load process: verified config file name './extensions.ael'.
-LOG: lev:4 file:ael2_parse  line:543 func: main  1 contexts, 7 extensions, 19 priorities
+LOG: lev:2 file:pbx_ael.c  line:4468 func: pbx_load_module  Starting AEL load process.
+LOG: lev:2 file:pbx_ael.c  line:4475 func: pbx_load_module  AEL load process: calculated config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4483 func: pbx_load_module  AEL load process: parsed config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4486 func: pbx_load_module  AEL load process: checked config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4488 func: pbx_load_module  AEL load process: compiled config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4491 func: pbx_load_module  AEL load process: merged config file name './extensions.ael'.
+LOG: lev:2 file:pbx_ael.c  line:4494 func: pbx_load_module  AEL load process: verified config file name './extensions.ael'.
+LOG: lev:4 file:ael2_parse  line:543 func: main  1 contexts, 7 extensions, 18 priorities
index 1856c6c691722f6ef7e72739c49a1597927f78dc..e3adb8a43465b412aa03705390ea1c0663b88c33 100644 (file)
@@ -13,8 +13,8 @@ FWDVMBOX=1
 [macro-std-exten]
 exten => s,1,Set(ext=${ARG1})
 exten => s,2,Set(dev=${ARG2})
-exten => s,3,Dial(${dev}/${ext}|20)
-exten => s,4,Set(~~EXTEN~~=${EXTEN})
+exten => s,3,Set(~~EXTEN~~=${EXTEN})
+exten => s,4,Dial(${dev}/${ext}|20)
 exten => s,5,Goto(sw-1-${DIALSTATUS}|10)
 exten => s,6,NoOp(Finish switch-std-exten-1)
 exten => a,1,VoiceMailMain(${ext})
@@ -35,9 +35,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-3-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_1-3)
 exten => _sw-3-.,10,Voicemail(u${ext})
@@ -61,9 +61,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-4-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_2-4)
 exten => _sw-4-.,10,Voicemail(u${ext})
@@ -87,9 +87,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-5-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_3-5)
 exten => _sw-5-.,10,Voicemail(u${ext})
@@ -113,9 +113,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-6-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_4-6)
 exten => _sw-6-.,10,Voicemail(u${ext})
@@ -139,9 +139,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-7-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_5-7)
 exten => _sw-7-.,10,Voicemail(u${ext})
@@ -165,9 +165,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-8-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_6-8)
 exten => _sw-8-.,10,Voicemail(u${ext})
@@ -191,9 +191,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-9-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_7-9)
 exten => _sw-9-.,10,Voicemail(u${ext})
@@ -217,9 +217,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-10-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_8-10)
 exten => _sw-10-.,10,Voicemail(u${ext})
@@ -243,9 +243,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-11-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_9-11)
 exten => _sw-11-.,10,Voicemail(u${ext})
@@ -269,9 +269,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-12-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_10-12)
 exten => _sw-12-.,10,Voicemail(u${ext})
@@ -295,9 +295,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-13-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_11-13)
 exten => _sw-13-.,10,Voicemail(u${ext})
@@ -321,9 +321,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-14-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_12-14)
 exten => _sw-14-.,10,Voicemail(u${ext})
@@ -347,9 +347,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-15-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_13-15)
 exten => _sw-15-.,10,Voicemail(u${ext})
@@ -373,9 +373,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-16-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_14-16)
 exten => _sw-16-.,10,Voicemail(u${ext})
@@ -399,9 +399,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-17-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_15-17)
 exten => _sw-17-.,10,Voicemail(u${ext})
@@ -425,9 +425,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-18-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_16-18)
 exten => _sw-18-.,10,Voicemail(u${ext})
@@ -451,9 +451,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-19-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_17-19)
 exten => _sw-19-.,10,Voicemail(u${ext})
@@ -477,9 +477,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-20-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_18-20)
 exten => _sw-20-.,10,Voicemail(u${ext})
@@ -503,9 +503,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-21-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_19-21)
 exten => _sw-21-.,10,Voicemail(u${ext})
@@ -529,9 +529,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-22-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_20-22)
 exten => _sw-22-.,10,Voicemail(u${ext})
@@ -555,9 +555,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-23-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_21-23)
 exten => _sw-23-.,10,Voicemail(u${ext})
@@ -581,9 +581,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-24-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_22-24)
 exten => _sw-24-.,10,Voicemail(u${ext})
@@ -607,9 +607,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-25-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_23-25)
 exten => _sw-25-.,10,Voicemail(u${ext})
@@ -633,9 +633,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-26-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_24-26)
 exten => _sw-26-.,10,Voicemail(u${ext})
@@ -659,9 +659,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-27-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_25-27)
 exten => _sw-27-.,10,Voicemail(u${ext})
@@ -685,9 +685,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-28-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_26-28)
 exten => _sw-28-.,10,Voicemail(u${ext})
@@ -711,9 +711,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-29-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_27-29)
 exten => _sw-29-.,10,Voicemail(u${ext})
@@ -737,9 +737,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-30-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_28-30)
 exten => _sw-30-.,10,Voicemail(u${ext})
@@ -763,9 +763,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-31-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_29-31)
 exten => _sw-31-.,10,Voicemail(u${ext})
@@ -789,9 +789,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-32-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_30-32)
 exten => _sw-32-.,10,Voicemail(u${ext})
@@ -815,9 +815,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-33-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_31-33)
 exten => _sw-33-.,10,Voicemail(u${ext})
@@ -841,9 +841,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-34-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_32-34)
 exten => _sw-34-.,10,Voicemail(u${ext})
@@ -867,9 +867,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-35-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_33-35)
 exten => _sw-35-.,10,Voicemail(u${ext})
@@ -893,9 +893,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-36-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_34-36)
 exten => _sw-36-.,10,Voicemail(u${ext})
@@ -919,9 +919,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-37-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_35-37)
 exten => _sw-37-.,10,Voicemail(u${ext})
@@ -945,9 +945,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-38-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_36-38)
 exten => _sw-38-.,10,Voicemail(u${ext})
@@ -971,9 +971,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-39-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_37-39)
 exten => _sw-39-.,10,Voicemail(u${ext})
@@ -997,9 +997,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-40-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_38-40)
 exten => _sw-40-.,10,Voicemail(u${ext})
@@ -1023,9 +1023,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-41-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_39-41)
 exten => _sw-41-.,10,Voicemail(u${ext})
@@ -1049,9 +1049,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-42-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_40-42)
 exten => _sw-42-.,10,Voicemail(u${ext})
@@ -1075,9 +1075,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-43-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_41-43)
 exten => _sw-43-.,10,Voicemail(u${ext})
@@ -1101,9 +1101,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-44-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_42-44)
 exten => _sw-44-.,10,Voicemail(u${ext})
@@ -1127,9 +1127,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-45-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_43-45)
 exten => _sw-45-.,10,Voicemail(u${ext})
@@ -1153,9 +1153,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-46-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_44-46)
 exten => _sw-46-.,10,Voicemail(u${ext})
@@ -1179,9 +1179,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-47-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_45-47)
 exten => _sw-47-.,10,Voicemail(u${ext})
@@ -1205,9 +1205,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-48-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_46-48)
 exten => _sw-48-.,10,Voicemail(u${ext})
@@ -1231,9 +1231,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-49-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_47-49)
 exten => _sw-49-.,10,Voicemail(u${ext})
@@ -1257,9 +1257,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-50-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_48-50)
 exten => _sw-50-.,10,Voicemail(u${ext})
@@ -1283,9 +1283,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-51-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_49-51)
 exten => _sw-51-.,10,Voicemail(u${ext})
@@ -1309,9 +1309,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-52-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_50-52)
 exten => _sw-52-.,10,Voicemail(u${ext})
@@ -1335,9 +1335,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-53-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_51-53)
 exten => _sw-53-.,10,Voicemail(u${ext})
@@ -1361,9 +1361,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-54-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_52-54)
 exten => _sw-54-.,10,Voicemail(u${ext})
@@ -1387,9 +1387,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-55-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_53-55)
 exten => _sw-55-.,10,Voicemail(u${ext})
@@ -1413,9 +1413,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-56-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_54-56)
 exten => _sw-56-.,10,Voicemail(u${ext})
@@ -1439,9 +1439,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-57-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_55-57)
 exten => _sw-57-.,10,Voicemail(u${ext})
@@ -1465,9 +1465,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-58-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_56-58)
 exten => _sw-58-.,10,Voicemail(u${ext})
@@ -1491,9 +1491,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-59-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_57-59)
 exten => _sw-59-.,10,Voicemail(u${ext})
@@ -1517,9 +1517,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-60-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_58-60)
 exten => _sw-60-.,10,Voicemail(u${ext})
@@ -1543,9 +1543,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-61-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_59-61)
 exten => _sw-61-.,10,Voicemail(u${ext})
@@ -1569,9 +1569,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-62-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_60-62)
 exten => _sw-62-.,10,Voicemail(u${ext})
@@ -1595,9 +1595,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-63-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_61-63)
 exten => _sw-63-.,10,Voicemail(u${ext})
@@ -1621,9 +1621,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-64-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_62-64)
 exten => _sw-64-.,10,Voicemail(u${ext})
@@ -1647,9 +1647,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-65-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_63-65)
 exten => _sw-65-.,10,Voicemail(u${ext})
@@ -1673,9 +1673,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-66-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_64-66)
 exten => _sw-66-.,10,Voicemail(u${ext})
@@ -1699,9 +1699,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-67-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_65-67)
 exten => _sw-67-.,10,Voicemail(u${ext})
@@ -1725,9 +1725,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-68-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_66-68)
 exten => _sw-68-.,10,Voicemail(u${ext})
@@ -1751,9 +1751,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-69-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_67-69)
 exten => _sw-69-.,10,Voicemail(u${ext})
@@ -1777,9 +1777,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-70-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_68-70)
 exten => _sw-70-.,10,Voicemail(u${ext})
@@ -1803,9 +1803,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-71-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_69-71)
 exten => _sw-71-.,10,Voicemail(u${ext})
@@ -1829,9 +1829,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-72-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_70-72)
 exten => _sw-72-.,10,Voicemail(u${ext})
@@ -1855,9 +1855,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-73-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_71-73)
 exten => _sw-73-.,10,Voicemail(u${ext})
@@ -1881,9 +1881,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-74-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_72-74)
 exten => _sw-74-.,10,Voicemail(u${ext})
@@ -1907,9 +1907,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-75-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten_73-75)
 exten => _sw-75-.,10,Voicemail(u${ext})
@@ -1933,9 +1933,9 @@ exten => s,3,Set(timeout=${ARG3})
 exten => s,4,Set(opts=${ARG4})
 exten => s,5,Set(torcont=${ARG5})
 exten => s,6,Set(dontcont=${ARG6})
-exten => s,7,Dial(${dev}|${timeout}|${opts})
-exten => s,8,NoOp(${DIALSTATUS} was chosen)
-exten => s,9,Set(~~EXTEN~~=${EXTEN})
+exten => s,7,Set(~~EXTEN~~=${EXTEN})
+exten => s,8,Dial(${dev}|${timeout}|${opts})
+exten => s,9,NoOp(${DIALSTATUS} was chosen)
 exten => s,10,Goto(sw-76-${DIALSTATUS}|10)
 exten => s,11,NoOp(Finish switch-std-priv-exten-76)
 exten => _sw-76-.,10,Voicemail(u${ext})
@@ -1962,7 +1962,7 @@ exten => s,6,GotoIf($[("${cidn}" = "Privacy Manager" & "${CALLERID(name)}" != "P
 exten => s,7,Set(DB(cidname/${CALLERID(number)})=${CALLERID(name)})
 exten => s,8,NoOp(Finish if-if-fillcidname-78-79)
 exten => s,9,NoOp(Finish if-fillcidname-78)
-exten => s,10,GotoIf($[( "${cidn}" != "" ) & ( "${CALLERID(name)}" = ""                                                    | "${CALLERID(name)}" = "CODY\,WY        "                                                       | "${CALLERID(name)}" = "POWELL\,WY      "                                                       | "${CALLERID(name)}" = "WIRELESS CALLER"                                                     | "${CALLERID(name)}" = "SUBSCRIBER\,WIRE"                                                     | "${CALLERID(name)}" = "CELLULAR ONE"                                                     | "${CALLERID(name)}" = "Cellular One Customer"                                                       | "${CALLERID(name)}" = "CELLULAR ONE   "                                                       | "${CALLERID(name)}" = "Privacy Manager"                                                    | "${CALLERID(name)}" = "RIVERTON\,WY    "                                                     | "${CALLERID(name)}" = "BASIN\,WY       "                                                     | "${CALLERID(name)}" = "BILLINGS\,MT    "                                                   | "${CALLERID(name)}" = "PROVO\,UT       "                                                     | "${CALLERID(name)}" = "TOLL FREE      " ) ]?11:12)
+exten => s,10,GotoIf($[( "${cidn}" != "" ) & ( "${CALLERID(name)}" = ""                                                    | "${CALLERID(name)}" = "CODY|WY        "                                                       | "${CALLERID(name)}" = "POWELL|WY      "                                                       | "${CALLERID(name)}" = "WIRELESS CALLER"                                                     | "${CALLERID(name)}" = "SUBSCRIBER|WIRE"                                                     | "${CALLERID(name)}" = "CELLULAR ONE"                                                     | "${CALLERID(name)}" = "Cellular One Customer"                                                       | "${CALLERID(name)}" = "CELLULAR ONE   "                                                       | "${CALLERID(name)}" = "Privacy Manager"                                                    | "${CALLERID(name)}" = "RIVERTON|WY    "                                                     | "${CALLERID(name)}" = "BASIN|WY       "                                                     | "${CALLERID(name)}" = "BILLINGS|MT    "                                                   | "${CALLERID(name)}" = "PROVO|UT       "                                                     | "${CALLERID(name)}" = "TOLL FREE      " ) ]?11:12)
 exten => s,11,Set(CALLERID(name)=${cidn})
 exten => s,12,NoOp(Finish if-fillcidname-80)
 exten => s,13,NoOp(End of Macro fillcidname-s)
@@ -2056,40 +2056,40 @@ exten => s,12,NoOp(Finish if-privacyManagerFailed-86)
 
 
 [homeline]
-exten => s,1(begin),Answer()
-exten => s,2,Set(repeatcount=0)
-exten => s,3,Zapateller(nocallerid)
-exten => s,4,PrivacyManager()
-exten => s,5,GotoIf($["${PRIVACYMGRSTATUS}" = "FAILED" ]?6:10)
-exten => s,6,TrySystem(/usr/bin/play /var/lib/asterisk/sounds/privmanfailed.gsm)
-exten => s,7,Macro(std-priv-exten|Zap/3r1&Zap/5r1|2|25|mtw|telemarket|telemarket)
-exten => s,8,Hangup()
-exten => s,9,Goto(105)
-exten => s,10,NoOp(Finish if-homeline-87)
-exten => s,11(postPriv),Macro(fillcidname)
-exten => s,12,Set(CONFCIDNA=${CALLERID(name)})
-exten => s,13,Set(CONFCIDNU=${CALLERID(num)})
-exten => s,14,AGI(callall)
-exten => s,15,AGI(submit-announce.agi)
-exten => s,16,GotoIf($["${CALLERID(num)}" : "1" ]?17:18)
-exten => s,17,Macro(callerid-bad)
-exten => s,18,NoOp(Finish if-homeline-88)
-exten => s,19,GotoIf($["${CALLERID(num)}"  = "7077577685" & "${CALLERID(name)}" : "Privacy Manager" ]?20:21)
-exten => s,20,Macro(callerid-liar)
-exten => s,21,NoOp(Finish if-homeline-89)
-exten => s,22,TrySystem(/usr/local/bin/who-is-it ${CALLERID(num)} "${CALLERID(name)}"&)
-exten => s,23,Set(lds=${DB(playlds/${CALLERID(num)})})
-exten => s,24,GotoIf($["${lds}" = "1" ]?25:26)
-exten => s,25,SetMusicOnHold(mohlds)
-exten => s,26,NoOp(Finish if-homeline-90)
-exten => s,27,Set(direct=$[${DB(DirectCall/${CALLERID(num)})}])
-exten => s,28,GotoIf($["${direct}" != "" & ${direct} != 0 ]?29:37)
-exten => s,29,verbose(direct is XXX#${direct}XXXX)
-exten => s,30,Playback(greetings/direct)
-exten => s,31,Playback(/var/spool/asterisk/voicemail/default/${direct}/greet)
-exten => s,32,TrySystem(/usr/bin/play /var/lib/asterisk/sounds/call-for.gsm)
-exten => s,33,TrySystem(/usr/bin/play /var/spool/asterisk/voicemail/default/${direct}/greet.wav&)
-exten => s,34,Set(~~EXTEN~~=${EXTEN})
+exten => s,1,Set(~~EXTEN~~=${EXTEN})
+exten => s,2(begin),Answer()
+exten => s,3,Set(repeatcount=0)
+exten => s,4,Zapateller(nocallerid)
+exten => s,5,PrivacyManager()
+exten => s,6,GotoIf($["${PRIVACYMGRSTATUS}" = "FAILED" ]?7:11)
+exten => s,7,TrySystem(/usr/bin/play /var/lib/asterisk/sounds/privmanfailed.gsm)
+exten => s,8,Macro(std-priv-exten|Zap/3r1&Zap/5r1|2|25|mtw|telemarket|telemarket)
+exten => s,9,Hangup()
+exten => s,10,Goto(105)
+exten => s,11,NoOp(Finish if-homeline-87)
+exten => s,12(postPriv),Macro(fillcidname)
+exten => s,13,Set(CONFCIDNA=${CALLERID(name)})
+exten => s,14,Set(CONFCIDNU=${CALLERID(num)})
+exten => s,15,AGI(callall)
+exten => s,16,AGI(submit-announce.agi)
+exten => s,17,GotoIf($["${CALLERID(num)}" : "1" ]?18:19)
+exten => s,18,Macro(callerid-bad)
+exten => s,19,NoOp(Finish if-homeline-88)
+exten => s,20,GotoIf($["${CALLERID(num)}"  = "7077577685" & "${CALLERID(name)}" : "Privacy Manager" ]?21:22)
+exten => s,21,Macro(callerid-liar)
+exten => s,22,NoOp(Finish if-homeline-89)
+exten => s,23,TrySystem(/usr/local/bin/who-is-it ${CALLERID(num)} "${CALLERID(name)}"&)
+exten => s,24,Set(lds=${DB(playlds/${CALLERID(num)})})
+exten => s,25,GotoIf($["${lds}" = "1" ]?26:27)
+exten => s,26,SetMusicOnHold(mohlds)
+exten => s,27,NoOp(Finish if-homeline-90)
+exten => s,28,Set(direct=$[${DB(DirectCall/${CALLERID(num)})}])
+exten => s,29,GotoIf($["${direct}" != "" & ${direct} != 0 ]?30:37)
+exten => s,30,verbose(direct is XXX#${direct}XXXX)
+exten => s,31,Playback(greetings/direct)
+exten => s,32,Playback(/var/spool/asterisk/voicemail/default/${direct}/greet)
+exten => s,33,TrySystem(/usr/bin/play /var/lib/asterisk/sounds/call-for.gsm)
+exten => s,34,TrySystem(/usr/bin/play /var/spool/asterisk/voicemail/default/${direct}/greet.wav&)
 exten => s,35,Goto(sw-92-${direct}|10)
 exten => s,36,NoOp(Finish switch-if-homeline-91-92)
 exten => s,37,NoOp(Finish if-homeline-91)
index bd6775c08d945b4feac8fe75a5a7756567aff650..71282d71b1ca08ce07fd75fa12433667b114b59e 100644 (file)
@@ -2933,6 +2933,259 @@ static void gen_match_to_pattern(char *pattern, char *result)
        *t++ = 0; /* cap it off */
 }
 
+/* ==== a set of routines to search for a switch statement contained in the pval description */
+
+int find_switch_item(pval *item);
+int contains_switch(pval *item);
+
+
+int find_switch_item(pval *item)
+{
+       switch ( item->type ) {
+       case PV_WORD:
+               /* fields: item->u1.str == string associated with this (word). */
+               break;
+               
+       case PV_MACRO:
+               /* fields: item->u1.str     == name of macro
+                          item->u2.arglist == pval list of PV_WORD arguments of macro, as given by user
+                                  item->u2.arglist->u1.str  == argument
+                                  item->u2.arglist->next   == next arg
+
+                                  item->u3.macro_statements == pval list of statements in macro body.
+               */
+               /* had better not see this */
+               if (contains_switch(item->u3.macro_statements))
+                       return 1;
+               break;
+                       
+       case PV_CONTEXT:
+               /* fields: item->u1.str     == name of context
+                          item->u2.statements == pval list of statements in context body
+                                  item->u3.abstract == int 1 if an abstract keyword were present
+               */
+               /* had better not see this */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               break;
+                       
+       case PV_MACRO_CALL:
+               /* fields: item->u1.str     == name of macro to call
+                          item->u2.arglist == pval list of PV_WORD arguments of macro call, as given by user
+                                  item->u2.arglist->u1.str  == argument
+                                  item->u2.arglist->next   == next arg
+               */
+               break;
+                       
+       case PV_APPLICATION_CALL:
+               /* fields: item->u1.str     == name of application to call
+                          item->u2.arglist == pval list of PV_WORD arguments of macro call, as given by user
+                                  item->u2.arglist->u1.str  == argument
+                                  item->u2.arglist->next   == next arg
+               */
+               break;
+                       
+       case PV_CASE:
+               /* fields: item->u1.str     == value of case
+                          item->u2.statements == pval list of statements under the case
+               */
+               /* had better not see this */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               break;
+                       
+       case PV_PATTERN:
+               /* fields: item->u1.str     == value of case
+                          item->u2.statements == pval list of statements under the case
+               */
+               /* had better not see this */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               break;
+                       
+       case PV_DEFAULT:
+               /* fields: 
+                          item->u2.statements == pval list of statements under the case
+               */
+               /* had better not see this */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               break;
+                       
+       case PV_CATCH:
+               /* fields: item->u1.str     == name of extension to catch
+                          item->u2.statements == pval list of statements in context body
+               */
+               /* had better not see this */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               break;
+                       
+       case PV_SWITCHES:
+               /* fields: item->u1.list     == pval list of PV_WORD elements, one per entry in the list
+               */
+               break;
+                       
+       case PV_ESWITCHES:
+               /* fields: item->u1.list     == pval list of PV_WORD elements, one per entry in the list
+               */
+               break;
+                       
+       case PV_INCLUDES:
+               /* fields: item->u1.list     == pval list of PV_WORD elements, one per entry in the list
+                          item->u2.arglist  == pval list of 4 PV_WORD elements for time values
+               */
+               break;
+                       
+       case PV_STATEMENTBLOCK:
+               /* fields: item->u1.list     == pval list of statements in block, one per entry in the list
+               */
+               if (contains_switch(item->u1.list) )
+                       return 1;
+               break;
+                       
+       case PV_VARDEC:
+               /* fields: item->u1.str     == variable name
+                          item->u2.val     == variable value to assign
+               */
+               break;
+                       
+       case PV_GOTO:
+               /* fields: item->u1.list     == pval list of PV_WORD target names, up to 3, in order as given by user.
+                          item->u1.list->u1.str  == where the data on a PV_WORD will always be.
+               */
+               break;
+                       
+       case PV_LABEL:
+               /* fields: item->u1.str     == label name
+               */
+               break;
+                       
+       case PV_FOR:
+               /* fields: item->u1.for_init     == a string containing the initalizer
+                          item->u2.for_test     == a string containing the loop test
+                          item->u3.for_inc      == a string containing the loop increment
+
+                                  item->u4.for_statements == a pval list of statements in the for ()
+               */
+               if (contains_switch(item->u4.for_statements))
+                       return 1;
+               break;
+                       
+       case PV_WHILE:
+               /* fields: item->u1.str        == the while conditional, as supplied by user
+
+                                  item->u2.statements == a pval list of statements in the while ()
+               */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               break;
+                       
+       case PV_BREAK:
+               /* fields: none
+               */
+               break;
+                       
+       case PV_RETURN:
+               /* fields: none
+               */
+               break;
+                       
+       case PV_CONTINUE:
+               /* fields: none
+               */
+               break;
+                       
+       case PV_IFTIME:
+               /* fields: item->u1.list        == there are 4 linked PV_WORDs here.
+
+                                  item->u2.statements == a pval list of statements in the if ()
+                                  item->u3.else_statements == a pval list of statements in the else
+                                                                                          (could be zero)
+               */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               if ( item->u3.else_statements ) {
+                       if (contains_switch(item->u3.else_statements))
+                               return 1;
+               }
+               break;
+                       
+       case PV_RANDOM:
+               /* fields: item->u1.str        == the random number expression, as supplied by user
+
+                                  item->u2.statements == a pval list of statements in the if ()
+                                  item->u3.else_statements == a pval list of statements in the else
+                                                                                          (could be zero)
+               */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               if ( item->u3.else_statements ) {
+                       if (contains_switch(item->u3.else_statements))
+                               return 1;
+               }
+               break;
+                       
+       case PV_IF:
+               /* fields: item->u1.str        == the if conditional, as supplied by user
+
+                                  item->u2.statements == a pval list of statements in the if ()
+                                  item->u3.else_statements == a pval list of statements in the else
+                                                                                          (could be zero)
+               */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               if ( item->u3.else_statements ) {
+                       if (contains_switch(item->u3.else_statements))
+                               return 1;
+               }
+               break;
+                       
+       case PV_SWITCH:
+               /* fields: item->u1.str        == the switch expression
+
+                                  item->u2.statements == a pval list of statements in the switch, 
+                                                                                       (will be case statements, most likely!)
+               */
+               return 1; /* JACKPOT */
+               break;
+                       
+       case PV_EXTENSION:
+               /* fields: item->u1.str        == the extension name, label, whatever it's called
+
+                                  item->u2.statements == a pval list of statements in the extension
+                                  item->u3.hints      == a char * hint argument
+                                  item->u4.regexten   == an int boolean. non-zero says that regexten was specified
+               */
+               if (contains_switch(item->u2.statements))
+                       return 1;
+               break;
+                       
+       case PV_IGNOREPAT:
+               /* fields: item->u1.str        == the ignorepat data
+               */
+               break;
+                       
+       case PV_GLOBALS:
+               /* fields: item->u1.statements     == pval list of statements, usually vardecs
+               */
+               break;
+       }
+       return 0;
+}
+
+int contains_switch(pval *item)
+{
+       pval *i;
+       
+       for (i=item; i; i=i->next) {
+               if (find_switch_item(i))
+                       return 1;
+       }
+       return 0;
+}
+
+
 static void gen_prios(struct ael_extension *exten, char *label, pval *statement, struct ael_extension *mother_exten, struct ast_context *this_context )
 {
        pval *p,*p2,*p3;
@@ -2954,6 +3207,46 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
        struct ael_priority *loop_continue_save;
        struct ael_extension *switch_case,*switch_null;
        
+       if ((mother_exten && !mother_exten->checked_switch) || (exten && !exten->checked_switch)) {
+               if (contains_switch(statement)) { /* only run contains_switch if you haven't checked before */
+                       if (mother_exten) {
+                               if (!mother_exten->has_switch) {
+                                       switch_set = new_prio();
+                                       switch_set->type = AEL_APPCALL;
+                                       switch_set->app = strdup("Set");
+                                       switch_set->appargs = strdup("~~EXTEN~~=${EXTEN}");
+                                       linkprio(exten, switch_set, mother_exten);
+                                       mother_exten->has_switch = 1;
+                                       mother_exten->checked_switch = 1;
+                                       if (exten) {
+                                               exten->has_switch = 1;
+                                               exten->checked_switch = 1;
+                                       }
+                               }
+                       } else if (exten) {
+                               if (!exten->has_switch) {
+                                       switch_set = new_prio();
+                                       switch_set->type = AEL_APPCALL;
+                                       switch_set->app = strdup("Set");
+                                       switch_set->appargs = strdup("~~EXTEN~~=${EXTEN}");
+                                       linkprio(exten, switch_set, mother_exten);
+                                       exten->has_switch = 1;
+                                       exten->checked_switch = 1;
+                                       if (mother_exten) {
+                                               mother_exten->has_switch = 1;
+                                               mother_exten->checked_switch = 1;
+                                       }
+                               }
+                       }
+               } else {
+                       if (mother_exten) {
+                               mother_exten->checked_switch = 1;
+                       }
+                       if (exten) {
+                               exten->checked_switch = 1;
+                       }
+               }
+       }
        for (p=statement; p; p=p->next) {
                switch (p->type) {
                case PV_VARDEC:
@@ -2966,7 +3259,7 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
                        pr->origin = p;
                        linkprio(exten, pr, mother_exten);
                        break;
-
+                       
                case PV_GOTO:
                        pr = new_prio();
                        pr->type = AEL_APPCALL;
@@ -3195,21 +3488,6 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
                        loop_break_save = exten->loop_break; /* save them, then restore before leaving */
                        loop_continue_save = exten->loop_continue;
                        snprintf(new_label,sizeof(new_label),"sw-%s-%d", label, control_statement_count);
-                       if ((mother_exten && !mother_exten->has_switch)) {
-                               switch_set = new_prio();
-                               switch_set->type = AEL_APPCALL;
-                               switch_set->app = strdup("Set");
-                               switch_set->appargs = strdup("~~EXTEN~~=${EXTEN}");
-                               linkprio(exten, switch_set, mother_exten);
-                               mother_exten->has_switch = 1;
-                       } else if ((exten && !exten->has_switch)) {
-                               switch_set = new_prio();
-                               switch_set->type = AEL_APPCALL;
-                               switch_set->app = strdup("Set");
-                               switch_set->appargs = strdup("~~EXTEN~~=${EXTEN}");
-                               linkprio(exten, switch_set, exten);
-                               exten->has_switch = 1;
-                       }
                        switch_test = new_prio();
                        switch_end = new_prio();
                        switch_test->type = AEL_APPCALL;
@@ -3238,6 +3516,14 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
                                if (p2->type == PV_CASE) {
                                        /* ok, generate a extension and link it in */
                                        switch_case = new_exten();
+                                       if (mother_exten && mother_exten->checked_switch) {
+                                               switch_case->has_switch = mother_exten->has_switch;
+                                               switch_case->checked_switch = mother_exten->checked_switch;
+                                       }
+                                       if (exten && exten->checked_switch) {
+                                               switch_case->has_switch = exten->has_switch;
+                                               switch_case->checked_switch = exten->checked_switch;
+                                       }
                                        switch_case->context = this_context;
                                        switch_case->is_switch = 1;
                                        /* the break/continue locations are inherited from parent */
@@ -3309,6 +3595,14 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
                                } else if (p2->type == PV_PATTERN) {
                                        /* ok, generate a extension and link it in */
                                        switch_case = new_exten();
+                                       if (mother_exten && mother_exten->checked_switch) {
+                                               switch_case->has_switch = mother_exten->has_switch;
+                                               switch_case->checked_switch = mother_exten->checked_switch;
+                                       }
+                                       if (exten && exten->checked_switch) {
+                                               switch_case->has_switch = exten->has_switch;
+                                               switch_case->checked_switch = exten->checked_switch;
+                                       }
                                        switch_case->context = this_context;
                                        switch_case->is_switch = 1;
                                        /* the break/continue locations are inherited from parent */
@@ -3379,6 +3673,14 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
                                } else if (p2->type == PV_DEFAULT) {
                                        /* ok, generate a extension and link it in */
                                        switch_case = new_exten();
+                                       if (mother_exten && mother_exten->checked_switch) {
+                                               switch_case->has_switch = mother_exten->has_switch;
+                                               switch_case->checked_switch = mother_exten->checked_switch;
+                                       }
+                                       if (exten && exten->checked_switch) {
+                                               switch_case->has_switch = exten->has_switch;
+                                               switch_case->checked_switch = exten->checked_switch;
+                                       }
                                        switch_case->context = this_context;
                                        switch_case->is_switch = 1;
                                        
@@ -3388,6 +3690,14 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
 
                                        default_exists++;
                                        switch_null = new_exten();
+                                       if (mother_exten && mother_exten->checked_switch) {
+                                               switch_null->has_switch = mother_exten->has_switch;
+                                               switch_null->checked_switch = mother_exten->checked_switch;
+                                       }
+                                       if (exten && exten->checked_switch) {
+                                               switch_null->has_switch = exten->has_switch;
+                                               switch_null->checked_switch = exten->checked_switch;
+                                       }
                                        switch_null->context = this_context;
                                        switch_null->is_switch = 1;
                                        switch_empty = new_prio();
@@ -3691,6 +4001,15 @@ static void gen_prios(struct ael_extension *exten, char *label, pval *statement,
                        /* generate an extension with name of catch, put all catch stats
                           into this exten! */
                        switch_case = new_exten();
+                       if (mother_exten && mother_exten->checked_switch) {
+                               switch_case->has_switch = mother_exten->has_switch;
+                               switch_case->checked_switch = mother_exten->checked_switch;
+                       }
+                       if (exten && exten->checked_switch) {
+                               switch_case->has_switch = exten->has_switch;
+                               switch_case->checked_switch = exten->checked_switch;
+                       }
+                       
                        switch_case->context = this_context;
                        linkexten(exten,switch_case);
                        switch_case->name = strdup(p->u1.str);