Thu Apr 28 2011 16:57:10

Asterisk developer's documentation


func_iconv.c File Reference

Charset conversions. More...

#include "asterisk.h"
#include <ctype.h>
#include <iconv.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_iconv.c:

Go to the source code of this file.

Defines

#define AST_ICONV_CAST   void *

Functions

static void __reg_module (void)
static void __unreg_module (void)
static int iconv_read (struct ast_channel *chan, const char *cmd, char *arguments, char *buf, size_t len)
static int load_module (void)
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 = "Charset conversions" , .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 iconv_function

Detailed Description

Charset conversions.

Author:
Sven Slezak <sunny@mezzo.net>

Definition in file func_iconv.c.


Define Documentation

#define AST_ICONV_CAST   void *

Some systems define the second arg to iconv() as (const char *), while others define it as (char *). Cast it to a (void *) to suppress compiler warnings about it.

Definition at line 75 of file func_iconv.c.

Referenced by iconv_read().


Function Documentation

static void __reg_module ( void  ) [static]

Definition at line 143 of file func_iconv.c.

static void __unreg_module ( void  ) [static]

Definition at line 143 of file func_iconv.c.

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

Definition at line 77 of file func_iconv.c.

References AST_APP_ARG, ast_debug, AST_DECLARE_APP_ARGS, AST_ICONV_CAST, ast_log(), AST_STANDARD_APP_ARGS, ast_strdupa, ast_strlen_zero(), errno, len(), LOG_ERROR, LOG_WARNING, parse(), and text.

{
   AST_DECLARE_APP_ARGS(args,
      AST_APP_ARG(in_charset);
      AST_APP_ARG(out_charset);
      AST_APP_ARG(text);
   );
   iconv_t cd;
   size_t incount, outcount = len;
   char *parse;

   if (ast_strlen_zero(arguments)) {
      ast_log(LOG_WARNING, "Syntax: ICONV(<in-charset>,<out-charset>,<text>) - missing arguments!\n");
      return -1;
   }

   parse = ast_strdupa(arguments);
   AST_STANDARD_APP_ARGS(args, parse);

   if (args.argc < 3) {
      ast_log(LOG_WARNING, "Syntax: ICONV(<in-charset>,<out-charset>,<text>) %d\n", args.argc);
      return -1;
   }

   incount = strlen(args.text);

   ast_debug(1, "Iconv: \"%s\" %s -> %s\n", args.text, args.in_charset, args.out_charset);

   cd = iconv_open(args.out_charset, args.in_charset);

   if (cd == (iconv_t) -1) {
      ast_log(LOG_ERROR, "conversion from '%s' to '%s' not available. type 'iconv -l' in a shell to list the supported charsets.\n", args.in_charset, args.out_charset);
      return -1;
   }

   if (iconv(cd, (AST_ICONV_CAST) &args.text, &incount, &buf, &outcount) == (size_t) -1) {
      if (errno == E2BIG)
         ast_log(LOG_WARNING, "Iconv: output buffer too small.\n");
      else if (errno == EILSEQ)
         ast_log(LOG_WARNING,  "Iconv: illegal character.\n");
      else if (errno == EINVAL)
         ast_log(LOG_WARNING,  "Iconv: incomplete character sequence.\n");
      else
         ast_log(LOG_WARNING,  "Iconv: error %d: %s.\n", errno, strerror(errno));
   }
   iconv_close(cd);

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

Definition at line 138 of file func_iconv.c.

References ast_custom_function_register.

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 = "Charset conversions" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static]

Definition at line 143 of file func_iconv.c.

Definition at line 143 of file func_iconv.c.

Initial value:
 {
   .name = "ICONV",
   .read = iconv_read
}

Definition at line 128 of file func_iconv.c.