[asterisk-commits] trunk - r7614 in /trunk/funcs: Makefile
func_callerid.c func_strings.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Fri Dec 23 15:03:26 CST 2005
Author: tilghman
Date: Fri Dec 23 15:03:25 2005
New Revision: 7614
URL: http://svn.digium.com/view/asterisk?rev=7614&view=rev
Log:
Bug 5327 - new function FILTER and optional argument to CALLERID
Modified:
trunk/funcs/Makefile
trunk/funcs/func_callerid.c
trunk/funcs/func_strings.c
Modified: trunk/funcs/Makefile
URL: http://svn.digium.com/view/asterisk/trunk/funcs/Makefile?rev=7614&r1=7613&r2=7614&view=diff
==============================================================================
--- trunk/funcs/Makefile (original)
+++ trunk/funcs/Makefile Fri Dec 23 15:03:25 2005
@@ -37,7 +37,7 @@
FUNC_SOURCES=$(BUILTINS:.o=.c)
-FUNC_STRUCTS=$(shell grep 'struct ast_custom_function' $(FUNC_SOURCES) | awk '{print $$3};')
+FUNC_STRUCTS=$(shell grep 'struct ast_custom_function' $(FUNC_SOURCES) | awk '{print $$3};' | sort)
ifeq (${OSARCH},CYGWIN)
CYGSOLINK=-Wl,--out-implib=lib$@.a -Wl,--export-all-symbols
Modified: trunk/funcs/func_callerid.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_callerid.c?rev=7614&r1=7613&r2=7614&view=diff
==============================================================================
--- trunk/funcs/func_callerid.c (original)
+++ trunk/funcs/func_callerid.c Fri Dec 23 15:03:25 2005
@@ -42,32 +42,50 @@
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 @@
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,
};
Modified: trunk/funcs/func_strings.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_strings.c?rev=7614&r1=7613&r2=7614&view=diff
==============================================================================
--- trunk/funcs/func_strings.c (original)
+++ trunk/funcs/func_strings.c Fri Dec 23 15:03:25 2005
@@ -66,6 +66,44 @@
.synopsis = "Count the fields, with an arbitrary delimiter",
.syntax = "FIELDQTY(<varname>,<delim>)",
.read = function_fieldqty,
+};
+
+static char *builtin_function_filter(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
+{
+ char *allowed, *string, *outbuf=buf;
+
+ string = ast_strdupa(data);
+ if (!string) {
+ ast_log(LOG_ERROR, "Out of memory");
+ return "";
+ }
+
+ allowed = strsep(&string, "|");
+
+ if (!string) {
+ ast_log(LOG_ERROR, "Usage: FILTER(<allowed-chars>,<string>)\n");
+ return "";
+ }
+
+ for ( ; *string && (buf + len - 1 > outbuf); string++) {
+ if (strchr(allowed, *string)) {
+ *outbuf = *string;
+ outbuf++;
+ }
+ }
+ *outbuf = '\0';
+
+ return buf;
+}
+
+#ifndef BUILTIN_FUNC
+static
+#endif
+struct ast_custom_function filter_function = {
+ .name = "FILTER",
+ .synopsis = "Filter the string to include only the allowed characters",
+ .syntax = "FILTER(<allowed-chars>,<string>)",
+ .read = builtin_function_filter,
};
static char *builtin_function_regex(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
More information about the asterisk-commits
mailing list