[Asterisk-cvs] asterisk/apps app_system.c,1.15,1.16
kpfleming
kpfleming
Wed Sep 7 14:52:34 CDT 2005
Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv30408/apps
Modified Files:
app_system.c
Log Message:
add status variable output to System() app (issue #5121)
Index: app_system.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_system.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- app_system.c 6 Jun 2005 22:39:32 -0000 1.15
+++ app_system.c 7 Sep 2005 18:52:54 -0000 1.16
@@ -28,6 +28,7 @@
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/app.h"
+#include "asterisk/options.h"
static char *tdesc = "Generic System() application";
@@ -39,16 +40,30 @@
static char *synopsis2 = "Try executing a system command";
+static char *chanvar = "SYSTEMSTATUS";
+
static char *descrip =
" System(command): Executes a command by using system(). Returns -1 on\n"
-"failure to execute the specified command. If the command itself executes\n"
-"but is in error, and if there exists a priority n + 101, where 'n' is the\n"
-"priority of the current instance, then the channel will be setup to\n"
-"continue at that priority level. Otherwise, System returns 0.\n";
+"failure to execute the specified command. \n"
+"Result of execution is returned in the SYSTEMSTATUS channel variable:\n"
+" FAILURE Could not execute the specified command\n"
+" SUCCESS Specified command successfully executed\n"
+"\n"
+"Old behaviour:\n"
+"If the command itself executes but is in error, and if there exists\n"
+"a priority n + 101, where 'n' is the priority of the current instance,\n"
+"then the channel will be setup to continue at that priority level.\n"
+" Otherwise, System returns 0.\n";
static char *descrip2 =
" TrySystem(command): Executes a command by using system(). Returns 0\n"
-"on any situation. If the command itself executes but is in error, and if\n"
+"on any situation.\n"
+"Result of execution is returned in the SYSTEMSTATUS channel variable:\n"
+" FAILURE Could not execute the specified command\n"
+" SUCCESS Specified command successfully executed\n"
+" APPERROR Specified command successfully executed, but returned error code\n"
+"\n"
+"Old behaviour:\nIf the command itself executes but is in error, and if\n"
"there exists a priority n + 101, where 'n' is the priority of the current\n"
"instance, then the channel will be setup to continue at that\n"
"priority level. Otherwise, System returns 0.\n";
@@ -63,24 +78,34 @@
struct localuser *u;
if (!data) {
ast_log(LOG_WARNING, "System requires an argument(command)\n");
+ pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
return failmode;
}
LOCAL_USER_ADD(u);
+
/* Do our thing here */
res = ast_safe_system((char *)data);
if ((res < 0) && (errno != ECHILD)) {
ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
+ pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
res = failmode;
} else if (res == 127) {
ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
+ pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
res = failmode;
} else {
- if (res < 0)
+ if (res < 0)
res = 0;
- if (res && ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->cid.cid_num))
- chan->priority+=100;
+ if (option_priority_jumping && res)
+ ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
+
+ if (res != 0)
+ pbx_builtin_setvar_helper(chan, chanvar, "APPERROR");
+ else
+ pbx_builtin_setvar_helper(chan, chanvar, "SUCCESS");
res = 0;
- }
+ }
+
LOCAL_USER_REMOVE(u);
return res;
}
More information about the svn-commits
mailing list