[Asterisk-cvs] asterisk/apps app_groupcount.c,1.4,1.5

markster at lists.digium.com markster at lists.digium.com
Fri Jul 16 00:46:14 CDT 2004


Update of /usr/cvsroot/asterisk/apps
In directory localhost.localdomain:/tmp/cvs-serv8388/apps

Modified Files:
	app_groupcount.c 
Log Message:
Allow multiple groups (group categories)


Index: app_groupcount.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_groupcount.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- app_groupcount.c	20 May 2004 16:30:10 -0000	1.4
+++ app_groupcount.c	16 Jul 2004 04:32:17 -0000	1.5
@@ -29,12 +29,12 @@
 static char *app_group_set = "SetGroup";
 static char *app_group_check = "CheckGroup";
 
-static char *group_count_synopsis = "GetGroupCount([groupname])";
-static char *group_set_synopsis = "SetGroup([groupname])";
-static char *group_check_synopsis = "CheckGroup(max)";
+static char *group_count_synopsis = "GetGroupCount([groupname][@category])";
+static char *group_set_synopsis = "SetGroup(groupname[@category])";
+static char *group_check_synopsis = "CheckGroup(max[@category])";
 
 static char *group_count_descrip =
-"GetGroupCount([group])\n"
+"GetGroupCount([group][@category])\n"
 "  Calculates the group count for the specified group, or uses\n"
 "the current channel's group if not specifed (and non-empty).\n"
 "Stores result in GROUPCOUNT.  Always returns 0.\n";
@@ -56,7 +56,9 @@
 
 LOCAL_USER_DECL;
 
-static int group_get_count(char *group)
+#define DEFAULT_CATEGORY "GROUP"
+
+static int group_get_count(char *group, char *category)
 {
 	struct ast_channel *chan;
 	int count = 0;
@@ -64,7 +66,7 @@
 	if (group && !ast_strlen_zero(group)) {
 		chan = ast_channel_walk_locked(NULL);
 		while(chan) {
-			test = pbx_builtin_getvar_helper(chan, "GROUP");
+			test = pbx_builtin_getvar_helper(chan, category);
 			if (test && !strcasecmp(test, group))
 				count++;
 			ast_mutex_unlock(&chan->lock);
@@ -80,17 +82,31 @@
 	int count;
 	struct localuser *u;
 	char *group=NULL;
-	char ret[80];
+	char *cat = NULL;
+	char ret[80]="";
+	char tmp[256]="";
 
 	LOCAL_USER_ADD(u);
 
 	/* Check and parse arguments */
 	if (data && !ast_strlen_zero(data)) {
-		group = (char *)data;
-	} else {
-		group = pbx_builtin_getvar_helper(chan, "GROUP");
+		strncpy(tmp, data, sizeof(tmp) - 1);
+		group = tmp;
+		cat = strchr(tmp, '@');
+		if (cat) {
+			*cat = '\0';
+			cat++;
+		}
 	}
-	count = group_get_count(group);
+	if (cat)
+		snprintf(ret, sizeof(ret), "GROUP_%s", cat);
+	else
+		strncpy(ret, DEFAULT_CATEGORY, sizeof(ret) - 1);
+
+	if (!group || ast_strlen_zero(group)) {
+		group = pbx_builtin_getvar_helper(chan, ret);
+	}
+	count = group_get_count(group, ret);
 	snprintf(ret, sizeof(ret), "%d", count);
 	pbx_builtin_setvar_helper(chan, "GROUPCOUNT", ret);
 	LOCAL_USER_REMOVE(u);
@@ -101,13 +117,31 @@
 {
 	int res=0;
 	struct localuser *u;
+	char ret[80] = "";
+	char tmp[256] = "";
+	char *cat=NULL, *group=NULL;
 
 	LOCAL_USER_ADD(u);
+
 	/* Check and parse arguments */
 	if (data && !ast_strlen_zero(data)) {
-		pbx_builtin_setvar_helper(chan, "GROUP", (char *)data);
+		strncpy(tmp, data, sizeof(tmp) - 1);
+		group = tmp;
+		cat = strchr(tmp, '@');
+		if (cat) {
+			*cat = '\0';
+			cat++;
+		}
+	}
+	if (cat)
+		snprintf(ret, sizeof(ret), "GROUP_%s", cat);
+	else
+		strncpy(ret, DEFAULT_CATEGORY, sizeof(ret) - 1);
+
+	if (group && !ast_strlen_zero(group)) {
+		pbx_builtin_setvar_helper(chan, ret, group);
 	} else
-		ast_log(LOG_WARNING, "GroupSet requires an argument (group name)\n");
+		ast_log(LOG_WARNING, "SetGroup requires an argument (group name)\n");
 
 	LOCAL_USER_REMOVE(u);
 	return res;
@@ -118,19 +152,37 @@
 	int res=0;
 	int max, count;
 	struct localuser *u;
+	char ret[80] = "";
+	char tmp[256] = "";
+	char *cat, *group;
 
 	LOCAL_USER_ADD(u);
 
-	if (data && (sscanf((char *)data, "%i", &max) == 1) && (max > -1)) {	
-		count = group_get_count(pbx_builtin_getvar_helper(chan, "GROUP"));
-		if (count > max) {
-			if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->callerid))
-				chan->priority += 100;
-			else
-				res = -1;
+	if (data && !ast_strlen_zero(data)) {
+		strncpy(tmp, data, sizeof(tmp) - 1);
+		group = tmp;
+		cat = strchr(tmp, '@');
+		if (cat) {
+			*cat = '\0';
+			cat++;
 		}
+	 	if ((sscanf((char *)tmp, "%i", &max) == 1) && (max > -1)) {
+			if (cat)
+				snprintf(ret, sizeof(ret), "GROUP_%s", cat);
+			else
+				strncpy(ret, DEFAULT_CATEGORY, sizeof(ret) - 1);
+			
+			count = group_get_count(pbx_builtin_getvar_helper(chan, ret), ret);
+			if (count > max) {
+				if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->callerid))
+					chan->priority += 100;
+				else
+					res = -1;
+			}
+		} else
+			ast_log(LOG_WARNING, "CheckGroup requires a positive integer argument (max)\n");
 	} else
-		ast_log(LOG_WARNING, "GroupCheck requires a positive integer argument (max)\n");
+		ast_log(LOG_WARNING, "CheckGroup requires an argument(max)\n");
 	LOCAL_USER_REMOVE(u);
 	return res;
 }




More information about the svn-commits mailing list