]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
OSPNext does not handle success/failure correctly (issue #7147 reported and fixed...
authorJoshua Colp <jcolp@digium.com>
Wed, 17 May 2006 15:17:04 +0000 (15:17 +0000)
committerJoshua Colp <jcolp@digium.com>
Wed, 17 May 2006 15:17:04 +0000 (15:17 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27767 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_osplookup.c

index 2fe2d016ac02dc64f05b43d9d29dca58c55b53cc..f436d7cfa89fe989c16855e7f82301dc0788b65c 100644 (file)
@@ -216,31 +216,33 @@ static int ospnext_exec(struct ast_channel *chan, void *data)
        cause = str2cause(args.cause);
        temp = pbx_builtin_getvar_helper(chan, "OSPHANDLE");
        result.handle = -1;
-       if (!ast_strlen_zero(temp) && (sscanf(temp, "%d", &result.handle) == 1) && (result.handle > -1)) {
-               temp = pbx_builtin_getvar_helper(chan, "OSPRESULTS");
-               if (ast_strlen_zero(temp) || (sscanf(temp, "%d", &result.numresults) != 1)) {
-                       result.numresults = 0;
-               }
-               if ((res = ast_osp_next(&result, cause)) > 0) {
-                       char tmp[80];
-                       snprintf(tmp, sizeof(tmp), "%d", result.handle);
-                       pbx_builtin_setvar_helper(chan, "_OSPHANDLE", tmp);
-                       pbx_builtin_setvar_helper(chan, "_OSPTECH", result.tech);
-                       pbx_builtin_setvar_helper(chan, "_OSPDEST", result.dest);
-                       pbx_builtin_setvar_helper(chan, "_OSPTOKEN", result.token);
-                       snprintf(tmp, sizeof(tmp), "%d", result.numresults);
-                       pbx_builtin_setvar_helper(chan, "_OSPRESULTS", tmp);
-                       pbx_builtin_setvar_helper(chan, "OSPNEXTSTATUS", "SUCCESS");
-               }
+       if (ast_strlen_zero(temp) || (sscanf(temp, "%d", &result.handle) != 1)) {
+               result.handle = -1;
+       }
+       temp = pbx_builtin_getvar_helper(chan, "OSPRESULTS");
+       if (ast_strlen_zero(temp) || (sscanf(temp, "%d", &result.numresults) != 1)) {
+               result.numresults = 0;
+       }
+       if ((res = ast_osp_next(&result, cause)) > 0) {
+               char tmp[80];
+               snprintf(tmp, sizeof(tmp), "%d", result.handle);
+               pbx_builtin_setvar_helper(chan, "_OSPHANDLE", tmp);
+               pbx_builtin_setvar_helper(chan, "_OSPTECH", result.tech);
+               pbx_builtin_setvar_helper(chan, "_OSPDEST", result.dest);
+               pbx_builtin_setvar_helper(chan, "_OSPTOKEN", result.token);
+               snprintf(tmp, sizeof(tmp), "%d", result.numresults);
+               pbx_builtin_setvar_helper(chan, "_OSPRESULTS", tmp);
+               pbx_builtin_setvar_helper(chan, "OSPNEXTSTATUS", "SUCCESS");
        } else {
                if (!res) {
                        if (result.handle < 0)
                                ast_log(LOG_NOTICE, "OSP Lookup Next failed for handle '%d'\n", result.handle);
                        else
                                ast_log(LOG_DEBUG, "No OSP handle specified\n");
-                       pbx_builtin_setvar_helper(chan, "OSPNEXTSTATUS", "FAILED");     
                } else
                        ast_log(LOG_DEBUG, "Got hangup on '%s' while doing OSP Next!\n", chan->name);
+
+               pbx_builtin_setvar_helper(chan, "OSPNEXTSTATUS", "FAILED");     
        }
        if (!res) {
                /* Look for a "busy" place */