Asterisk - The Open Source Telephony Project GIT-master-27fb039
Loading...
Searching...
No Matches
Macros | Functions | Variables
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.

Macros

#define AST_ICONV_CAST   void *
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (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 __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Charset conversions" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct ast_custom_function iconv_function
 

Detailed Description

Charset conversions.

Author
Sven Slezak sunny.nosp@m.@mez.nosp@m.zo.ne.nosp@m.t

Definition in file func_iconv.c.

Macro Definition Documentation

◆ AST_ICONV_CAST

#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 77 of file func_iconv.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 146 of file func_iconv.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 146 of file func_iconv.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 146 of file func_iconv.c.

◆ iconv_read()

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

Definition at line 79 of file func_iconv.c.

80{
82 AST_APP_ARG(in_charset);
83 AST_APP_ARG(out_charset);
84 AST_APP_ARG(text);
85 );
86 iconv_t cd;
87 size_t incount, outcount = len - 1;
88 char *parse;
89
90 if (ast_strlen_zero(arguments)) {
91 ast_log(LOG_WARNING, "Syntax: ICONV(<in-charset>,<out-charset>,<text>) - missing arguments!\n");
92 return -1;
93 }
94
95 parse = ast_strdupa(arguments);
97
98 if (args.argc < 3) {
99 ast_log(LOG_WARNING, "Syntax: ICONV(<in-charset>,<out-charset>,<text>) %u\n", args.argc);
100 return -1;
101 }
102
103 incount = strlen(args.text);
104
105 ast_debug(1, "Iconv: \"%s\" %s -> %s\n", args.text, args.in_charset, args.out_charset);
106
107 cd = iconv_open(args.out_charset, args.in_charset);
108
109 if (cd == (iconv_t) -1) {
110 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);
111 return -1;
112 }
113
114 if (iconv(cd, (AST_ICONV_CAST) &args.text, &incount, &buf, &outcount) == (size_t) -1) {
115 if (errno == E2BIG)
116 ast_log(LOG_WARNING, "Iconv: output buffer too small.\n");
117 else if (errno == EILSEQ)
118 ast_log(LOG_WARNING, "Iconv: illegal character.\n");
119 else if (errno == EINVAL)
120 ast_log(LOG_WARNING, "Iconv: incomplete character sequence.\n");
121 else
122 ast_log(LOG_WARNING, "Iconv: error %d: %s.\n", errno, strerror(errno));
123 }
124 *buf = '\0';
125 iconv_close(cd);
126
127 return 0;
128}
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition astmm.h:298
#define ast_log
Definition astobj2.c:42
char buf[BUFSIZE]
Definition eagi_proxy.c:66
#define AST_ICONV_CAST
Definition func_iconv.c:77
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
#define AST_APP_ARG(name)
Define an application argument.
#define AST_DECLARE_APP_ARGS(name, arglist)
Declare a structure to hold an application's arguments.
#define AST_STANDARD_APP_ARGS(args, parse)
Performs the 'standard' argument separation process for an application.
#define ast_debug(level,...)
Log a DEBUG message.
#define LOG_ERROR
#define LOG_WARNING
int errno
static struct @519 args
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition strings.h:65

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

◆ load_module()

static int load_module ( void  )
static

Definition at line 141 of file func_iconv.c.

142{
144}
static struct ast_custom_function iconv_function
Definition func_iconv.c:131
#define ast_custom_function_register(acf)
Register a custom function.
Definition pbx.h:1562

References ast_custom_function_register, and iconv_function.

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 136 of file func_iconv.c.

137{
139}
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.

References ast_custom_function_unregister(), and iconv_function.

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Charset conversions" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
static

Definition at line 146 of file func_iconv.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 146 of file func_iconv.c.

◆ iconv_function

struct ast_custom_function iconv_function
static
Initial value:
= {
.name = "ICONV",
.read = iconv_read
}
static int iconv_read(struct ast_channel *chan, const char *cmd, char *arguments, char *buf, size_t len)
Definition func_iconv.c:79

Definition at line 131 of file func_iconv.c.

131 {
132 .name = "ICONV",
133 .read = iconv_read
134};

Referenced by load_module(), and unload_module().