Mon Aug 31 12:30:17 2015

Asterisk developer's documentation


app_system.c File Reference

Execute arbitrary system commands. More...

#include "asterisk.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/app.h"
#include "asterisk/channel.h"
#include "asterisk/strings.h"
#include "asterisk/threadstorage.h"

Go to the source code of this file.

Functions

 AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"Generic System() application")
 AST_THREADSTORAGE (buf_buf)
static int load_module (void)
static int system_exec (struct ast_channel *chan, const char *data)
static int system_exec_helper (struct ast_channel *chan, const char *data, int failmode)
static int trysystem_exec (struct ast_channel *chan, const char *data)
static int unload_module (void)

Variables

static char * app = "System"
static char * app2 = "TrySystem"
static char * chanvar = "SYSTEMSTATUS"

Detailed Description

Execute arbitrary system commands.

Author:
Mark Spencer <markster@digium.com>

Definition in file app_system.c.


Function Documentation

AST_MODULE_INFO_STANDARD ( ASTERISK_GPL_KEY  ,
"Generic System() application"   
)
AST_THREADSTORAGE ( buf_buf   ) 
static int load_module ( void   )  [static]

Definition at line 176 of file app_system.c.

References ast_register_application_xml, system_exec(), and trysystem_exec().

00177 {
00178    int res;
00179 
00180    res = ast_register_application_xml(app2, trysystem_exec);
00181    res |= ast_register_application_xml(app, system_exec);
00182 
00183    return res;
00184 }

static int system_exec ( struct ast_channel chan,
const char *  data 
) [static]

Definition at line 156 of file app_system.c.

References system_exec_helper().

Referenced by load_module().

00157 {
00158    return system_exec_helper(chan, data, -1);
00159 }

static int system_exec_helper ( struct ast_channel chan,
const char *  data,
int  failmode 
) [static]

Definition at line 107 of file app_system.c.

References ast_autoservice_start(), ast_autoservice_stop(), ast_log(), ast_safe_system(), ast_str_buffer(), ast_str_get_encoded_str(), ast_str_strlen(), ast_str_thread_get(), ast_strlen_zero(), errno, LOG_NOTICE, LOG_WARNING, and pbx_builtin_setvar_helper().

Referenced by system_exec(), and trysystem_exec().

00108 {
00109    int res = 0;
00110    struct ast_str *buf = ast_str_thread_get(&buf_buf, 16);
00111    char *cbuf;
00112 
00113    if (ast_strlen_zero(data)) {
00114       ast_log(LOG_WARNING, "System requires an argument(command)\n");
00115       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00116       return failmode;
00117    }
00118 
00119    ast_autoservice_start(chan);
00120 
00121    /* Do our thing here */
00122    ast_str_get_encoded_str(&buf, 0, (char *) data);
00123    cbuf = ast_str_buffer(buf);
00124 
00125    if (strchr("\"'", cbuf[0]) && cbuf[ast_str_strlen(buf) - 1] == cbuf[0]) {
00126       cbuf[ast_str_strlen(buf) - 1] = '\0';
00127       cbuf++;
00128       ast_log(LOG_NOTICE, "It is not necessary to quote the argument to the System application.\n");
00129    }
00130 
00131    res = ast_safe_system(cbuf);
00132 
00133    if ((res < 0) && (errno != ECHILD)) {
00134       ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
00135       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00136       res = failmode;
00137    } else if (res == 127) {
00138       ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
00139       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00140       res = failmode;
00141    } else {
00142       if (res < 0) 
00143          res = 0;
00144       if (res != 0)
00145          pbx_builtin_setvar_helper(chan, chanvar, "APPERROR");
00146       else
00147          pbx_builtin_setvar_helper(chan, chanvar, "SUCCESS");
00148       res = 0;
00149    } 
00150 
00151    ast_autoservice_stop(chan);
00152 
00153    return res;
00154 }

static int trysystem_exec ( struct ast_channel chan,
const char *  data 
) [static]

Definition at line 161 of file app_system.c.

References system_exec_helper().

Referenced by load_module().

00162 {
00163    return system_exec_helper(chan, data, 0);
00164 }

static int unload_module ( void   )  [static]

Definition at line 166 of file app_system.c.

References ast_unregister_application().

00167 {
00168    int res;
00169 
00170    res = ast_unregister_application(app);
00171    res |= ast_unregister_application(app2);
00172 
00173    return res;
00174 }


Variable Documentation

char* app = "System" [static]

Definition at line 101 of file app_system.c.

char* app2 = "TrySystem" [static]

Definition at line 103 of file app_system.c.

char* chanvar = "SYSTEMSTATUS" [static]

Definition at line 105 of file app_system.c.

Referenced by function_sippeer(), and load_config().


Generated on 31 Aug 2015 for Asterisk - The Open Source Telephony Project by  doxygen 1.6.1