aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_groupcount.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/app_groupcount.c')
-rw-r--r--apps/app_groupcount.c339
1 files changed, 0 insertions, 339 deletions
diff --git a/apps/app_groupcount.c b/apps/app_groupcount.c
deleted file mode 100644
index a85286023..000000000
--- a/apps/app_groupcount.c
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 1999 - 2005, Digium, Inc.
- *
- * Mark Spencer <markster@digium.com>
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE file
- * at the top of the source tree.
- */
-
-/*! \file
- *
- * \brief Group Manipulation Applications
- *
- * \ingroup applications
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <regex.h>
-
-#include "asterisk.h"
-
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
-#include "asterisk/file.h"
-#include "asterisk/logger.h"
-#include "asterisk/options.h"
-#include "asterisk/channel.h"
-#include "asterisk/pbx.h"
-#include "asterisk/module.h"
-#include "asterisk/utils.h"
-#include "asterisk/cli.h"
-#include "asterisk/app.h"
-
-STANDARD_LOCAL_USER;
-
-LOCAL_USER_DECL;
-
-static int group_count_exec(struct ast_channel *chan, void *data)
-{
- int res = 0;
- int count;
- struct localuser *u;
- char group[80] = "";
- char category[80] = "";
- char ret[80] = "";
- static int deprecation_warning = 0;
-
- LOCAL_USER_ADD(u);
-
- if (!deprecation_warning) {
- ast_log(LOG_WARNING, "The GetGroupCount application has been deprecated, please use the GROUP_COUNT function.\n");
- deprecation_warning = 1;
- }
-
- ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category));
-
- if (ast_strlen_zero(group)) {
- const char *grp = pbx_builtin_getvar_helper(chan, category);
- strncpy(group, grp, sizeof(group) - 1);
- }
-
- count = ast_app_group_get_count(group, category);
- snprintf(ret, sizeof(ret), "%d", count);
- pbx_builtin_setvar_helper(chan, "GROUPCOUNT", ret);
-
- LOCAL_USER_REMOVE(u);
-
- return res;
-}
-
-static int group_match_count_exec(struct ast_channel *chan, void *data)
-{
- int res = 0;
- int count;
- struct localuser *u;
- char group[80] = "";
- char category[80] = "";
- char ret[80] = "";
- static int deprecation_warning = 0;
-
- LOCAL_USER_ADD(u);
-
- if (!deprecation_warning) {
- ast_log(LOG_WARNING, "The GetGroupMatchCount application has been deprecated, please use the GROUP_MATCH_COUNT function.\n");
- deprecation_warning = 1;
- }
-
- ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category));
-
- if (!ast_strlen_zero(group)) {
- count = ast_app_group_match_get_count(group, category);
- snprintf(ret, sizeof(ret), "%d", count);
- pbx_builtin_setvar_helper(chan, "GROUPCOUNT", ret);
- }
-
- LOCAL_USER_REMOVE(u);
-
- return res;
-}
-
-static int group_set_exec(struct ast_channel *chan, void *data)
-{
- int res = 0;
- struct localuser *u;
- static int deprecation_warning = 0;
-
- LOCAL_USER_ADD(u);
-
- if (!deprecation_warning) {
- ast_log(LOG_WARNING, "The SetGroup application has been deprecated, please use the GROUP() function.\n");
- deprecation_warning = 1;
- }
-
- if (ast_app_group_set_channel(chan, data))
- ast_log(LOG_WARNING, "SetGroup requires an argument (group name)\n");
-
- LOCAL_USER_REMOVE(u);
- return res;
-}
-
-static int group_check_exec(struct ast_channel *chan, void *data)
-{
- int res = 0;
- int max, count;
- struct localuser *u;
- 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 (!(parse = ast_strdupa(data))) {
- ast_log(LOG_WARNING, "Memory Error!\n");
- LOCAL_USER_REMOVE(u);
- return -1;
- }
-
- AST_STANDARD_APP_ARGS(args, parse);
-
- 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) {
- pbx_builtin_setvar_helper(chan, "CHECKGROUPSTATUS", "OVERMAX");
- if (priority_jump || ast_opt_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");
-
- LOCAL_USER_REMOVE(u);
- return res;
-}
-
-static int group_show_channels(int fd, int argc, char *argv[])
-{
-#define FORMAT_STRING "%-25s %-20s %-20s\n"
-
- struct ast_channel *c = NULL;
- int numchans = 0;
- struct ast_var_t *current;
- struct varshead *headp;
- regex_t regexbuf;
- int havepattern = 0;
-
- if (argc < 3 || argc > 4)
- return RESULT_SHOWUSAGE;
-
- if (argc == 4) {
- if (regcomp(&regexbuf, argv[3], REG_EXTENDED | REG_NOSUB))
- return RESULT_SHOWUSAGE;
- havepattern = 1;
- }
-
- ast_cli(fd, FORMAT_STRING, "Channel", "Group", "Category");
- while ( (c = ast_channel_walk_locked(c)) != NULL) {
- headp=&c->varshead;
- AST_LIST_TRAVERSE(headp,current,entries) {
- if (!strncmp(ast_var_name(current), GROUP_CATEGORY_PREFIX "_", strlen(GROUP_CATEGORY_PREFIX) + 1)) {
- if (!havepattern || !regexec(&regexbuf, ast_var_value(current), 0, NULL, 0)) {
- ast_cli(fd, FORMAT_STRING, c->name, ast_var_value(current),
- (ast_var_name(current) + strlen(GROUP_CATEGORY_PREFIX) + 1));
- numchans++;
- }
- } else if (!strcmp(ast_var_name(current), GROUP_CATEGORY_PREFIX)) {
- if (!havepattern || !regexec(&regexbuf, ast_var_value(current), 0, NULL, 0)) {
- ast_cli(fd, FORMAT_STRING, c->name, ast_var_value(current), "(default)");
- numchans++;
- }
- }
- }
- numchans++;
- ast_mutex_unlock(&c->lock);
- }
-
- if (havepattern)
- regfree(&regexbuf);
-
- ast_cli(fd, "%d active channel%s\n", numchans, (numchans != 1) ? "s" : "");
- return RESULT_SUCCESS;
-#undef FORMAT_STRING
-}
-
-static char *tdesc = "Group Management Routines";
-
-static char *app_group_count = "GetGroupCount";
-static char *app_group_set = "SetGroup";
-static char *app_group_check = "CheckGroup";
-static char *app_group_match_count = "GetGroupMatchCount";
-
-static char *group_count_synopsis = "Get the channel count of a group";
-static char *group_set_synopsis = "Set the channel's group";
-static char *group_check_synopsis = "Check the channel count of a group against a limit";
-static char *group_match_count_synopsis = "Get the channel count of all groups that match a pattern";
-
-static char *group_count_descrip =
-"Usage: GetGroupCount([groupname][@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. \n"
-"This application has been deprecated, please use the function\n"
-"GroupCount.\n";
-
-static char *group_set_descrip =
-"Usage: SetGroup(groupname[@category])\n"
-" Sets the channel group to the specified value. Equivalent to\n"
-"Set(GROUP=group). Always returns 0.\n";
-
-static char *group_check_descrip =
-"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. \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"
-" Calculates the group count for all groups that match the specified\n"
-"pattern. Uses standard regular expression matching (see regex(7)).\n"
-"Stores result in GROUPCOUNT. Always returns 0.\n"
-"This application has been deprecated, please use the function\n"
-"GroupMatchCount.\n";
-
-static char show_channels_usage[] =
-"Usage: group show channels [pattern]\n"
-" Lists all currently active channels with channel group(s) specified.\n Optional regular expression pattern is matched to group names for each channel.\n";
-
-static struct ast_cli_entry cli_show_channels =
- { { "group", "show", "channels", NULL }, group_show_channels, "Show active channels with group(s)", show_channels_usage};
-
-int unload_module(void)
-{
- int res;
-
- res = ast_cli_unregister(&cli_show_channels);
- res |= ast_unregister_application(app_group_count);
- res |= ast_unregister_application(app_group_set);
- res |= ast_unregister_application(app_group_check);
- res |= ast_unregister_application(app_group_match_count);
-
- STANDARD_HANGUP_LOCALUSERS;
-
- return res;
-}
-
-int load_module(void)
-{
- int res;
-
- res = ast_register_application(app_group_count, group_count_exec, group_count_synopsis, group_count_descrip);
- res |= ast_register_application(app_group_set, group_set_exec, group_set_synopsis, group_set_descrip);
- res |= ast_register_application(app_group_check, group_check_exec, group_check_synopsis, group_check_descrip);
- res |= ast_register_application(app_group_match_count, group_match_count_exec, group_match_count_synopsis, group_match_count_descrip);
- res |= ast_cli_register(&cli_show_channels);
-
- return res;
-}
-
-char *description(void)
-{
- return tdesc;
-}
-
-int usecount(void)
-{
- int res;
- STANDARD_USECOUNT(res);
- return res;
-}
-
-char *key()
-{
- return ASTERISK_GPL_KEY;
-}