[asterisk-commits] eliel: branch group/appdocsxml r152803 - in /team/group/appdocsxml: ./ apps/ ...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Oct 30 05:23:26 CDT 2008
Author: eliel
Date: Thu Oct 30 05:23:26 2008
New Revision: 152803
URL: http://svn.digium.com/view/asterisk?view=rev&rev=152803
Log:
Resolve conflicts, and setup automerge *again*.
Modified:
team/group/appdocsxml/ (props changed)
team/group/appdocsxml/CHANGES
team/group/appdocsxml/apps/app_directory.c
team/group/appdocsxml/configs/extensions.conf.sample
Propchange: team/group/appdocsxml/
------------------------------------------------------------------------------
automerge = *
Propchange: team/group/appdocsxml/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Thu Oct 30 05:23:26 2008
@@ -1,1 +1,1 @@
-/trunk:1-152696
+/trunk:1-152802
Modified: team/group/appdocsxml/CHANGES
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/CHANGES?view=diff&rev=152803&r1=152802&r2=152803
==============================================================================
--- team/group/appdocsxml/CHANGES (original)
+++ team/group/appdocsxml/CHANGES Thu Oct 30 05:23:26 2008
@@ -33,6 +33,9 @@
using MeetMeAdmin.
* app_authenticate now gives the ability to select a prompt other than
the default.
+ * app_directory now pays attention to the searchcontexts setting in
+ voicemail.conf and will look through all contexts, if no context is
+ specified in the initial argument.
Miscellaneous
-------------
Modified: team/group/appdocsxml/apps/app_directory.c
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/apps/app_directory.c?view=diff&rev=152803&r1=152802&r2=152803
==============================================================================
--- team/group/appdocsxml/apps/app_directory.c (original)
+++ team/group/appdocsxml/apps/app_directory.c Thu Oct 30 05:23:26 2008
@@ -48,8 +48,10 @@
Provide directory of voicemail extensions.
</synopsis>
<syntax>
- <parameter name="vm-context" required="true">
- <para>This is the context within voicemail.conf to use for the Directory.</para>
+ <parameter name="vm-context">
+ <para>This is the context within voicemail.conf to use for the Directory. If not specified and
+ <literal>searchcontexts=no</literal> in <filename>voicemail.conf</filename>, then <literal>default</literal>
+ will be assumed.</para>
</parameter>
<parameter name="dial-context" required="false">
<para>This is the dialplan context to use when looking for an
@@ -102,7 +104,7 @@
<description>
<para>This application will present the calling channel with a directory of extensions from which they can search
by name. The list of names and corresponding extensions is retrieved from the
- voicemail configuration file, voicemail.conf.</para>
+ voicemail configuration file, <filename>voicemail.conf</filename>.</para>
<para>This application will immediately exit if one of the following DTMF digits are
received and the extension to jump to exists:</para>
<para><literal>0</literal> - Jump to the 'o' extension, if it exists.</para>
@@ -140,6 +142,7 @@
struct directory_item {
char exten[AST_MAX_EXTENSION + 1];
char name[AST_MAX_EXTENSION + 1];
+ char context[AST_MAX_CONTEXT + 1];
char key[50]; /* Text to order items. Either lastname+firstname or firstname+lastname */
AST_LIST_ENTRY(directory_item) entry;
@@ -262,25 +265,25 @@
return res;
}
-static int select_entry(struct ast_channel *chan, const char *context, const char *dialcontext, const struct directory_item *item, struct ast_flags *flags)
-{
- ast_debug(1, "Selecting '%s' - %s@%s\n", item->name, item->exten, dialcontext);
+static int select_entry(struct ast_channel *chan, const char *dialcontext, const struct directory_item *item, struct ast_flags *flags)
+{
+ ast_debug(1, "Selecting '%s' - %s@%s\n", item->name, item->exten, S_OR(dialcontext, item->context));
if (ast_test_flag(flags, OPT_FROMVOICEMAIL)) {
/* We still want to set the exten though */
ast_copy_string(chan->exten, item->exten, sizeof(chan->exten));
- } else if (ast_goto_if_exists(chan, dialcontext, item->exten, 1)) {
+ } else if (ast_goto_if_exists(chan, S_OR(dialcontext, item->context), item->exten, 1)) {
ast_log(LOG_WARNING,
"Can't find extension '%s' in context '%s'. "
"Did you pass the wrong context to Directory?\n",
- item->exten, dialcontext);
+ item->exten, S_OR(dialcontext, item->context));
return -1;
}
return 0;
}
-static int select_item_seq(struct ast_channel *chan, struct directory_item **items, int count, const char *context, const char *dialcontext, struct ast_flags *flags)
+static int select_item_seq(struct ast_channel *chan, struct directory_item **items, int count, const char *dialcontext, struct ast_flags *flags)
{
struct directory_item *item, **ptr;
int i, res, loop;
@@ -289,7 +292,7 @@
item = *ptr;
for (loop = 3 ; loop > 0; loop--) {
- res = play_mailbox_owner(chan, context, item->exten, item->name, flags);
+ res = play_mailbox_owner(chan, item->context, item->exten, item->name, flags);
if (!res)
res = ast_stream_and_wait(chan, "dir-instr", AST_DIGIT_ANY);
@@ -298,7 +301,7 @@
ast_stopstream(chan);
if (res == '1') { /* Name selected */
- return select_entry(chan, context, dialcontext, item, flags) ? -1 : 1;
+ return select_entry(chan, dialcontext, item, flags) ? -1 : 1;
} else if (res == '*') {
/* Skip to next match in list */
break;
@@ -315,7 +318,7 @@
return 0;
}
-static int select_item_menu(struct ast_channel *chan, struct directory_item **items, int count, const char *context, const char *dialcontext, struct ast_flags *flags)
+static int select_item_menu(struct ast_channel *chan, struct directory_item **items, int count, const char *dialcontext, struct ast_flags *flags)
{
struct directory_item **block, *item;
int i, limit, res = 0;
@@ -343,7 +346,7 @@
if (!res)
res = ast_waitstream(chan, AST_DIGIT_ANY);
if (!res)
- res = play_mailbox_owner(chan, context, item->exten, item->name, flags);
+ res = play_mailbox_owner(chan, item->context, item->exten, item->name, flags);
if (!res)
res = ast_waitstream(chan, AST_DIGIT_ANY);
if (!res)
@@ -362,7 +365,7 @@
}
if (res && res > '0' && res < '1' + limit) {
- return select_entry(chan, context, dialcontext, block[res - '1'], flags) ? -1 : 1;
+ return select_entry(chan, dialcontext, block[res - '1'], flags) ? -1 : 1;
}
if (res < 0)
@@ -383,7 +386,7 @@
struct ast_variable *var;
char *mailbox;
const char *fullname;
- const char *hidefromdir;
+ const char *hidefromdir, *searchcontexts = NULL;
char tmp[100];
struct ast_flags config_flags = { 0 };
@@ -401,49 +404,64 @@
/* Get realtime entries, categorized by their mailbox number
and present in the requested context */
- rtdata = ast_load_realtime_multientry("voicemail", "mailbox LIKE", "%", "context", context, SENTINEL);
+ if (ast_strlen_zero(context) && (searchcontexts = ast_variable_retrieve(cfg, "general", "searchcontexts"))) {
+ if (ast_true(searchcontexts)) {
+ rtdata = ast_load_realtime_multientry("voicemail", "mailbox LIKE", "%", SENTINEL);
+ context = NULL;
+ } else {
+ rtdata = ast_load_realtime_multientry("voicemail", "mailbox LIKE", "%", "context", "default", SENTINEL);
+ context = "default";
+ }
+ } else {
+ rtdata = ast_load_realtime_multientry("voicemail", "mailbox LIKE", "%", "context", context, SENTINEL);
+ }
/* if there are no results, just return the entries from the config file */
- if (!rtdata)
+ if (!rtdata) {
return cfg;
-
- /* Does the context exist within the config file? If not, make one */
- cat = ast_category_get(cfg, context);
- if (!cat) {
- cat = ast_category_new(context, "", 99999);
- if (!cat) {
- ast_log(LOG_WARNING, "Out of memory\n");
- ast_config_destroy(cfg);
- return NULL;
- }
- ast_category_append(cfg, cat);
}
mailbox = NULL;
while ( (mailbox = ast_category_browse(rtdata, mailbox)) ) {
+ const char *context = ast_variable_retrieve(rtdata, mailbox, "context");
+
fullname = ast_variable_retrieve(rtdata, mailbox, "fullname");
if (ast_true((hidefromdir = ast_variable_retrieve(rtdata, mailbox, "hidefromdir")))) {
/* Skip hidden */
continue;
}
snprintf(tmp, sizeof(tmp), "no-password,%s", S_OR(fullname, ""));
- var = ast_variable_new(mailbox, tmp, "");
- if (var)
+
+ /* Does the context exist within the config file? If not, make one */
+ if (!(cat = ast_category_get(cfg, context))) {
+ if (!(cat = ast_category_new(context, "", 99999))) {
+ ast_log(LOG_WARNING, "Out of memory\n");
+ ast_config_destroy(cfg);
+ return NULL;
+ }
+ ast_category_append(cfg, cat);
+ }
+
+ if ((var = ast_variable_new(mailbox, tmp, ""))) {
ast_variable_append(cat, var);
- else
+ } else {
ast_log(LOG_WARNING, "Out of memory adding mailbox '%s'\n", mailbox);
+ }
}
ast_config_destroy(rtdata);
return cfg;
}
-static int check_match(struct directory_item **result, const char *item_fullname, const char *item_ext, const char *pattern_ext, int use_first_name)
+static int check_match(struct directory_item **result, const char *item_context, const char *item_fullname, const char *item_ext, const char *pattern_ext, int use_first_name)
{
struct directory_item *item;
const char *key = NULL;
int namelen;
+ if (ast_strlen_zero(item_fullname)) {
+ return 0;
+ }
/* Set key to last name or first name depending on search mode */
if (!use_first_name)
@@ -457,10 +475,13 @@
if (compare(key, pattern_ext))
return 0;
+ ast_debug(1, "Found match %s@%s\n", item_ext, item_context);
+
/* Match */
item = ast_calloc(1, sizeof(*item));
if (!item)
return -1;
+ ast_copy_string(item->context, item_context, sizeof(item->context));
ast_copy_string(item->name, item_fullname, sizeof(item->name));
ast_copy_string(item->exten, item_ext, sizeof(item->exten));
@@ -479,7 +500,7 @@
typedef AST_LIST_HEAD_NOLOCK(, directory_item) itemlist;
-static int search_directory(const char *context, struct ast_config *vmcfg, struct ast_config *ucfg, const char *ext, struct ast_flags flags, itemlist *alist)
+static int search_directory_sub(const char *context, struct ast_config *vmcfg, struct ast_config *ucfg, const char *ext, struct ast_flags flags, itemlist *alist)
{
struct ast_variable *v;
char buf[AST_MAX_EXTENSION + 1], *pos, *bufptr, *cat;
@@ -503,10 +524,10 @@
res = 0;
if (ast_test_flag(&flags, OPT_LISTBYLASTNAME)) {
- res = check_match(&item, pos, v->name, ext, 0 /* use_first_name */);
+ res = check_match(&item, context, pos, v->name, ext, 0 /* use_first_name */);
}
if (!res && ast_test_flag(&flags, OPT_LISTBYFIRSTNAME)) {
- res = check_match(&item, pos, v->name, ext, 1 /* use_first_name */);
+ res = check_match(&item, context, pos, v->name, ext, 1 /* use_first_name */);
}
if (!res)
@@ -532,10 +553,10 @@
res = 0;
if (ast_test_flag(&flags, OPT_LISTBYLASTNAME)) {
- res = check_match(&item, position, cat, ext, 0 /* use_first_name */);
+ res = check_match(&item, context, position, cat, ext, 0 /* use_first_name */);
}
if (!res && ast_test_flag(&flags, OPT_LISTBYFIRSTNAME)) {
- res = check_match(&item, position, cat, ext, 1 /* use_first_name */);
+ res = check_match(&item, context, position, cat, ext, 1 /* use_first_name */);
}
if (!res)
@@ -547,6 +568,35 @@
}
}
return 0;
+}
+
+static int search_directory(const char *context, struct ast_config *vmcfg, struct ast_config *ucfg, const char *ext, struct ast_flags flags, itemlist *alist)
+{
+ const char *searchcontexts = ast_variable_retrieve(vmcfg, "general", "searchcontexts");
+ if (ast_strlen_zero(context)) {
+ if (!ast_strlen_zero(searchcontexts) && ast_true(searchcontexts)) {
+ /* Browse each context for a match */
+ int res;
+ const char *catg;
+ for (catg = ast_category_browse(vmcfg, NULL); catg; catg = ast_category_browse(vmcfg, catg)) {
+ if (!strcmp(catg, "general") || !strcmp(catg, "zonemessages")) {
+ continue;
+ }
+
+ if ((res = search_directory_sub(catg, vmcfg, ucfg, ext, flags, alist))) {
+ return res;
+ }
+ }
+ return 0;
+ } else {
+ ast_debug(1, "Searching by category default\n");
+ return search_directory_sub("default", vmcfg, ucfg, ext, flags, alist);
+ }
+ } else {
+ /* Browse only the listed context for a match */
+ ast_debug(1, "Searching by category %s\n", context);
+ return search_directory_sub(context, vmcfg, ucfg, ext, flags, alist);
+ }
}
static void sort_items(struct directory_item **sorted, int count)
@@ -593,18 +643,11 @@
int count, i;
char ext[10] = "";
- if (ast_strlen_zero(context)) {
- ast_log(LOG_WARNING,
- "Directory must be called with an argument "
- "(context in which to interpret extensions)\n");
- return -1;
- }
-
- if (digit == '0' && !goto_exten(chan, dialcontext, "o")) {
+ if (digit == '0' && !goto_exten(chan, S_OR(dialcontext, "default"), "o")) {
return 0;
}
- if (digit == '*' && !goto_exten(chan, dialcontext, "a")) {
+ if (digit == '*' && !goto_exten(chan, S_OR(dialcontext, "default"), "a")) {
return 0;
}
@@ -642,16 +685,16 @@
if (option_debug) {
ast_debug(2, "Listing matching entries:\n");
for (ptr = sorted, i = 0; i < count; i++, ptr++) {
- ast_log(LOG_DEBUG, "%s: %s\n", ptr[0]->exten, ptr[0]->name);
+ ast_debug(2, "%s: %s\n", ptr[0]->exten, ptr[0]->name);
}
}
if (ast_test_flag(flags, OPT_SELECTFROMMENU)) {
/* Offer multiple entries at the same time */
- res = select_item_menu(chan, sorted, count, context, dialcontext, flags);
+ res = select_item_menu(chan, sorted, count, dialcontext, flags);
} else {
/* Offer entries one by one */
- res = select_item_seq(chan, sorted, count, context, dialcontext, flags);
+ res = select_item_seq(chan, sorted, count, dialcontext, flags);
}
if (!res) {
@@ -673,7 +716,7 @@
int res = 0, digit = 3;
struct ast_config *cfg, *ucfg;
const char *dirintro;
- char *parse, *opts[OPT_ARG_ARRAY_SIZE];
+ char *parse, *opts[OPT_ARG_ARRAY_SIZE] = { 0, };
struct ast_flags flags = { 0 };
struct ast_flags config_flags = { 0 };
enum { FIRST, LAST, BOTH } which = LAST;
@@ -684,11 +727,6 @@
AST_APP_ARG(options);
);
- if (ast_strlen_zero(data)) {
- ast_log(LOG_WARNING, "Directory requires an argument (context[,dialcontext])\n");
- return -1;
- }
-
parse = ast_strdupa(data);
AST_STANDARD_APP_ARGS(args, parse);
@@ -696,11 +734,7 @@
if (args.options && ast_app_parse_options(directory_app_options, &flags, opts, args.options))
return -1;
- if (ast_strlen_zero(args.dialcontext))
- args.dialcontext = args.vmcontext;
-
- cfg = realtime_directory(args.vmcontext);
- if (!cfg) {
+ if (!(cfg = realtime_directory(args.vmcontext))) {
ast_log(LOG_ERROR, "Unable to read the configuration data!\n");
return -1;
}
Modified: team/group/appdocsxml/configs/extensions.conf.sample
URL: http://svn.digium.com/view/asterisk/team/group/appdocsxml/configs/extensions.conf.sample?view=diff&rev=152803&r1=152802&r2=152803
==============================================================================
--- team/group/appdocsxml/configs/extensions.conf.sample (original)
+++ team/group/appdocsxml/configs/extensions.conf.sample Thu Oct 30 05:23:26 2008
@@ -213,10 +213,11 @@
;
;
[dundi-e164-canonical]
+;include => stdexten
;
; List canonical entries here
;
-;exten => 12564286000,1,Gosub(stdexten,s,1(6000,IAX2/foo))
+;exten => 12564286000,1,Gosub(stdexten(6000,IAX2/foo))
;exten => 12564286000,n,Goto(default,s,1) ; exited Voicemail
;exten => _125642860XX,1,Dial(IAX2/otherbox/${EXTEN:7})
@@ -401,28 +402,28 @@
; variable on top of an existing variable, and its value will revert to its
; previous value (before being declared as LOCAL()) upon Return.
;
-exten => s,1,NoOp(Start stdexten)
-exten => s,n,Set(LOCAL(ext)=${ARG1})
-exten => s,n,Set(LOCAL(dev)=${ARG2})
-exten => s,n,Set(LOCAL(cntx)=${ARG3})
-
-exten => s,n,Set(LOCAL(mbx)="${ext}"$["${cntx}" ? "@${cntx}" :: ""])
-exten => s,n,Dial(${dev},20) ; Ring the interface, 20 seconds maximum
-exten => s,n,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
-
-exten => s-NOANSWER,1,Voicemail(${mbx},u) ; If unavailable, send to voicemail w/ unavail announce
-exten => s-NOANSWER,n,NoOp(Finish stdexten NOANSWER)
-exten => s-NOANSWER,n,Return() ; If they press #, return to start
-
-exten => s-BUSY,1,Voicemail(${mbx},b)
+exten => _X.,50000(stdexten),NoOp(Start stdexten)
+exten => _X.,n,Set(LOCAL(ext)=${ARG1})
+exten => _X.,n,Set(LOCAL(dev)=${ARG2})
+exten => _X.,n,Set(LOCAL(cntx)=${ARG3})
+
+exten => _X.,n,Set(LOCAL(mbx)="${ext}"$["${cntx}" ? "@${cntx}" :: ""])
+exten => _X.,n,Dial(${dev},20) ; Ring the interface, 20 seconds maximum
+exten => _X.,n,Goto(stdexten-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
+
+exten => stdexten-NOANSWER,1,Voicemail(${mbx},u) ; If unavailable, send to voicemail w/ unavail announce
+exten => stdexten-NOANSWER,n,NoOp(Finish stdexten NOANSWER)
+exten => stdexten-NOANSWER,n,Return() ; If they press #, return to start
+
+exten => stdexten-BUSY,1,Voicemail(${mbx},b)
; If busy, send to voicemail w/ busy announce
-exten => s-BUSY,n,NoOp(Finish stdexten BUSY)
-exten => s-BUSY,n,Return() ; If they press #, return to start
-
-exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer
+exten => stdexten-BUSY,n,NoOp(Finish stdexten BUSY)
+exten => stdexten-BUSY,n,Return() ; If they press #, return to start
+
+exten => _stdexten[\-].,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer
exten => a,1,VoicemailMain(${mbx}) ; If they press *, send the user into VoicemailMain
- ; does this ever return?
+exten => a,n,Return()
[stdPrivacyexten]
;
@@ -435,34 +436,34 @@
;
; See above note in stdexten about priority handling on exit.
;
-exten => s,1,NoOp(Start stdPrivacyexten)
-exten => s,n,Set(LOCAL(ext)=${ARG1})
-exten => s,n,Set(LOCAL(dev)=${ARG2})
-exten => s,n,Set(LOCAL(dontcntx)=${ARG3})
-exten => s,n,Set(LOCAL(tortcntx)=${ARG4})
-exten => s,n,Set(LOCAL(cntx)=${ARG5})
-
-exten => s,n,Set(LOCAL(mbx)="${ext}"$["${cntx}" ? "@${cntx}" :: ""])
-exten => s,n,Dial(${dev},20,p) ; Ring the interface, 20 seconds maximum, call screening
- ; option (or use P for databased call screening)
-exten => s,n,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
-
-exten => s-NOANSWER,1,Voicemail(${mbx},u) ; If unavailable, send to voicemail w/ unavail announce
-exten => s-NOANSWER,n,NoOp(Finish stdPrivacyexten NOANSWER)
-exten => s-NOANSWER,n,Return() ; If they press #, return to start
-
-exten => s-BUSY,1,Voicemail(${mbx},b) ; If busy, send to voicemail w/ busy announce
-exten => s-BUSY,n,NoOp(Finish stdPrivacyexten BUSY)
-exten => s-BUSY,n,Return() ; If they press #, return to start
-
-exten => s-DONTCALL,1,Goto(${dontcntx},s,1) ; Callee chose to send this call to a polite "Don't call again" script.
-
-exten => s-TORTURE,1,Goto(${tortcntx},s,1) ; Callee chose to send this call to a telemarketer torture script.
-
-exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer
+exten => _X.,60000(stdPrivacyexten),NoOp(Start stdPrivacyexten)
+exten => _X.,n,Set(LOCAL(ext)=${ARG1})
+exten => _X.,n,Set(LOCAL(dev)=${ARG2})
+exten => _X.,n,Set(LOCAL(dontcntx)=${ARG3})
+exten => _X.,n,Set(LOCAL(tortcntx)=${ARG4})
+exten => _X.,n,Set(LOCAL(cntx)=${ARG5})
+
+exten => _X.,n,Set(LOCAL(mbx)="${ext}"$["${cntx}" ? "@${cntx}" :: ""])
+exten => _X.,n,Dial(${dev},20,p) ; Ring the interface, 20 seconds maximum, call screening
+ ; option (or use P for databased call _X.creening)
+exten => _X.,n,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
+
+exten => stdexten-NOANSWER,1,Voicemail(${mbx},u) ; If unavailable, send to voicemail w/ unavail announce
+exten => stdexten-NOANSWER,n,NoOp(Finish stdPrivacyexten NOANSWER)
+exten => stdexten-NOANSWER,n,Return() ; If they press #, return to start
+
+exten => stdexten-BUSY,1,Voicemail(${mbx},b) ; If busy, send to voicemail w/ busy announce
+exten => stdexten-BUSY,n,NoOp(Finish stdPrivacyexten BUSY)
+exten => stdexten-BUSY,n,Return() ; If they press #, return to start
+
+exten => stdexten-DONTCALL,1,Goto(${dontcntx},s,1) ; Callee chose to send this call to a polite "Don't call again" script.
+
+exten => stdexten-TORTURE,1,Goto(${tortcntx},s,1) ; Callee chose to send this call to a telemarketer torture script.
+
+exten => _stdexten-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer
exten => a,1,VoicemailMain(${mbx}) ; If they press *, send the user into VoicemailMain
- ; does this ever return?
+exten => a,n,Return
[macro-page];
;
@@ -482,6 +483,7 @@
[demo]
+include => stdexten
;
; We start with what to do when a call first comes in.
;
@@ -506,7 +508,7 @@
;
exten => 1234,1,Playback(transfer,skip) ; "Please hold while..."
; (but skip if channel is not up)
-exten => 1234,n,Gosub(stdexten,s,1(1234,${GLOBAL(CONSOLE)}))
+exten => 1234,n,Gosub(stdexten(1234,${GLOBAL(CONSOLE)}))
exten => 1234,n,Goto(default,s,1) ; exited Voicemail
exten => 1235,1,Voicemail(1234,u) ; Right to voicemail
@@ -623,11 +625,11 @@
;exten => 6391,1,Dial(JINGLE/asterisk at digium.com/mogorman at astjab.org) ;Dial via jingle using asterisk as the transport and calling mogorman.
;exten => 6394,1,Dial(Local/6275/n) ; this will dial ${MARK}
-;exten => 6275,1,Gosub(stdexten,s,1(6275,${MARK}))
+;exten => 6275,1,Gosub(stdexten(6275,${MARK}))
; assuming ${MARK} is something like DAHDI/2
;exten => 6275,n,Goto(default,s,1) ; exited Voicemail
;exten => mark,1,Goto(6275,1) ; alias mark to 6275
-;exten => 6536,1,Gosub(stdexten,s,1(6236,${WIL}))
+;exten => 6536,1,Gosub(stdexten(6236,${WIL}))
; Ditto for wil
;exten => 6536,n,Goto(default,s,1) ; exited Voicemail
;exten => wil,1,Goto(6236,1)
@@ -693,10 +695,11 @@
; grouping of acme's extensions... never used directly, always included.
;
;[acme-extens]
-;exten => 111,1,Gosub(stdexten,s,1(111,SIP/pete_1,acme))
+;include => stdexten
+;exten => 111,1,Gosub(stdexten(111,SIP/pete_1,acme))
;exten => 111,n,Goto(s,exten)
;
-;exten => 112,1,Gosub(stdexten,s,1(112,SIP/nancy_1,acme))
+;exten => 112,1,Gosub(stdexten(112,SIP/nancy_1,acme))
;exten => 112,n,Goto(s,end)
;
; end of acme example
More information about the asterisk-commits
mailing list