From: Joshua Colp Date: Wed, 17 May 2006 15:17:04 +0000 (+0000) Subject: OSPNext does not handle success/failure correctly (issue #7147 reported and fixed... X-Git-Tag: 1.2.9.1~67 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc3570ac0fee537ff7106b37f5365aacb6f72343;p=thirdparty%2Fasterisk.git OSPNext does not handle success/failure correctly (issue #7147 reported and fixed by eborgstrom) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@27767 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_osplookup.c b/apps/app_osplookup.c index 2fe2d016ac..f436d7cfa8 100644 --- a/apps/app_osplookup.c +++ b/apps/app_osplookup.c @@ -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 */