Thu Dec 17 17:40:50 2009

Asterisk developer's documentation


func_callerid.c File Reference

Caller ID related dialplan functions. More...

#include "asterisk.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/logger.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
#include "asterisk/options.h"
#include "asterisk/callerid.h"

Go to the source code of this file.

Functions

static void __reg_module (void)
static void __unreg_module (void)
static int callerid_read (struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
static int callerid_write (struct ast_channel *chan, char *cmd, char *data, const char *value)
static int load_module (void)
static int unload_module (void)

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT | AST_MODFLAG_BUILDSUM, .description = "Caller ID related dialplan function" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "361d7bb937402d51e4658efb5b4d76e4" , .load = load_module, .unload = unload_module, }
static const struct ast_module_infoast_module_info = &__mod_info
static struct ast_custom_function callerid_function


Detailed Description

Caller ID related dialplan functions.

Definition in file func_callerid.c.


Function Documentation

static void __reg_module ( void   )  [static]

Definition at line 187 of file func_callerid.c.

static void __unreg_module ( void   )  [static]

Definition at line 187 of file func_callerid.c.

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

Definition at line 41 of file func_callerid.c.

References ast_callerid_split(), ast_channel_lock, ast_channel_unlock, ast_copy_string(), ast_log(), ast_channel::cid, ast_callerid::cid_ani, ast_callerid::cid_dnid, ast_callerid::cid_name, ast_callerid::cid_num, ast_callerid::cid_rdnis, LOG_ERROR, name, and S_OR.

00043 {
00044    int res = -1;
00045    char *opt = data;
00046 
00047    if (!chan)
00048       return -1;
00049 
00050    if (strchr(opt, '|')) {
00051       char name[80], num[80];
00052 
00053       data = strsep(&opt, "|");
00054       ast_callerid_split(opt, name, sizeof(name), num, sizeof(num));
00055 
00056       if (!strncasecmp("all", data, 3)) {
00057          snprintf(buf, len, "\"%s\" <%s>", name, num);
00058          res = 0;
00059       } else if (!strncasecmp("name", data, 4)) {
00060          ast_copy_string(buf, name, len);
00061          res = 0;
00062       } else if (!strncasecmp("num", data, 3) ||
00063             !strncasecmp("number", data, 6)) {
00064 
00065          ast_copy_string(buf, num, len);
00066          res = 0;
00067       } else {
00068          ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
00069       }
00070    } else {
00071       ast_channel_lock(chan);
00072 
00073       if (!strncasecmp("all", data, 3)) {
00074          snprintf(buf, len, "\"%s\" <%s>",
00075              S_OR(chan->cid.cid_name, ""),
00076              S_OR(chan->cid.cid_num, ""));
00077          res = 0;
00078       } else if (!strncasecmp("name", data, 4)) {
00079          if (chan->cid.cid_name) {
00080             ast_copy_string(buf, chan->cid.cid_name, len);
00081             res = 0;
00082          }
00083       } else if (!strncasecmp("num", data, 3)
00084                || !strncasecmp("number", data, 6)) {
00085          if (chan->cid.cid_num) {
00086             ast_copy_string(buf, chan->cid.cid_num, len);
00087             res = 0;
00088          }
00089       } else if (!strncasecmp("ani", data, 3)) {
00090          if (chan->cid.cid_ani) {
00091             ast_copy_string(buf, chan->cid.cid_ani, len);
00092             res = 0;
00093          }
00094       } else if (!strncasecmp("dnid", data, 4)) {
00095          if (chan->cid.cid_dnid) {
00096             ast_copy_string(buf, chan->cid.cid_dnid, len);
00097             res = 0;
00098          }
00099       } else if (!strncasecmp("rdnis", data, 5)) {
00100          if (chan->cid.cid_rdnis) {
00101             ast_copy_string(buf, chan->cid.cid_rdnis, len);
00102             res = 0;
00103          }
00104       } else {
00105          ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
00106       }
00107 
00108       ast_channel_unlock(chan);
00109    }
00110 
00111    return res;
00112 }

static int callerid_write ( struct ast_channel chan,
char *  cmd,
char *  data,
const char *  value 
) [static]

Definition at line 114 of file func_callerid.c.

References ast_callerid_split(), ast_cdr_setcid(), ast_channel_lock, ast_channel_unlock, ast_log(), ast_set_callerid(), ast_strdup, ast_channel::cdr, ast_channel::cid, ast_callerid::cid_dnid, ast_callerid::cid_rdnis, free, LOG_ERROR, and name.

00116 {
00117    if (!value || !chan)
00118       return -1;
00119 
00120    if (!strncasecmp("all", data, 3)) {
00121       char name[256];
00122       char num[256];
00123 
00124       if (!ast_callerid_split(value, name, sizeof(name), num, sizeof(num))) {
00125          ast_set_callerid(chan, num, name, num);
00126          if (chan->cdr)
00127             ast_cdr_setcid(chan->cdr, chan);
00128       }
00129    } else if (!strncasecmp("name", data, 4)) {
00130       ast_set_callerid(chan, NULL, value, NULL);
00131       if (chan->cdr)
00132          ast_cdr_setcid(chan->cdr, chan);
00133    } else if (!strncasecmp("num", data, 3) ||
00134          !strncasecmp("number", data, 6)) {
00135       ast_set_callerid(chan, value, NULL, NULL);
00136       if (chan->cdr)
00137          ast_cdr_setcid(chan->cdr, chan);
00138    } else if (!strncasecmp("ani", data, 3)) {
00139       ast_set_callerid(chan, NULL, NULL, value);
00140       if (chan->cdr)
00141          ast_cdr_setcid(chan->cdr, chan);
00142    } else if (!strncasecmp("dnid", data, 4)) {
00143       ast_channel_lock(chan);
00144       if (chan->cid.cid_dnid)
00145          free(chan->cid.cid_dnid);
00146       chan->cid.cid_dnid = ast_strdup(value);
00147       if (chan->cdr)
00148          ast_cdr_setcid(chan->cdr, chan);
00149       ast_channel_unlock(chan);
00150    } else if (!strncasecmp("rdnis", data, 5)) {
00151       ast_channel_lock(chan);
00152       if (chan->cid.cid_rdnis)
00153          free(chan->cid.cid_rdnis);
00154       chan->cid.cid_rdnis = ast_strdup(value);
00155       if (chan->cdr)
00156          ast_cdr_setcid(chan->cdr, chan);
00157       ast_channel_unlock(chan);
00158    } else {
00159       ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
00160    }
00161 
00162    return 0;
00163 }

static int load_module ( void   )  [static]

Definition at line 182 of file func_callerid.c.

References ast_custom_function_register(), and callerid_function.

00183 {
00184    return ast_custom_function_register(&callerid_function);
00185 }

static int unload_module ( void   )  [static]

Definition at line 177 of file func_callerid.c.

References ast_custom_function_unregister(), and callerid_function.

00178 {
00179    return ast_custom_function_unregister(&callerid_function);
00180 }


Variable Documentation

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT | AST_MODFLAG_BUILDSUM, .description = "Caller ID related dialplan function" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "361d7bb937402d51e4658efb5b4d76e4" , .load = load_module, .unload = unload_module, } [static]

Definition at line 187 of file func_callerid.c.

const struct ast_module_info* ast_module_info = &__mod_info [static]

Definition at line 187 of file func_callerid.c.

struct ast_custom_function callerid_function [static]

Definition at line 165 of file func_callerid.c.

Referenced by load_module(), and unload_module().


Generated on Thu Dec 17 17:40:51 2009 for Asterisk - the Open Source PBX by  doxygen 1.4.7