app_read does not break from prompt loop with user terminated empty string

In app.c, ast_app_getdata is called to stream the prompts and receive DTMF input.  If ast_app_getdata() receives an empty string caused by the user inputing the end of string character, in this case '#', it should break from the prompt loop and return to app_read, but instead it cycles through all the prompts.  I've added a return value for this special case in ast_readstring() which uses an enum I've delcared in apps.h.  This enum is now used as a return value for ast_app_getdata().

(closes issue #14279)
Reported by: Marquis
Patches:
	fix_app_read.patch uploaded by Marquis (license 32)
	read-ampersanmd.patch2 uploaded by dvossel (license 671)
Tested by: Marquis, dvossel
Review: http://reviewboard.digium.com/r/177/




git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@180032 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
David Vossel
2009-03-03 23:21:18 +00:00
parent 0b01444ab7
commit 979eb709ae
4 changed files with 33 additions and 14 deletions

View File

@@ -209,6 +209,16 @@ int ast_play_and_record(struct ast_channel *chan, const char *playfile, const ch
'silencethreshold' or use '-1' for either or both parameters for defaults. */
int ast_play_and_prepend(struct ast_channel *chan, char *playfile, char *recordfile, int maxtime_sec, char *fmt, int *duration, int beep, int silencethreshold, int maxsilence_ms);
enum ast_getdata_result {
AST_GETDATA_FAILED = -1,
AST_GETDATA_COMPLETE = 0,
AST_GETDATA_TIMEOUT = 1,
AST_GETDATA_INTERRUPTED = 2,
/*! indicates a user terminated empty string rather than an empty string resulting
* from a timeout or other factors */
AST_GETDATA_EMPTY_END_TERMINATED = 3,
};
enum AST_LOCK_RESULT {
AST_LOCK_SUCCESS = 0,
AST_LOCK_TIMEOUT = -1,