From c8309d217df93bc5da4e190ca265108166868577 Mon Sep 17 00:00:00 2001 From: russell Date: Mon, 25 Jul 2005 17:26:59 +0000 Subject: add ability to set or read both callerid name and num in one call to the function This one is for you, Mark :-p git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6188 f38db490-d61c-443f-a65b-d21fe96a405b --- funcs/func_callerid.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/funcs/func_callerid.c b/funcs/func_callerid.c index 128d1c67e..3f8122a44 100755 --- a/funcs/func_callerid.c +++ b/funcs/func_callerid.c @@ -29,23 +29,25 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { - if (strncasecmp("name", data, 4) == 0) { + 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) == 0 || strncasecmp("number", data, 6) == 0) { + } 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) == 0) { + } 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) == 0) { + } 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) == 0) { + } else if (!strncasecmp("rdnis", data, 5)) { if (chan->cid.cid_rdnis) { ast_copy_string(buf, chan->cid.cid_rdnis, len); } @@ -60,19 +62,24 @@ static void callerid_write(struct ast_channel *chan, char *cmd, char *data, cons { if (!value) return; - - if (strncasecmp("name", data, 4) == 0) { + + if (!strncasecmp("all", data, 3)) { + char name[256]; + char num[256]; + if (!ast_callerid_split(value, name, sizeof(name), num, sizeof(num))) + ast_set_callerid(chan, num, name, num); + } else if (!strncasecmp("name", data, 4)) { ast_set_callerid(chan, NULL, value, NULL); - } else if (strncasecmp("num", data, 3) == 0 || strncasecmp("number", data, 6) == 0) { + } else if (!strncasecmp("num", data, 3) || !strncasecmp("number", data, 6)) { ast_set_callerid(chan, value, NULL, NULL); - } else if (strncasecmp("ani", data, 3) == 0) { + } else if (!strncasecmp("ani", data, 3)) { ast_set_callerid(chan, NULL, NULL, value); - } else if (strncasecmp("dnid", data, 4) == 0) { + } else if (!strncasecmp("dnid", data, 4)) { /* do we need to lock chan here? */ if (chan->cid.cid_dnid) free(chan->cid.cid_dnid); chan->cid.cid_dnid = ast_strlen_zero(value) ? NULL : strdup(value); - } else if (strncasecmp("rdnis", data, 5) == 0) { + } else if (!strncasecmp("rdnis", data, 5)) { /* do we need to lock chan here? */ if (chan->cid.cid_rdnis) free(chan->cid.cid_rdnis); @@ -90,7 +97,7 @@ struct ast_custom_function callerid_function = { .synopsis = "Gets or sets Caller*ID data on the channel.", .syntax = "CALLERID(datatype)", .desc = "Gets or sets Caller*ID data on the channel. The allowable datatypes\n" - "are \"name\", \"number\", \"ANI\", \"DNID\", \"RDNIS\".\n", + "are \"all\", \"name\", \"num\", \"ANI\", \"DNID\", \"RDNIS\".\n", .read = callerid_read, .write = callerid_write, }; -- cgit v1.2.3