[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
- Previous message: [Asterisk-cvs] asterisk/redhat asterisk.spec,1.6,1.7
- Next message: [Asterisk-cvs] asterisk/channels chan_agent.c,1.77,1.78 chan_alsa.c,1.23,1.24 chan_h323.c,1.66,1.67 chan_iax.c,1.63,1.64 chan_iax2.c,1.170,1.171 chan_mgcp.c,1.58,1.59 chan_modem.c,1.24,1.25 chan_modem_bestdata.c,1.11,1.12 chan_nbs.c,1.9,1.10 chan_oss.c,1.28,1.29 chan_phone.c,1.31,1.32 chan_sip.c,1.452,1.453 chan_skinny.c,1.50,1.51 chan_vofr.c,1.17,1.18 chan_vpb.c,1.31,1.32 chan_zap.c,1.294,1.295 iax2-provision.c,1.4,1.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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;
}
- Previous message: [Asterisk-cvs] asterisk/redhat asterisk.spec,1.6,1.7
- Next message: [Asterisk-cvs] asterisk/channels chan_agent.c,1.77,1.78 chan_alsa.c,1.23,1.24 chan_h323.c,1.66,1.67 chan_iax.c,1.63,1.64 chan_iax2.c,1.170,1.171 chan_mgcp.c,1.58,1.59 chan_modem.c,1.24,1.25 chan_modem_bestdata.c,1.11,1.12 chan_nbs.c,1.9,1.10 chan_oss.c,1.28,1.29 chan_phone.c,1.31,1.32 chan_sip.c,1.452,1.453 chan_skinny.c,1.50,1.51 chan_vofr.c,1.17,1.18 chan_vpb.c,1.31,1.32 chan_zap.c,1.294,1.295 iax2-provision.c,1.4,1.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the svn-commits
mailing list