make Record() properly timeout even if no input is received from the channel (issue #4899)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6366 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Kevin P. Fleming 2005-08-23 01:08:07 +00:00
parent 0bf1d48e40
commit a0ebefc915
1 changed files with 14 additions and 9 deletions

View File

@ -78,9 +78,8 @@ static int record_exec(struct ast_channel *chan, void *data)
int dspsilence = 0;
int silence = 0; /* amount of silence to allow */
int gotsilence = 0; /* did we timeout for silence? */
int maxduration = 0; /* max duration of recording */
int maxduration = 0; /* max duration of recording in milliseconds */
int gottimeout = 0; /* did we timeout for maxduration exceeded? */
time_t timeout = 0;
int option_skip = 0;
int option_noanswer = 0;
int option_append = 0;
@ -131,7 +130,8 @@ static int record_exec(struct ast_channel *chan, void *data)
if (maxstr) {
if ((sscanf(maxstr, "%d", &i) == 1) && (i > -1))
maxduration = i;
/* Convert duration to milliseconds */
maxduration = i * 1000;
else if (!ast_strlen_zero(maxstr))
ast_log(LOG_WARNING, "'%s' is not a valid maximum duration\n", maxstr);
}
@ -218,13 +218,18 @@ static int record_exec(struct ast_channel *chan, void *data)
if (s) {
if (maxduration > 0)
timeout = time(NULL) + (time_t)maxduration;
int waitres;
if (maxduration <= 0)
maxduration = -1;
while (ast_waitfor(chan, -1) > -1) {
if (maxduration > 0 && time(NULL) > timeout) {
gottimeout = 1;
break;
while ((waitres = ast_waitfor(chan, maxduration)) > -1) {
if (maxduration > 0) {
if (waitres == 0) {
gottimeout = 1;
break;
}
maxduration = waitres;
}
f = ast_read(chan);