Thu Apr 28 2011 17:13:39

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 __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_infoast_module_info = &__mod_info
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 __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]
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;
}

Variable Documentation

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.

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().