[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