Thu Apr 28 2011 16:57:10

Asterisk developer's documentation


func_env.c File Reference

Environment related dialplan functions. More...

#include "asterisk.h"
#include <sys/stat.h>
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
Include dependency graph for func_env.c:

Go to the source code of this file.

Functions

static void __reg_module (void)
static void __unreg_module (void)
static int env_read (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
static int env_write (struct ast_channel *chan, const char *cmd, char *data, const char *value)
static int file_read (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
static int load_module (void)
static int stat_read (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
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 = "Environment/filesystem dialplan functions" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, }
static struct ast_module_infoast_module_info = &__mod_info
static struct ast_custom_function env_function
static struct ast_custom_function file_function
static struct ast_custom_function stat_function

Detailed Description

Environment related dialplan functions.

Definition in file func_env.c.


Function Documentation

static void __reg_module ( void  ) [static]

Definition at line 268 of file func_env.c.

static void __unreg_module ( void  ) [static]

Definition at line 268 of file func_env.c.

static int env_read ( struct ast_channel chan,
const char *  cmd,
char *  data,
char *  buf,
size_t  len 
) [static]

Definition at line 90 of file func_env.c.

References ast_copy_string().

{
   char *ret = NULL;

   *buf = '\0';

   if (data)
      ret = getenv(data);

   if (ret)
      ast_copy_string(buf, ret, len);

   return 0;
}
static int env_write ( struct ast_channel chan,
const char *  cmd,
char *  data,
const char *  value 
) [static]

Definition at line 106 of file func_env.c.

References ast_strlen_zero(), setenv(), and unsetenv().

{
   if (!ast_strlen_zero(data)) {
      if (!ast_strlen_zero(value)) {
         setenv(data, value, 1);
      } else {
         unsetenv(data);
      }
   }

   return 0;
}
static int file_read ( struct ast_channel chan,
const char *  cmd,
char *  data,
char *  buf,
size_t  len 
) [static]

Definition at line 163 of file func_env.c.

References AST_APP_ARG, ast_copy_string(), AST_DECLARE_APP_ARGS, ast_free, ast_log(), ast_read_textfile(), AST_STANDARD_APP_ARGS, len(), and LOG_WARNING.

{
   AST_DECLARE_APP_ARGS(args,
      AST_APP_ARG(filename);
      AST_APP_ARG(offset);
      AST_APP_ARG(length);
   );
   int offset = 0, length, res = 0;
   char *contents;
   size_t contents_len;

   AST_STANDARD_APP_ARGS(args, data);
   if (args.argc > 1) {
      offset = atoi(args.offset);
   }

   if (args.argc > 2) {
      /* The +1/-1 in this code section is to accomodate for the terminating NULL. */
      if ((length = atoi(args.length) + 1) > len) {
         ast_log(LOG_WARNING, "Length %d is greater than the max (%d).  Truncating output.\n", length - 1, (int)len - 1);
         length = len;
      }
   } else {
      length = len;
   }

   if (!(contents = ast_read_textfile(args.filename))) {
      return -1;
   }

   do {
      contents_len = strlen(contents);
      if (offset > contents_len) {
         res = -1;
         break;
      }

      if (offset >= 0) {
         if (length < 0) {
            if (contents_len - offset + length < 0) {
               /* Nothing left after trimming */
               res = -1;
               break;
            }
            ast_copy_string(buf, &contents[offset], contents_len + length);
         } else {
            ast_copy_string(buf, &contents[offset], length);
         }
      } else {
         if (offset * -1 > contents_len) {
            ast_log(LOG_WARNING, "Offset is larger than the file size.\n");
            offset = contents_len * -1;
         }
         ast_copy_string(buf, &contents[contents_len + offset], length);
      }
   } while (0);

   ast_free(contents);

   return res;
}
static int load_module ( void  ) [static]

Definition at line 257 of file func_env.c.

References ast_custom_function_register.

static int stat_read ( struct ast_channel chan,
const char *  cmd,
char *  data,
char *  buf,
size_t  len 
) [static]

Definition at line 120 of file func_env.c.

References ast_copy_string(), and strsep().

{
   char *action;
   struct stat s;

   ast_copy_string(buf, "0", len);

   action = strsep(&data, ",");
   if (stat(data, &s)) {
      return 0;
   } else {
      switch (*action) {
      case 'e':
         strcpy(buf, "1");
         break;
      case 's':
         snprintf(buf, len, "%d", (unsigned int) s.st_size);
         break;
      case 'f':
         snprintf(buf, len, "%d", S_ISREG(s.st_mode) ? 1 : 0);
         break;
      case 'd':
         snprintf(buf, len, "%d", S_ISDIR(s.st_mode) ? 1 : 0);
         break;
      case 'M':
         snprintf(buf, len, "%d", (int) s.st_mtime);
         break;
      case 'A':
         snprintf(buf, len, "%d", (int) s.st_mtime);
         break;
      case 'C':
         snprintf(buf, len, "%d", (int) s.st_ctime);
         break;
      case 'm':
         snprintf(buf, len, "%o", (int) s.st_mode);
         break;
      }
   }

   return 0;
}
static int unload_module ( void  ) [static]

Variable Documentation

struct ast_module_info __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Environment/filesystem dialplan functions" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static]

Definition at line 268 of file func_env.c.

Definition at line 268 of file func_env.c.

Initial value:
 {
   .name = "ENV",
   .read = env_read,
   .write = env_write
}

Definition at line 225 of file func_env.c.

Initial value:
 {
   .name = "FILE",
   .read = file_read
   
}

Definition at line 236 of file func_env.c.

Initial value:
 {
   .name = "STAT",
   .read = stat_read
}

Definition at line 231 of file func_env.c.