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);

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to