#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 | __init_buf_buf (void) |
static void | __reg_module (void) |
static void | __unreg_module (void) |
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 struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Generic System() application" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } |
static char * | app = "System" |
static char * | app2 = "TrySystem" |
static struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_threadstorage | buf_buf = { .once = PTHREAD_ONCE_INIT , .key_init = __init_buf_buf , .custom_init = NULL , } |
static char * | chanvar = "SYSTEMSTATUS" |
Definition in file app_system.c.
static void __init_buf_buf | ( | void | ) | [static] |
static void __reg_module | ( | void | ) | [static] |
Definition at line 186 of file app_system.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 186 of file app_system.c.
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(), buf_buf, 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 }
struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Generic System() application" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "ac1f6a56484a8820659555499174e588" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, } [static] |
Definition at line 186 of file app_system.c.
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.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 186 of file app_system.c.
struct ast_threadstorage buf_buf = { .once = PTHREAD_ONCE_INIT , .key_init = __init_buf_buf , .custom_init = NULL , } [static] |
char* chanvar = "SYSTEMSTATUS" [static] |