From 1396ee108a75124e4f62ed2ac7f89dd9d10bce47 Mon Sep 17 00:00:00 2001 From: markster Date: Fri, 7 Jan 2005 05:42:31 +0000 Subject: Add MacroExit application (bug #3045) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4699 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_macro.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'apps/app_macro.c') diff --git a/apps/app_macro.c b/apps/app_macro.c index 4e8a5936e..ec1202dbe 100755 --- a/apps/app_macro.c +++ b/apps/app_macro.c @@ -28,6 +28,9 @@ #define MAX_ARGS 80 +/* special result value used to force macro exit */ +#define MACRO_EXIT_RESULT 1024 + static char *tdesc = "Extension Macros"; static char *descrip = @@ -48,11 +51,20 @@ static char *if_descrip = "Executes macro defined in if is true\n" "(otherwise if provided)\n"; +static char *exit_descrip = +" MacroExit():\n" +"Causes the currently running macro to exit as if it had\n" +"ended normally by running out of priorities to execute.\n" +"If used outside a macro, will likely cause unexpected\n" +"behavior.\n"; + static char *app = "Macro"; static char *if_app = "MacroIf"; +static char *exit_app = "MacroExit"; static char *synopsis = "Macro Implementation"; static char *if_synopsis = "Conditional Macro Implementation"; +static char *exit_synopsis = "Exit From Macro"; STANDARD_LOCAL_USER; @@ -159,6 +171,9 @@ static int macro_exec(struct ast_channel *chan, void *data) break; } switch(res) { + case MACRO_EXIT_RESULT: + res = 0; + goto out; case AST_PBX_KEEPALIVE: if (option_debug) ast_log(LOG_DEBUG, "Spawn extension (%s,%s,%d) exited KEEPALIVE in macro %s on '%s'\n", chan->context, chan->exten, chan->priority, macro, chan->name); @@ -262,6 +277,11 @@ static int macroif_exec(struct ast_channel *chan, void *data) return res; } +static int macro_exit_exec(struct ast_channel *chan, void *data) +{ + return MACRO_EXIT_RESULT; +} + int unload_module(void) { STANDARD_HANGUP_LOCALUSERS; @@ -271,6 +291,7 @@ int unload_module(void) int load_module(void) { + ast_register_application(exit_app, macro_exit_exec, exit_synopsis, exit_descrip); ast_register_application(if_app, macroif_exec, if_synopsis, if_descrip); return ast_register_application(app, macro_exec, synopsis, descrip); } -- cgit v1.2.3