As per ToDo list, I have made it so that Wait(), WaitExten(), Congestion(), Busy...
authorSteve Murphy <murf@digium.com>
Thu, 5 Oct 2006 01:40:06 +0000 (01:40 +0000)
committerSteve Murphy <murf@digium.com>
Thu, 5 Oct 2006 01:40:06 +0000 (01:40 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44435 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
apps/app_read.c
apps/app_speech_utils.c
apps/app_waitforring.c
main/pbx.c

diff --git a/CHANGES b/CHANGES
index febf1ee..4625ee0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -29,3 +29,11 @@ Changes since Asterisk 1.4-beta was branched:
      two channels.
   * Added 'Strategy' field to manager event QueueParams which represents
      the queue strategy in use. 
      two channels.
   * Added 'Strategy' field to manager event QueueParams which represents
      the queue strategy in use. 
+  * From the to-do lists: straighten out the app timeout args:
+     Wait() app now really does 0.3 seconds- was truncating arg to an int.
+     WaitExten() same as Wait().
+     Congestion() - Now takes floating pt. argument.
+     Busy() - now takes floating pt. argument.
+     Read() - timeout now can be floating pt.
+     WaitForRing() now takes floating pt timeout arg.
+     SpeechBackground() -- clarified in the docstrings that the timeout is an integer seconds.
index bb3dd66..5db886b 100644 (file)
@@ -77,8 +77,8 @@ static char *descrip =
 "                'n' to read digits even if the line is not up.\n"
 "  attempts   -- if greater than 1, that many attempts will be made in the \n"
 "                event no data is entered.\n"
 "                'n' to read digits even if the line is not up.\n"
 "  attempts   -- if greater than 1, that many attempts will be made in the \n"
 "                event no data is entered.\n"
-"  timeout    -- An integer number of seconds to wait for a digit response. If greater\n"
-"                than 0, that value will override the default timeout.\n\n"
+"  timeout    -- The number of seconds to wait for a digit response. If greater\n"
+"                than 0, that value will override the default timeout. Can be floating point.\n\n"
 "Read should disconnect if the function fails or errors out.\n";
 
 
 "Read should disconnect if the function fails or errors out.\n";
 
 
@@ -91,6 +91,7 @@ static int read_exec(struct ast_channel *chan, void *data)
        char tmp[256] = "";
        int maxdigits = 255;
        int tries = 1, to = 0, x = 0;
        char tmp[256] = "";
        int maxdigits = 255;
        int tries = 1, to = 0, x = 0;
+       double tosec;
        char *argcopy = NULL;
        struct tone_zone_sound *ts;
        struct ast_flags flags = {0};
        char *argcopy = NULL;
        struct tone_zone_sound *ts;
        struct ast_flags flags = {0};
@@ -126,11 +127,11 @@ static int read_exec(struct ast_channel *chan, void *data)
        }
 
        if (!ast_strlen_zero(arglist.timeout)) {
        }
 
        if (!ast_strlen_zero(arglist.timeout)) {
-               to = atoi(arglist.timeout);
-               if (to <= 0)
+               tosec = atof(arglist.timeout);
+               if (tosec <= 0)
                        to = 0;
                else
                        to = 0;
                else
-                       to *= 1000;
+                       to = tosec * 1000.0;
        }
 
        if (ast_strlen_zero(arglist.filename)) {
        }
 
        if (ast_strlen_zero(arglist.filename)) {
index 525aa0a..42b7fb0 100644 (file)
@@ -64,7 +64,7 @@ static char *speechbackground_descrip =
 "Once they stop talking the processing sound is played to indicate the speech recognition engine is working.\n"
 "Once results are available the application returns and results (score and text) are available using dialplan functions.\n"
 "The first text and score are ${SPEECH_TEXT(0)} AND ${SPEECH_SCORE(0)} while the second are ${SPEECH_TEXT(1)} and ${SPEECH_SCORE(1)}.\n"
 "Once they stop talking the processing sound is played to indicate the speech recognition engine is working.\n"
 "Once results are available the application returns and results (score and text) are available using dialplan functions.\n"
 "The first text and score are ${SPEECH_TEXT(0)} AND ${SPEECH_SCORE(0)} while the second are ${SPEECH_TEXT(1)} and ${SPEECH_SCORE(1)}.\n"
-"The first argument is the sound file and the second is the timeout. Note the timeout will only start once the sound file has stopped playing.\n";
+"The first argument is the sound file and the second is the timeout integer in seconds. Note the timeout will only start once the sound file has stopped playing.\n";
 
 static char *speechdeactivategrammar_descrip =
 "SpeechDeactivateGrammar(Grammar Name)\n"
 
 static char *speechdeactivategrammar_descrip =
 "SpeechDeactivateGrammar(Grammar Name)\n"
index a4f69ae..d59644b 100644 (file)
@@ -58,16 +58,17 @@ static int waitforring_exec(struct ast_channel *chan, void *data)
        struct ast_module_user *u;
        struct ast_frame *f;
        int res = 0;
        struct ast_module_user *u;
        struct ast_frame *f;
        int res = 0;
+       double s;
        int ms;
 
        int ms;
 
-       if (!data || (sscanf(data, "%d", &ms) != 1)) {
+       if (!data || (sscanf(data, "%lg", &s) != 1)) {
                 ast_log(LOG_WARNING, "WaitForRing requires an argument (minimum seconds)\n");
                return 0;
        }
 
        u = ast_module_user_add(chan);
 
                 ast_log(LOG_WARNING, "WaitForRing requires an argument (minimum seconds)\n");
                return 0;
        }
 
        u = ast_module_user_add(chan);
 
-       ms *= 1000;
+       ms = s*1000.0;
        while(ms > 0) {
                ms = ast_waitfor(chan, ms);
                if (ms < 0) {
        while(ms > 0) {
                ms = ast_waitfor(chan, ms);
                if (ms < 0) {
index d3fb389..d6f2ad8 100644 (file)
@@ -5023,12 +5023,14 @@ static void wait_for_hangup(struct ast_channel *chan, void *data)
 {
        int res;
        struct ast_frame *f;
 {
        int res;
        struct ast_frame *f;
+       double waitsec;
        int waittime;
 
        int waittime;
 
-       if (ast_strlen_zero(data) || (sscanf(data, "%d", &waittime) != 1) || (waittime < 0))
-               waittime = -1;
-       if (waittime > -1) {
-               ast_safe_sleep(chan, waittime * 1000);
+       if (ast_strlen_zero(data) || (sscanf(data, "%lg", &waitsec) != 1) || (waitsec < 0))
+               waitsec = -1;
+       if (waitsec > -1) {
+               waittime = waitsec * 1000.0;
+               ast_safe_sleep(chan, waittime);
        } else do {
                res = ast_waitfor(chan, -1);
                if (res < 0)
        } else do {
                res = ast_waitfor(chan, -1);
                if (res < 0)
@@ -5246,11 +5248,12 @@ static int pbx_builtin_execiftime(struct ast_channel *chan, void *data)
  */
 static int pbx_builtin_wait(struct ast_channel *chan, void *data)
 {
  */
 static int pbx_builtin_wait(struct ast_channel *chan, void *data)
 {
+       double s;
        int ms;
 
        /* Wait for "n" seconds */
        int ms;
 
        /* Wait for "n" seconds */
-       if (data && (ms = atof(data)) > 0) {
-               ms *= 1000;
+       if (data && (s = atof(data)) > 0.0) {
+               ms = s*1000.0;
                return ast_safe_sleep(chan, ms);
        }
        return 0;
                return ast_safe_sleep(chan, ms);
        }
        return 0;
@@ -5262,6 +5265,7 @@ static int pbx_builtin_wait(struct ast_channel *chan, void *data)
 static int pbx_builtin_waitexten(struct ast_channel *chan, void *data)
 {
        int ms, res;
 static int pbx_builtin_waitexten(struct ast_channel *chan, void *data)
 {
        int ms, res;
+       double s;
        struct ast_flags flags = {0};
        char *opts[1] = { NULL };
        char *parse;
        struct ast_flags flags = {0};
        char *opts[1] = { NULL };
        char *parse;
@@ -5285,12 +5289,13 @@ static int pbx_builtin_waitexten(struct ast_channel *chan, void *data)
                ast_indicate_data(chan, AST_CONTROL_HOLD, opts[0], strlen(opts[0]));
 
        /* Wait for "n" seconds */
                ast_indicate_data(chan, AST_CONTROL_HOLD, opts[0], strlen(opts[0]));
 
        /* Wait for "n" seconds */
-       if (args.timeout && (ms = atof(args.timeout)) > 0)
-                ms *= 1000;
+       if (args.timeout && (s = atof(args.timeout)) > 0)
+                ms = s * 1000.0;
        else if (chan->pbx)
                ms = chan->pbx->rtimeout * 1000;
        else
                ms = 10000;
        else if (chan->pbx)
                ms = chan->pbx->rtimeout * 1000;
        else
                ms = 10000;
+
        res = ast_waitfordigit(chan, ms);
        if (!res) {
                if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 1, chan->cid.cid_num)) {
        res = ast_waitfordigit(chan, ms);
        if (!res) {
                if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 1, chan->cid.cid_num)) {