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 | |
| static void | __reg_module (void) |
| static void | __unreg_module (void) |
| AST_THREADSTORAGE_CUSTOM_SCOPE (buf_buf, NULL, ast_free_ptr, static) | |
| static int | load_module (void) |
| static int | system_exec (struct ast_channel *chan, void *data) |
| static int | system_exec_helper (struct ast_channel *chan, void *data, int failmode) |
| static int | trysystem_exec (struct ast_channel *chan, void *data) |
| static int | unload_module (void) |
Variables | |
| static struct ast_module_info __MODULE_INFO_SECTION | __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Generic System() application" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } |
| static char * | app = "System" |
| static char * | app2 = "TrySystem" |
| static struct ast_module_info * | ast_module_info = &__mod_info |
| static char * | chanvar = "SYSTEMSTATUS" |
Execute arbitrary system commands.
Definition in file app_system.c.
| static void __reg_module | ( | void | ) | [static] |
Definition at line 182 of file app_system.c.
| static void __unreg_module | ( | void | ) | [static] |
Definition at line 182 of file app_system.c.
| AST_THREADSTORAGE_CUSTOM_SCOPE | ( | buf_buf | , |
| NULL | , | ||
| ast_free_ptr | , | ||
| static | |||
| ) |
| static int load_module | ( | void | ) | [static] |
Definition at line 172 of file app_system.c.
References ast_register_application_xml, system_exec(), and trysystem_exec().
{
int res;
res = ast_register_application_xml(app2, trysystem_exec);
res |= ast_register_application_xml(app, system_exec);
return res;
}
| static int system_exec | ( | struct ast_channel * | chan, |
| void * | data | ||
| ) | [static] |
Definition at line 152 of file app_system.c.
References system_exec_helper().
Referenced by load_module().
{
return system_exec_helper(chan, data, -1);
}
| static int system_exec_helper | ( | struct ast_channel * | chan, |
| void * | data, | ||
| int | failmode | ||
| ) | [static] |
Definition at line 103 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(), buf, errno, LOG_NOTICE, LOG_WARNING, and pbx_builtin_setvar_helper().
Referenced by system_exec(), and trysystem_exec().
{
int res = 0;
struct ast_str *buf = ast_str_thread_get(&buf_buf, 16);
char *cbuf;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "System requires an argument(command)\n");
pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
return failmode;
}
ast_autoservice_start(chan);
/* Do our thing here */
ast_str_get_encoded_str(&buf, 0, (char *) data);
cbuf = ast_str_buffer(buf);
if (strchr("\"'", cbuf[0]) && cbuf[ast_str_strlen(buf) - 1] == cbuf[0]) {
cbuf[ast_str_strlen(buf) - 1] = '\0';
cbuf++;
ast_log(LOG_NOTICE, "It is not necessary to quote the argument to the System application.\n");
}
res = ast_safe_system(cbuf);
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)
res = 0;
if (res != 0)
pbx_builtin_setvar_helper(chan, chanvar, "APPERROR");
else
pbx_builtin_setvar_helper(chan, chanvar, "SUCCESS");
res = 0;
}
ast_autoservice_stop(chan);
return res;
}
| static int trysystem_exec | ( | struct ast_channel * | chan, |
| void * | data | ||
| ) | [static] |
Definition at line 157 of file app_system.c.
References system_exec_helper().
Referenced by load_module().
{
return system_exec_helper(chan, data, 0);
}
| static int unload_module | ( | void | ) | [static] |
Definition at line 162 of file app_system.c.
References ast_unregister_application().
{
int res;
res = ast_unregister_application(app);
res |= ast_unregister_application(app2);
return res;
}
struct ast_module_info __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Generic System() application" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static] |
Definition at line 182 of file app_system.c.
char* app = "System" [static] |
Definition at line 97 of file app_system.c.
char* app2 = "TrySystem" [static] |
Definition at line 99 of file app_system.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 182 of file app_system.c.
char* chanvar = "SYSTEMSTATUS" [static] |
Definition at line 101 of file app_system.c.
Referenced by function_sippeer(), and load_config().