mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	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: https://origsvn.digium.com/svn/asterisk/trunk@40426 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -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); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user