[Asterisk-cvs] asterisk/apps app_groupcount.c,1.26,1.27
russell
russell
Sun Nov 6 13:51:25 CST 2005
Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv4079/apps
Modified Files:
app_groupcount.c
Log Message:
issue #5623
Index: app_groupcount.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_groupcount.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- app_groupcount.c 6 Nov 2005 15:09:46 -0000 1.26
+++ app_groupcount.c 6 Nov 2005 18:42:39 -0000 1.27
@@ -140,27 +140,50 @@
char limit[80]="";
char category[80]="";
static int deprecation_warning = 0;
+ char *parse;
+ int priority_jump = 0;
+ AST_DECLARE_APP_ARGS(args,
+ AST_APP_ARG(max);
+ AST_APP_ARG(options);
+ );
+
+ LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "The CheckGroup application has been deprecated, please use a combination of the GotoIf application and the GROUP_COUNT() function.\n");
deprecation_warning = 1;
}
- if (ast_strlen_zero(data)) {
- ast_log(LOG_WARNING, "CheckGroup requires an argument(max[@category])\n");
- return res;
+ if (!(parse = ast_strdupa(data))) {
+ ast_log(LOG_WARNING, "Memory Error!\n");
+ LOCAL_USER_REMOVE(u);
+ return -1;
}
- LOCAL_USER_ADD(u);
+ AST_STANDARD_APP_ARGS(args, parse);
- ast_app_group_split_group(data, limit, sizeof(limit), category, sizeof(category));
+ if (args.options) {
+ if (strchr(args.options, 'j'))
+ priority_jump = 1;
+ }
+
+ if (ast_strlen_zero(args.max)) {
+ ast_log(LOG_WARNING, "CheckGroup requires an argument(max[@category][|options])\n");
+ return res;
+ }
+
+ ast_app_group_split_group(args.max, limit, sizeof(limit), category, sizeof(category));
if ((sscanf(limit, "%d", &max) == 1) && (max > -1)) {
count = ast_app_group_get_count(pbx_builtin_getvar_helper(chan, category), category);
if (count > max) {
- if (!ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101))
- res = -1;
- }
+ pbx_builtin_setvar_helper(chan, "CHECKGROUPSTATUS", "OVERMAX");
+ if (priority_jump || option_priority_jumping) {
+ if (!ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101))
+ res = -1;
+ }
+ } else
+ pbx_builtin_setvar_helper(chan, "CHECKGROUPSTATUS", "OK");
} else
ast_log(LOG_WARNING, "CheckGroup requires a positive integer argument (max)\n");
@@ -243,12 +266,18 @@
"Set(GROUP=group). Always returns 0.\n";
static char *group_check_descrip =
-"Usage: CheckGroup(max[@category])\n"
+"Usage: CheckGroup(max[@category][|options])\n"
" Checks that the current number of total channels in the\n"
"current channel's group does not exceed 'max'. If the number\n"
-"does not exceed 'max', we continue to the next step. If the\n"
-"number does in fact exceed max, if priority n+101 exists, then\n"
-"execution continues at that step, otherwise -1 is returned.\n";
+"does not exceed 'max', we continue to the next step. \n"
+" The option string may contain zero of the following character:\n"
+" 'j' -- jump to n+101 priority if the number does in fact exceed max,\n"
+" and priority n+101 exists. Execuation then continues at that\n"
+" step, otherwise -1 is returned.\n"
+" This application sets the following channel variable upon successful completion:\n"
+" CHECKGROUPSTATUS The status of the check that the current channel's\n"
+" group does not exceed 'max'. It's value is one of\n"
+" OK | OVERMAX \n";
static char *group_match_count_descrip =
"Usage: GetGroupMatchCount(groupmatch[@category])\n"
More information about the svn-commits
mailing list