Sat Aug 6 00:39:37 2011

Asterisk developer's documentation


app_system.c File Reference

Execute arbitrary system commands. More...

#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/app.h"
#include "asterisk/options.h"

Go to the source code of this file.

Functions

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 | AST_MODFLAG_BUILDSUM, .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 = "361d7bb937402d51e4658efb5b4d76e4" , .load = load_module, .unload = unload_module, }
static char * app = "System"
static char * app2 = "TrySystem"
static const struct ast_module_infoast_module_info = &__mod_info
static char * chanvar = "SYSTEMSTATUS"
static char * descrip
static char * descrip2
static char * synopsis = "Execute a system command"
static char * synopsis2 = "Try executing a system command"


Detailed Description

Execute arbitrary system commands.

Author:
Mark Spencer <markster@digium.com>

Definition in file app_system.c.


Function Documentation

static void __reg_module ( void   )  [static]

Definition at line 162 of file app_system.c.

static void __unreg_module ( void   )  [static]

Definition at line 162 of file app_system.c.

static int load_module ( void   )  [static]

Definition at line 152 of file app_system.c.

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

00153 {
00154    int res;
00155 
00156    res = ast_register_application(app2, trysystem_exec, synopsis2, descrip2);
00157    res |= ast_register_application(app, system_exec, synopsis, descrip);
00158 
00159    return res;
00160 }

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

Definition at line 130 of file app_system.c.

References ast_module_user::chan, and system_exec_helper().

Referenced by load_module().

00131 {
00132    return system_exec_helper(chan, data, -1);
00133 }

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

Definition at line 85 of file app_system.c.

References ast_autoservice_start(), ast_autoservice_stop(), ast_goto_if_exists(), ast_log(), ast_module_user_add, ast_module_user_remove, ast_opt_priority_jumping, ast_safe_system(), ast_strlen_zero(), ast_module_user::chan, ast_channel::context, errno, LOG_WARNING, and pbx_builtin_setvar_helper().

Referenced by system_exec(), and trysystem_exec().

00086 {
00087    int res=0;
00088    struct ast_module_user *u;
00089    
00090    if (ast_strlen_zero(data)) {
00091       ast_log(LOG_WARNING, "System requires an argument(command)\n");
00092       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00093       return failmode;
00094    }
00095 
00096    u = ast_module_user_add(chan);
00097 
00098    ast_autoservice_start(chan);
00099 
00100    /* Do our thing here */
00101    res = ast_safe_system((char *)data);
00102    if ((res < 0) && (errno != ECHILD)) {
00103       ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
00104       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00105       res = failmode;
00106    } else if (res == 127) {
00107       ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
00108       pbx_builtin_setvar_helper(chan, chanvar, "FAILURE");
00109       res = failmode;
00110    } else {
00111       if (res < 0) 
00112          res = 0;
00113       if (ast_opt_priority_jumping && res)
00114          ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
00115 
00116       if (res != 0)
00117          pbx_builtin_setvar_helper(chan, chanvar, "APPERROR");
00118       else
00119          pbx_builtin_setvar_helper(chan, chanvar, "SUCCESS");
00120       res = 0;
00121    } 
00122 
00123    ast_autoservice_stop(chan);
00124 
00125    ast_module_user_remove(u);
00126 
00127    return res;
00128 }

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

Definition at line 135 of file app_system.c.

References ast_module_user::chan, and system_exec_helper().

Referenced by load_module().

00136 {
00137    return system_exec_helper(chan, data, 0);
00138 }

static int unload_module ( void   )  [static]

Definition at line 140 of file app_system.c.

References ast_module_user_hangup_all, and ast_unregister_application().

00141 {
00142    int res;
00143 
00144    res = ast_unregister_application(app);
00145    res |= ast_unregister_application(app2);
00146    
00147    ast_module_user_hangup_all();
00148 
00149    return res;
00150 }


Variable Documentation

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

Definition at line 162 of file app_system.c.

char* app = "System" [static]

Definition at line 47 of file app_system.c.

char* app2 = "TrySystem" [static]

Definition at line 49 of file app_system.c.

const struct ast_module_info* ast_module_info = &__mod_info [static]

Definition at line 162 of file app_system.c.

char* chanvar = "SYSTEMSTATUS" [static]

Definition at line 55 of file app_system.c.

char* descrip [static]

Definition at line 57 of file app_system.c.

char* descrip2 [static]

Definition at line 71 of file app_system.c.

char* synopsis = "Execute a system command" [static]

Definition at line 51 of file app_system.c.

char* synopsis2 = "Try executing a system command" [static]

Definition at line 53 of file app_system.c.


Generated on Sat Aug 6 00:39:37 2011 for Asterisk - the Open Source PBX by  doxygen 1.4.7