add GROUP_COUNT and GROU_MATCH_COUNT functions, deprecate GroupCount and GroupMatchCount apps, remove GROUPCOUNT variable from README.variables (bug #4133, with doc update)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5568 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.2-netsec
Kevin P. Fleming 20 years ago
parent b9bda6aa41
commit 2be3c7ab57

@ -17,6 +17,7 @@
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
#include <regex.h> #include <regex.h>
#include "asterisk/file.h" #include "asterisk/file.h"
#include "asterisk/logger.h" #include "asterisk/logger.h"
#include "asterisk/options.h" #include "asterisk/options.h"
@ -31,6 +32,70 @@ STANDARD_LOCAL_USER;
LOCAL_USER_DECL; LOCAL_USER_DECL;
static int deprecation_warning = 0;
static char *group_count_function_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
int count;
struct localuser *u;
char group[80] = "";
char category[80] = "";
char *grp;
LOCAL_USER_ADD(u);
ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category));
if (ast_strlen_zero(group)) {
grp = pbx_builtin_getvar_helper(chan, category);
strncpy(group, grp, sizeof(group) - 1);
}
count = ast_app_group_get_count(group, category);
snprintf(buf, len, "%d", count);
LOCAL_USER_REMOVE(u);
return buf;
}
static struct ast_custom_function_obj group_count_function_obj = {
.name = "GROUP_COUNT",
.desc = "Calculates the group count for the specified group, or uses the current channel's group if not specifed (and non-empty).",
.syntax = "GROUP_COUNT([groupname][@category])",
.read = group_count_function_read,
.write = NULL,
};
static char *group_match_count_function_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
{
int count;
struct localuser *u;
char group[80] = "";
char category[80] = "";
LOCAL_USER_ADD(u);
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(buf, len, "%d", count);
}
LOCAL_USER_REMOVE(u);
return buf;
}
static struct ast_custom_function_obj group_match_count_function_obj = {
.name = "GROUP_MATCH_COUNT",
.desc = "Calculates the group count for all groups that match the specified pattern. Uses standard regular expression matching (see regex(7)).",
.syntax = "GROUP_MATCH_COUNT(groupmatch[@category])",
.read = group_match_count_function_read,
.write = NULL,
};
static int group_count_exec(struct ast_channel *chan, void *data) static int group_count_exec(struct ast_channel *chan, void *data)
{ {
int res = 0; int res = 0;
@ -43,6 +108,11 @@ static int group_count_exec(struct ast_channel *chan, void *data)
LOCAL_USER_ADD(u); LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "The GetGroupCount and GetGroupMatchCount applications have been deprecated, please use the GROUP_COUNT and GROUP_MATCH_COUNT functions.\n");
deprecation_warning = 1;
}
ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category)); ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category));
if (ast_strlen_zero(group)) { if (ast_strlen_zero(group)) {
@ -70,6 +140,11 @@ static int group_match_count_exec(struct ast_channel *chan, void *data)
LOCAL_USER_ADD(u); LOCAL_USER_ADD(u);
if (!deprecation_warning) {
ast_log(LOG_WARNING, "The GetGroupCount and GetGroupMatchCount applications have been deprecated, please use the GROUP_COUNT and GROUP_MATCH_COUNT functions.\n");
deprecation_warning = 1;
}
ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category)); ast_app_group_split_group(data, group, sizeof(group), category, sizeof(category));
if (!ast_strlen_zero(group)) { if (!ast_strlen_zero(group)) {
@ -195,7 +270,9 @@ static char *group_count_descrip =
"Usage: GetGroupCount([groupname][@category])\n" "Usage: GetGroupCount([groupname][@category])\n"
" Calculates the group count for the specified group, or uses\n" " Calculates the group count for the specified group, or uses\n"
"the current channel's group if not specifed (and non-empty).\n" "the current channel's group if not specifed (and non-empty).\n"
"Stores result in GROUPCOUNT. Always returns 0.\n"; "Stores result in GROUPCOUNT. Always returns 0.\n"
"This application has been deprecated, please use the function\n"
"GroupCount.\n";
static char *group_set_descrip = static char *group_set_descrip =
"Usage: SetGroup(groupname[@category])\n" "Usage: SetGroup(groupname[@category])\n"
@ -214,7 +291,9 @@ static char *group_match_count_descrip =
"Usage: GetGroupMatchCount(groupmatch[@category])\n" "Usage: GetGroupMatchCount(groupmatch[@category])\n"
" Calculates the group count for all groups that match the specified\n" " Calculates the group count for all groups that match the specified\n"
"pattern. Uses standard regular expression matching (see regex(7)).\n" "pattern. Uses standard regular expression matching (see regex(7)).\n"
"Stores result in GROUPCOUNT. Always returns 0.\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[] = static char show_channels_usage[] =
"Usage: group show channels [pattern]\n" "Usage: group show channels [pattern]\n"
@ -232,6 +311,8 @@ int unload_module(void)
res |= ast_unregister_application(app_group_set); res |= ast_unregister_application(app_group_set);
res |= ast_unregister_application(app_group_check); res |= ast_unregister_application(app_group_check);
res |= ast_unregister_application(app_group_match_count); res |= ast_unregister_application(app_group_match_count);
res |= ast_custom_function_unregister(&group_count_function_obj);
res |= ast_custom_function_unregister(&group_match_count_function_obj);
return res; return res;
} }
@ -242,6 +323,8 @@ int load_module(void)
res |= ast_register_application(app_group_set, group_set_exec, group_set_synopsis, group_set_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_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_register_application(app_group_match_count, group_match_count_exec, group_match_count_synopsis, group_match_count_descrip);
res |= ast_custom_function_register(&group_count_function_obj);
res |= ast_custom_function_register(&group_match_count_function_obj);
ast_cli_register(&cli_show_channels); ast_cli_register(&cli_show_channels);
return res; return res;
} }

@ -359,7 +359,6 @@ ${CURL} * Resulting page content for curl()
${ENUM} * Result of application EnumLookup ${ENUM} * Result of application EnumLookup
${EXITCONTEXT} Context to exit to in IVR menu (app background()) ${EXITCONTEXT} Context to exit to in IVR menu (app background())
or in the RetryDial() application or in the RetryDial() application
${GROUPCOUNT} * Result from groupcount()
${MONITOR} * Set to "TRUE" if the channel is/has been monitored (app monitor()) ${MONITOR} * Set to "TRUE" if the channel is/has been monitored (app monitor())
${MONITOR_EXEC} Application to execute after monitoring a call ${MONITOR_EXEC} Application to execute after monitoring a call
${MONITOR_EXEC_ARGS} Arguments to application ${MONITOR_EXEC_ARGS} Arguments to application

Loading…
Cancel
Save