[Asterisk-cvs] asterisk/apps app_record.c,1.32,1.33
kpfleming
kpfleming
Mon Aug 22 21:06:03 CDT 2005
Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv10914/apps
Modified Files:
app_record.c
Log Message:
make Record() properly timeout even if no input is received from the channel (issue #4899)
Index: app_record.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_record.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- app_record.c 6 Jun 2005 22:39:31 -0000 1.32
+++ app_record.c 23 Aug 2005 01:08:07 -0000 1.33
@@ -78,9 +78,8 @@
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 @@
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 @@
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);
More information about the svn-commits
mailing list