Fri Nov 12 11:52:10 2010

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"
Include dependency graph for app_system.c:

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, 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 __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .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 = "0901e4e500243c855563a2d78b0c03e4" , .load = load_module, .unload = unload_module, }
static char * app = "System"
static char * app2 = "TrySystem"
static struct ast_module_infoast_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"

Detailed Description

Execute arbitrary system commands.

Author:
Mark Spencer <markster@digium.com>

Definition in file app_system.c.


Function Documentation

static void __init_buf_buf ( void   )  [static]

Definition at line 95 of file app_system.c.

00104 {

static void __reg_module ( void   )  [static]

Definition at line 173 of file app_system.c.

static void __unreg_module ( void   )  [static]

Definition at line 173 of file app_system.c.

static int load_module ( void   )  [static]

Definition at line 163 of file app_system.c.

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

00164 {
00165    int res;
00166 
00167    res = ast_register_application_xml(app2, trysystem_exec);
00168    res |= ast_register_application_xml(app, system_exec);
00169 
00170    return res;
00171 }

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

Definition at line 143 of file app_system.c.

References system_exec_helper().

Referenced by load_module().

00144 {
00145    return system_exec_helper(chan, data, -1);
00146 }

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_thread_get(), ast_strlen_zero(), buf, buf_buf, errno, LOG_WARNING, and pbx_builtin_setvar_helper().

Referenced by system_exec(), and trysystem_exec().

00104 {
00105    int res = 0;
00106    struct ast_str *buf = ast_str_thread_get(&buf_buf, 16);
00107    
00108    if (ast_strlen_zero(data)) {
00109       ast_log(LOG_WARNING, "System requires an argument(command)\n");
00110       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00111       return failmode;
00112    }
00113 
00114    ast_autoservice_start(chan);
00115 
00116    /* Do our thing here */
00117    ast_str_get_encoded_str(&buf, 0, (char *) data);
00118    res = ast_safe_system(ast_str_buffer(buf));
00119 
00120    if ((res < 0) && (errno != ECHILD)) {
00121       ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
00122       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00123       res = failmode;
00124    } else if (res == 127) {
00125       ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
00126       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00127       res = failmode;
00128    } else {
00129       if (res < 0) 
00130          res = 0;
00131       if (res != 0)
00132          pbx_builtin_setvar_helper(chan, chanvar, "APPERROR");
00133       else
00134          pbx_builtin_setvar_helper(chan, chanvar, "SUCCESS");
00135       res = 0;
00136    } 
00137 
00138    ast_autoservice_stop(chan);
00139 
00140    return res;
00141 }

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

Definition at line 148 of file app_system.c.

References system_exec_helper().

Referenced by load_module().

00149 {
00150    return system_exec_helper(chan, data, 0);
00151 }

static int unload_module ( void   )  [static]

Definition at line 153 of file app_system.c.

References ast_unregister_application().

00154 {
00155    int res;
00156 
00157    res = ast_unregister_application(app);
00158    res |= ast_unregister_application(app2);
00159 
00160    return res;
00161 }


Variable Documentation

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .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 = "0901e4e500243c855563a2d78b0c03e4" , .load = load_module, .unload = unload_module, } [static]

Definition at line 173 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.

Definition at line 173 of file app_system.c.

struct ast_threadstorage buf_buf = { .once = PTHREAD_ONCE_INIT , .key_init = __init_buf_buf , .custom_init = NULL , } [static]

Definition at line 95 of file app_system.c.

Referenced by system_exec_helper().

char* chanvar = "SYSTEMSTATUS" [static]

Definition at line 101 of file app_system.c.

Referenced by function_sippeer(), and load_config().


Generated by  doxygen 1.6.2