diff options
author | qwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-08-19 00:53:54 +0000 |
---|---|---|
committer | qwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-08-19 00:53:54 +0000 |
commit | b7a22c9210d2ec4e1cd48aec08824ac984dbd088 (patch) | |
tree | 02b6ce452c13c9f721f8d604e3b5a1dd32ebc26c /apps/app_directory.c | |
parent | 58b98df732c92339173863e4bc521b24a09b1211 (diff) |
Fix a bug with app_voicemail when trying to use app_directory to leave messages
to another user (options 3, 5, 2).
If the context/extension didn't exist in the dialplan (and why should it have to?),
it would fail, saying that it's an "invalid extension".
(issue BE-71)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@40426 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_directory.c')
-rw-r--r-- | apps/app_directory.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/apps/app_directory.c b/apps/app_directory.c index 84a75002d..55e91ce49 100644 --- a/apps/app_directory.c +++ b/apps/app_directory.c @@ -259,7 +259,8 @@ static char *convert(char *lastname) * '*' for skipped entry from directory */ static int play_mailbox_owner(struct ast_channel *chan, char *context, - char *dialcontext, char *ext, char *name, int readext) + char *dialcontext, char *ext, char *name, int readext, + int fromappvm) { int res = 0; int loop; @@ -311,12 +312,17 @@ static int play_mailbox_owner(struct ast_channel *chan, char *context, if (res < 0) /* User hungup, so jump out now */ break; if (res == '1') { /* Name selected */ - if (ast_goto_if_exists(chan, dialcontext, ext, 1)) { - ast_log(LOG_WARNING, - "Can't find extension '%s' in context '%s'. " - "Did you pass the wrong context to Directory?\n", - ext, dialcontext); - res = -1; + if (fromappvm) { + /* We still want to set the exten though */ + ast_copy_string(chan->exten, ext, sizeof(chan->exten)); + } else { + if (ast_goto_if_exists(chan, dialcontext, ext, 1)) { + ast_log(LOG_WARNING, + "Can't find extension '%s' in context '%s'. " + "Did you pass the wrong context to Directory?\n", + ext, dialcontext); + res = -1; + } } break; } @@ -388,7 +394,7 @@ static struct ast_config *realtime_directory(char *context) return cfg; } -static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char *context, char *dialcontext, char digit, int last, int readext) +static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char *context, char *dialcontext, char digit, int last, int readext, int fromappvm) { /* Read in the first three digits.. "digit" is the first digit, already read */ char ext[NUMDIGITS + 1]; @@ -467,7 +473,7 @@ static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char * if (v) { /* We have a match -- play a greeting if they have it */ - res = play_mailbox_owner(chan, context, dialcontext, v->name, name, readext); + res = play_mailbox_owner(chan, context, dialcontext, v->name, name, readext, fromappvm); switch (res) { case -1: /* user pressed '1' but extension does not exist, or @@ -512,6 +518,7 @@ static int directory_exec(struct ast_channel *chan, void *data) struct ast_config *cfg; int last = 1; int readext = 0; + int fromappvm = 0; char *dirintro, *parse; AST_DECLARE_APP_ARGS(args, AST_APP_ARG(vmcontext); @@ -535,6 +542,8 @@ static int directory_exec(struct ast_channel *chan, void *data) last = 0; if (strchr(args.options, 'e')) readext = 1; + if (strchr(args.options, 'v')) + fromappvm = 1; } if (ast_strlen_zero(args.dialcontext)) @@ -563,7 +572,7 @@ static int directory_exec(struct ast_channel *chan, void *data) if (!res) res = ast_waitfordigit(chan, 5000); if (res > 0) { - res = do_directory(chan, cfg, args.vmcontext, args.dialcontext, res, last, readext); + res = do_directory(chan, cfg, args.vmcontext, args.dialcontext, res, last, readext, fromappvm); if (res > 0) { res = ast_waitstream(chan, AST_DIGIT_ANY); ast_stopstream(chan); |