aboutsummaryrefslogtreecommitdiffstats
path: root/funcs/func_callerid.c
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2005-12-23 21:03:25 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2005-12-23 21:03:25 +0000
commite19e560da2cd5e8bbfe03afc6bb360ac764357d1 (patch)
tree71826c3f0b0f64d2e17e9080575c05ce0d211bc6 /funcs/func_callerid.c
parent9b9d26173e3c9287114bb8d8866b2628b600b9dc (diff)
Bug 5327 - new function FILTER and optional argument to CALLERID
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7614 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs/func_callerid.c')
-rw-r--r--funcs/func_callerid.c69
1 files changed, 44 insertions, 25 deletions
diff --git a/funcs/func_callerid.c b/funcs/func_callerid.c
index 264c404dd..fdaaf632d 100644
--- a/funcs/func_callerid.c
+++ b/funcs/func_callerid.c
@@ -42,32 +42,50 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
- if (!strncasecmp("all", data, 3)) {
- snprintf(buf, len, "\"%s\" <%s>", chan->cid.cid_name ? chan->cid.cid_name : "", chan->cid.cid_num ? chan->cid.cid_num : "");
- } else if (!strncasecmp("name", data, 4)) {
- if (chan->cid.cid_name) {
- ast_copy_string(buf, chan->cid.cid_name, len);
- }
- } else if (!strncasecmp("num", data, 3) || !strncasecmp("number", data, 6)) {
- if (chan->cid.cid_num) {
- ast_copy_string(buf, chan->cid.cid_num, len);
- }
- } else if (!strncasecmp("ani", data, 3)) {
- if (chan->cid.cid_ani) {
- ast_copy_string(buf, chan->cid.cid_ani, len);
- }
- } else if (!strncasecmp("dnid", data, 4)) {
- if (chan->cid.cid_dnid) {
- ast_copy_string(buf, chan->cid.cid_dnid, len);
- }
- } else if (!strncasecmp("rdnis", data, 5)) {
- if (chan->cid.cid_rdnis) {
- ast_copy_string(buf, chan->cid.cid_rdnis, len);
+ char *opt = data;
+
+ if (strchr(opt, '|')) {
+ char name[80], num[80];
+
+ data = strsep(&opt, "|");
+ ast_callerid_split(opt, name, sizeof(name), num, sizeof(num));
+
+ if (!strncasecmp("all", data, 3)) {
+ snprintf(buf, len, "\"%s\" <%s>", name, num);
+ } else if (!strncasecmp("name", data, 4)) {
+ ast_copy_string(buf, name, len);
+ } else if (!strncasecmp("num", data, 3) || !strncasecmp("number", data, 6)) {
+ ast_copy_string(buf, num, len);
+ } else {
+ ast_log(LOG_ERROR, "Unknown callerid data type.\n");
}
} else {
- ast_log(LOG_ERROR, "Unknown callerid data type.\n");
+ if (!strncasecmp("all", data, 3)) {
+ snprintf(buf, len, "\"%s\" <%s>", chan->cid.cid_name ? chan->cid.cid_name : "", chan->cid.cid_num ? chan->cid.cid_num : "");
+ } else if (!strncasecmp("name", data, 4)) {
+ if (chan->cid.cid_name) {
+ ast_copy_string(buf, chan->cid.cid_name, len);
+ }
+ } else if (!strncasecmp("num", data, 3) || !strncasecmp("number", data, 6)) {
+ if (chan->cid.cid_num) {
+ ast_copy_string(buf, chan->cid.cid_num, len);
+ }
+ } else if (!strncasecmp("ani", data, 3)) {
+ if (chan->cid.cid_ani) {
+ ast_copy_string(buf, chan->cid.cid_ani, len);
+ }
+ } else if (!strncasecmp("dnid", data, 4)) {
+ if (chan->cid.cid_dnid) {
+ ast_copy_string(buf, chan->cid.cid_dnid, len);
+ }
+ } else if (!strncasecmp("rdnis", data, 5)) {
+ if (chan->cid.cid_rdnis) {
+ ast_copy_string(buf, chan->cid.cid_rdnis, len);
+ }
+ } else {
+ ast_log(LOG_ERROR, "Unknown callerid data type.\n");
+ }
}
-
return buf;
}
@@ -108,9 +126,10 @@ static
struct ast_custom_function callerid_function = {
.name = "CALLERID",
.synopsis = "Gets or sets Caller*ID data on the channel.",
- .syntax = "CALLERID(datatype)",
+ .syntax = "CALLERID(datatype[,<optional-CID>])",
.desc = "Gets or sets Caller*ID data on the channel. The allowable datatypes\n"
- "are \"all\", \"name\", \"num\", \"ANI\", \"DNID\", \"RDNIS\".\n",
+ "are \"all\", \"name\", \"num\", \"ANI\", \"DNID\", \"RDNIS\".\n"
+ "Uses channel callerid by default or optional callerid, if specified.\n",
.read = callerid_read,
.write = callerid_write,
};