issue #5623
authorRussell Bryant <russell@russellbryant.com>
Sun, 6 Nov 2005 18:42:39 +0000 (18:42 +0000)
committerRussell Bryant <russell@russellbryant.com>
Sun, 6 Nov 2005 18:42:39 +0000 (18:42 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6983 65c4cc65-6c06-0410-ace0-fbb531ad65f3

ChangeLog
apps/app_groupcount.c

index 195077a..dac60cc 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@
        * apps/app_chanisavail.c: Make priority jumping optional
        * apps/app_db.c: Add an exit status variable and make priority jumping optional
        * apps/app_enumlookup.c: Make priority jumping optional
+       * apps/app_groupcount.c: Add an exit status variable, make priority jumping optional, and use new args parsing macros
 
 2005-11-05  Kevin P. Fleming  <kpfleming@digium.com>
 
index f47468a..95aa927 100755 (executable)
@@ -140,27 +140,50 @@ static int group_check_exec(struct ast_channel *chan, void *data)
        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 @@ static char *group_set_descrip =
 "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"