[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