aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_directory.c
diff options
context:
space:
mode:
authorqwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-08-19 00:53:54 +0000
committerqwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-08-19 00:53:54 +0000
commitb7a22c9210d2ec4e1cd48aec08824ac984dbd088 (patch)
tree02b6ce452c13c9f721f8d604e3b5a1dd32ebc26c /apps/app_directory.c
parent58b98df732c92339173863e4bc521b24a09b1211 (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.c29
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);