Make sure ExecIf stuff returns properly (bug #3864)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5297 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2005-03-29 06:18:58 +00:00
parent eb91006b7c
commit b02fd7a66d
3 changed files with 21 additions and 10 deletions

View File

@@ -37,7 +37,7 @@ static char *exec_descrip =
"Exec(appname(arguments))\n" "Exec(appname(arguments))\n"
" Allows an arbitrary application to be invoked even when not\n" " Allows an arbitrary application to be invoked even when not\n"
"hardcoded into the dialplan. Returns whatever value the\n" "hardcoded into the dialplan. Returns whatever value the\n"
"app returns or -2 when the app cannot be found.\n"; "app returns or a non-zero value when the app cannot be found.\n";
STANDARD_LOCAL_USER; STANDARD_LOCAL_USER;
@@ -71,7 +71,7 @@ static int exec_exec(struct ast_channel *chan, void *data)
res = pbx_exec(chan, app, args, 1); res = pbx_exec(chan, app, args, 1);
} else { } else {
ast_log(LOG_WARNING, "Could not find application (%s)\n", appname); ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
res = -2; res = -1;
} }
} }
} else { } else {

View File

@@ -29,7 +29,9 @@
static char *exec_app = "ExecIf"; static char *exec_app = "ExecIf";
static char *exec_desc = " ExecIF (<expr>|<app>|<data>)\n" static char *exec_desc = " ExecIF (<expr>|<app>|<data>)\n"
"If <expr> is true, execute and return the result of <app>(<data>)\n\n"; "If <expr> is true, execute and return the result of <app>(<data>).\n"
"If <expr> is true, but <app> is not found, then the application\n"
"will return a non-zero value.";
static char *exec_synopsis = "ExecIF (<expr>|<app>|<data>)"; static char *exec_synopsis = "ExecIF (<expr>|<app>|<data>)";
static char *start_app = "While"; static char *start_app = "While";
@@ -73,8 +75,13 @@ static int execif_exec(struct ast_channel *chan, void *data) {
} else } else
mydata = ""; mydata = "";
if(ast_true(expr) && (app = pbx_findapp(myapp))) { if (ast_true(expr)) {
res = pbx_exec(chan, app, mydata, 1); if ((app = pbx_findapp(myapp))) {
res = pbx_exec(chan, app, mydata, 1);
} else {
ast_log(LOG_WARNING, "Count not find application! (%s)\n", myapp);
res = -1;
}
} }
} else { } else {
ast_log(LOG_ERROR,"Invalid Syntax.\n"); ast_log(LOG_ERROR,"Invalid Syntax.\n");

14
pbx.c
View File

@@ -300,7 +300,8 @@ static struct pbx_builtin {
" ExecIfTime(<times>|<weekdays>|<mdays>|<months>?<appname>[|<appdata>]):\n" " ExecIfTime(<times>|<weekdays>|<mdays>|<months>?<appname>[|<appdata>]):\n"
"If the current time matches the specified time, then execute the specified\n" "If the current time matches the specified time, then execute the specified\n"
"application. Each of the elements may be specified either as '*' (for always)\n" "application. Each of the elements may be specified either as '*' (for always)\n"
"or as a range. See the 'include' syntax for details." "or as a range. See the 'include' syntax for details. It will return whatever\n"
"<appname> returns, or a non-zero value if the application is not found.\n"
}, },
{ "Hangup", pbx_builtin_hangup, { "Hangup", pbx_builtin_hangup,
@@ -5372,10 +5373,10 @@ static int pbx_builtin_execiftime(struct ast_channel *chan, void *data)
int res = 0; int res = 0;
char *ptr1, *ptr2; char *ptr1, *ptr2;
struct ast_timing timing; struct ast_timing timing;
const char *usage = "ExecIfTime requires an argument:\n <time range>|<days of week>|<days of month>|<months>?<appname>[|<ptr1>]"; const char *usage = "ExecIfTime requires an argument:\n <time range>|<days of week>|<days of month>|<months>?<appname>[|<appargs>]";
if (!data || ast_strlen_zero(data)) { if (!data || ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "%s\n", usage); ast_log(LOG_WARNING, "%s\n", usage);
return -1; return -1;
} }
@@ -5393,18 +5394,21 @@ static int pbx_builtin_execiftime(struct ast_channel *chan, void *data)
ptr1++; ptr1++;
} }
if ((app = pbx_findapp(ptr2))) { if ((app = pbx_findapp(ptr2))) {
pbx_exec(chan, app, ptr1 ? ptr1 : "", 1); res = pbx_exec(chan, app, ptr1 ? ptr1 : "", 1);
} else { } else {
ast_log(LOG_WARNING, "Cannot locate application %s\n", ptr2); ast_log(LOG_WARNING, "Cannot locate application %s\n", ptr2);
res = -1;
} }
} else { } else {
ast_log(LOG_WARNING, "%s\n", usage); ast_log(LOG_WARNING, "%s\n", usage);
} }
} else { } else {
ast_log(LOG_WARNING, "Invalid Time Spec: %s\n%s\n", ptr1, usage); ast_log(LOG_WARNING, "Invalid Time Spec: %s\nCorrect usage: %s\n", ptr1, usage);
res = -1;
} }
} else { } else {
ast_log(LOG_ERROR, "Memory Error!\n"); ast_log(LOG_ERROR, "Memory Error!\n");
res = -1;
} }
return res; return res;
} }