diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-05 20:43:16 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-05 20:43:16 +0000 |
commit | fee1fbb9f2d4680d2e033199677eac528420e9d0 (patch) | |
tree | be8a0516fa1af32c8b67f3f38bc60059c786f955 /apps | |
parent | 811ed760ef2d5ebfad3df8f6adbd60aeb1ef5a3b (diff) |
move ExecIf from app_while.c to app_exec.c (issue #7094, north)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@25013 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_exec.c | 51 | ||||
-rw-r--r-- | apps/app_while.c | 52 |
2 files changed, 52 insertions, 51 deletions
diff --git a/apps/app_exec.c b/apps/app_exec.c index 33775ea72..d41bf27b3 100644 --- a/apps/app_exec.c +++ b/apps/app_exec.c @@ -83,6 +83,14 @@ static char *tryexec_descrip = " NOAPP if the application was not found or was not specified\n" " NOMEMORY if there was not enough memory to execute.\n"; +static char *app_execif = "ExecIf"; +static char *execif_synopsis = "Executes dialplan application, conditionally"; +static char *execif_descrip = +"Usage: ExecIF (<expr>|<app>|<data>)\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.\n"; + LOCAL_USER_DECL; static int exec_exec(struct ast_channel *chan, void *data) @@ -160,12 +168,54 @@ static int tryexec_exec(struct ast_channel *chan, void *data) return 0; } +static int execif_exec(struct ast_channel *chan, void *data) { + int res=0; + struct localuser *u; + char *myapp = NULL; + char *mydata = NULL; + char *expr = NULL; + struct ast_app *app = NULL; + + LOCAL_USER_ADD(u); + + if (!(expr = ast_strdupa(data))) { + LOCAL_USER_REMOVE(u); + return -1; + } + + if ((myapp = strchr(expr,'|'))) { + *myapp = '\0'; + myapp++; + if ((mydata = strchr(myapp,'|'))) { + *mydata = '\0'; + mydata++; + } else + mydata = ""; + + if (pbx_checkcondition(expr)) { + if ((app = pbx_findapp(myapp))) { + res = pbx_exec(chan, app, mydata); + } else { + ast_log(LOG_WARNING, "Count not find application! (%s)\n", myapp); + res = -1; + } + } + } else { + ast_log(LOG_ERROR,"Invalid Syntax.\n"); + res = -1; + } + + LOCAL_USER_REMOVE(u); + return res; +} + static int unload_module(void *mod) { int res; res = ast_unregister_application(app_exec); res |= ast_unregister_application(app_tryexec); + res |= ast_unregister_application(app_execif); STANDARD_HANGUP_LOCALUSERS; @@ -176,6 +226,7 @@ static int load_module(void *mod) { int res = ast_register_application(app_exec, exec_exec, exec_synopsis, exec_descrip); res |= ast_register_application(app_tryexec, tryexec_exec, tryexec_synopsis, tryexec_descrip); + res |= ast_register_application(app_execif, execif_exec, execif_synopsis, execif_descrip); return res; } diff --git a/apps/app_while.c b/apps/app_while.c index 88996b92a..754154e8d 100644 --- a/apps/app_while.c +++ b/apps/app_while.c @@ -18,7 +18,7 @@ /*! \file * - * \brief While Loop and ExecIf Implementations + * \brief While Loop Implementation * * \author Anthony Minessale <anthmct@yahoo.com> * @@ -47,14 +47,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #define ALL_DONE(u,ret) {LOCAL_USER_REMOVE(u); return ret;} -static char *exec_app = "ExecIf"; -static char *exec_desc = -"Usage: ExecIF (<expr>|<app>|<data>)\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.\n"; -static char *exec_synopsis = "Conditional exec"; - static char *start_app = "While"; static char *start_desc = "Usage: While(<expr>)\n" @@ -87,46 +79,6 @@ static char *tdesc = "While Loops and Conditional Execution"; LOCAL_USER_DECL; -static int execif_exec(struct ast_channel *chan, void *data) { - int res=0; - struct localuser *u; - char *myapp = NULL; - char *mydata = NULL; - char *expr = NULL; - struct ast_app *app = NULL; - - LOCAL_USER_ADD(u); - - if (!(expr = ast_strdupa(data))) { - LOCAL_USER_REMOVE(u); - return -1; - } - - if ((myapp = strchr(expr,'|'))) { - *myapp = '\0'; - myapp++; - if ((mydata = strchr(myapp,'|'))) { - *mydata = '\0'; - mydata++; - } else - mydata = ""; - - if (pbx_checkcondition(expr)) { - if ((app = pbx_findapp(myapp))) { - res = pbx_exec(chan, app, mydata); - } else { - ast_log(LOG_WARNING, "Count not find application! (%s)\n", myapp); - res = -1; - } - } - } else { - ast_log(LOG_ERROR,"Invalid Syntax.\n"); - res = -1; - } - - ALL_DONE(u,res); -} - #define VAR_SIZE 64 @@ -364,7 +316,6 @@ static int unload_module(void *mod) int res; res = ast_unregister_application(start_app); - res |= ast_unregister_application(exec_app); res |= ast_unregister_application(stop_app); res |= ast_unregister_application(exit_app); res |= ast_unregister_application(continue_app); @@ -379,7 +330,6 @@ static int load_module(void *mod) int res; res = ast_register_application(start_app, while_start_exec, start_synopsis, start_desc); - res |= ast_register_application(exec_app, execif_exec, exec_synopsis, exec_desc); res |= ast_register_application(stop_app, while_end_exec, stop_synopsis, stop_desc); res |= ast_register_application(exit_app, while_exit_exec, exit_synopsis, exit_desc); res |= ast_register_application(continue_app, while_continue_exec, continue_synopsis, continue_desc); |