Sat Apr 12 07:12:47 2008

Asterisk developer's documentation


func_enum.c File Reference

ENUM Functions. More...

#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/utils.h"
#include "asterisk/lock.h"
#include "asterisk/file.h"
#include "asterisk/logger.h"
#include "asterisk/options.h"
#include "asterisk/enum.h"
#include "asterisk/app.h"

Include dependency graph for func_enum.c:

Go to the source code of this file.

Functions

 AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"ENUM related dialplan functions")
static int function_enum (struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
static int function_txtcidname (struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
static int load_module (void)
static int unload_module (void)

Variables

static struct ast_custom_function enum_function
static char * synopsis = "Syntax: ENUMLOOKUP(number[|Method-type[|options[|record#[|zone-suffix]]]])\n"
static struct ast_custom_function txtcidname_function


Detailed Description

ENUM Functions.

Author:
Mark Spencer <markster@digium.com>

Oleksiy Krivoshey <oleksiyk@gmail.com>

Russell Bryant <russelb@clemson.edu>

Definition in file func_enum.c.


Function Documentation

AST_MODULE_INFO_STANDARD ( ASTERISK_GPL_KEY  ,
"ENUM related dialplan functions"   
)

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

Definition at line 53 of file func_enum.c.

References AST_APP_ARG, AST_DECLARE_APP_ARGS, ast_get_enum(), ast_log(), AST_MAX_EXTENSION, ast_module_user_add, ast_module_user_remove, AST_STANDARD_APP_ARGS, ast_strlen_zero(), LOG_WARNING, s, and ast_channel::zone.

00055 {
00056    AST_DECLARE_APP_ARGS(args,
00057       AST_APP_ARG(number);
00058       AST_APP_ARG(tech);
00059       AST_APP_ARG(options);
00060       AST_APP_ARG(record);
00061       AST_APP_ARG(zone);
00062    );
00063    int res = 0;
00064    char tech[80];
00065    char dest[256] = "", tmp[2] = "", num[AST_MAX_EXTENSION] = "";
00066    struct ast_module_user *u;
00067    char *s, *p;
00068    unsigned int record = 1;
00069 
00070    buf[0] = '\0';
00071 
00072    if (ast_strlen_zero(data)) {
00073       ast_log(LOG_WARNING, synopsis);
00074       return -1;
00075    }
00076 
00077    AST_STANDARD_APP_ARGS(args, data);
00078 
00079    if (args.argc < 1) {
00080       ast_log(LOG_WARNING, synopsis);
00081       return -1;
00082    }
00083 
00084    u = ast_module_user_add(chan);
00085 
00086    ast_copy_string(tech, args.tech ? args.tech : "sip", sizeof(tech));
00087 
00088    if (!args.zone)
00089       args.zone = "e164.arpa";
00090 
00091    if (!args.options)
00092       args.options = "";
00093 
00094    if (args.record)
00095       record = atoi(args.record);
00096 
00097    /* strip any '-' signs from number */
00098    for (s = p = args.number; *s; s++) {
00099       if (*s != '-') {
00100          snprintf(tmp, sizeof(tmp), "%c", *s);
00101          strncat(num, tmp, sizeof(num));
00102       }
00103 
00104    }
00105 
00106    res = ast_get_enum(chan, num, dest, sizeof(dest), tech, sizeof(tech), args.zone,
00107             args.options, record);
00108 
00109    p = strchr(dest, ':');
00110    if (p && strcasecmp(tech, "ALL"))
00111       ast_copy_string(buf, p + 1, len);
00112    else
00113       ast_copy_string(buf, dest, len);
00114 
00115    ast_module_user_remove(u);
00116 
00117    return 0;
00118 }

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

Definition at line 135 of file func_enum.c.

References ast_get_txt(), ast_log(), ast_module_user_add, ast_module_user_remove, ast_strlen_zero(), and LOG_WARNING.

00137 {
00138    int res;
00139    char tech[80];
00140    char txt[256] = "";
00141    char dest[80];
00142    struct ast_module_user *u;
00143 
00144    buf[0] = '\0';
00145 
00146 
00147    if (ast_strlen_zero(data)) {
00148       ast_log(LOG_WARNING, "TXTCIDNAME requires an argument (number)\n");
00149       return -1;
00150    }
00151 
00152    u = ast_module_user_add(chan);
00153 
00154    res = ast_get_txt(chan, data, dest, sizeof(dest), tech, sizeof(tech), txt,
00155            sizeof(txt));
00156 
00157    if (!ast_strlen_zero(txt))
00158       ast_copy_string(buf, txt, len);
00159 
00160    ast_module_user_remove(u);
00161 
00162    return 0;
00163 }

static int load_module ( void   )  [static]

Definition at line 188 of file func_enum.c.

References ast_custom_function_register().

00189 {
00190    int res = 0;
00191 
00192    res |= ast_custom_function_register(&enum_function);
00193    res |= ast_custom_function_register(&txtcidname_function);
00194 
00195    return res;
00196 }

static int unload_module ( void   )  [static]

Definition at line 176 of file func_enum.c.

References ast_custom_function_unregister(), and ast_module_user_hangup_all.

00177 {
00178    int res = 0;
00179 
00180    res |= ast_custom_function_unregister(&enum_function);
00181    res |= ast_custom_function_unregister(&txtcidname_function);
00182 
00183    ast_module_user_hangup_all();
00184 
00185    return res;
00186 }


Variable Documentation

Definition at line 120 of file func_enum.c.

char* synopsis = "Syntax: ENUMLOOKUP(number[|Method-type[|options[|record#[|zone-suffix]]]])\n" [static]

Definition at line 51 of file func_enum.c.

Definition at line 165 of file func_enum.c.


Generated on Sat Apr 12 07:12:47 2008 for Asterisk - the Open Source PBX by  doxygen 1.5.5