aboutsummaryrefslogtreecommitdiffstats
path: root/main/app.c
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-11-10 03:59:48 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2006-11-10 03:59:48 +0000
commitb5963fa342c9b8ce9f42595309939c3bd244302e (patch)
tree410c989e8b77bed6f6278b708862964066036a88 /main/app.c
parent478281c3a75dcfa829951b2ea21c6fb4a5bb7f07 (diff)
Add the ability to specify multiple prompts to the Read() dialplan application,
similar to Background() and Playback(). (issue #7897, jsmith, with some modifications) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@47408 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/app.c')
-rw-r--r--main/app.c46
1 files changed, 33 insertions, 13 deletions
diff --git a/main/app.c b/main/app.c
index 9230e4ac3..b00deb885 100644
--- a/main/app.c
+++ b/main/app.c
@@ -105,25 +105,45 @@ int ast_app_dtget(struct ast_channel *chan, const char *context, char *collect,
* \param maxlen How many digits to read (maximum)
* \param timeout set timeout to 0 for "standard" timeouts. Set timeout to -1 for
* "ludicrous time" (essentially never times out) */
-int ast_app_getdata(struct ast_channel *c, char *prompt, char *s, int maxlen, int timeout)
+int ast_app_getdata(struct ast_channel *c, const char *prompt, char *s, int maxlen, int timeout)
{
- int res,to,fto;
+ int res = 0, to, fto;
+ char *front, *filename;
+
/* XXX Merge with full version? XXX */
+
if (maxlen)
s[0] = '\0';
- if (prompt) {
- res = ast_streamfile(c, prompt, c->language);
- if (res < 0)
+
+ if (ast_strlen_zero(prompt))
+ return -1;
+
+ filename = ast_strdupa(prompt);
+ while ((front = strsep(&filename, "&"))) {
+ res = ast_streamfile(c, front, c->language);
+ if (res)
+ continue;
+ if (ast_strlen_zero(filename)) {
+ /* set timeouts for the last prompt */
+ fto = c->pbx ? c->pbx->rtimeout * 1000 : 6000;
+ to = c->pbx ? c->pbx->dtimeout * 1000 : 2000;
+
+ if (timeout > 0)
+ fto = to = timeout;
+ if (timeout < 0)
+ fto = to = 1000000000;
+ } else {
+ /* there is more than one prompt, so
+ get rid of the long timeout between
+ prompts, and make it 50ms */
+ fto = 50;
+ to = c->pbx ? c->pbx->dtimeout * 1000 : 2000;
+ }
+ res = ast_readstring(c, s, maxlen, to, fto, "#");
+ if (!ast_strlen_zero(s))
return res;
}
- fto = c->pbx ? c->pbx->rtimeout * 1000 : 6000;
- to = c->pbx ? c->pbx->dtimeout * 1000 : 2000;
-
- if (timeout > 0)
- fto = to = timeout;
- if (timeout < 0)
- fto = to = 1000000000;
- res = ast_readstring(c, s, maxlen, to, fto, "#");
+
return res;
}