diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-12-23 21:03:25 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-12-23 21:03:25 +0000 |
commit | e19e560da2cd5e8bbfe03afc6bb360ac764357d1 (patch) | |
tree | 71826c3f0b0f64d2e17e9080575c05ce0d211bc6 /funcs/func_callerid.c | |
parent | 9b9d26173e3c9287114bb8d8866b2628b600b9dc (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.c | 69 |
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, }; |