mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
Merged revisions 61804 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r61804 | file | 2007-04-25 14:52:50 -0400 (Wed, 25 Apr 2007) | 2 lines Merge rewritten group counting support. No more storing data on the variable list of the channels. That was bad, mmmk? (issue #7497 reported by sabbathbh) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@61805 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -39,24 +39,16 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
static int group_count_function_read(struct ast_channel *chan, char *cmd,
|
||||
char *data, char *buf, size_t len)
|
||||
{
|
||||
int count;
|
||||
char group[80] = "";
|
||||
char category[80] = "";
|
||||
const char *grp;
|
||||
int count = -1;
|
||||
char group[80] = "", category[80] = "";
|
||||
|
||||
ast_app_group_split_group(data, group, sizeof(group), category,
|
||||
sizeof(category));
|
||||
|
||||
if (ast_strlen_zero(group)) {
|
||||
if ((grp = pbx_builtin_getvar_helper(chan, category)))
|
||||
ast_copy_string(group, grp, sizeof(group));
|
||||
else
|
||||
ast_log(LOG_NOTICE, "No group could be found for channel '%s'\n",
|
||||
chan->name);
|
||||
}
|
||||
|
||||
count = ast_app_group_get_count(group, category);
|
||||
snprintf(buf, len, "%d", count);
|
||||
if ((count = ast_app_group_get_count(group, category)) == -1)
|
||||
ast_log(LOG_NOTICE, "No group could be found for channel '%s'\n", chan->name);
|
||||
else
|
||||
snprintf(buf, len, "%d", count);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -105,20 +97,26 @@ static struct ast_custom_function group_match_count_function = {
|
||||
static int group_function_read(struct ast_channel *chan, char *cmd,
|
||||
char *data, char *buf, size_t len)
|
||||
{
|
||||
char varname[256];
|
||||
const char *group;
|
||||
|
||||
if (!ast_strlen_zero(data)) {
|
||||
snprintf(varname, sizeof(varname), "%s_%s", GROUP_CATEGORY_PREFIX,
|
||||
data);
|
||||
} else {
|
||||
ast_copy_string(varname, GROUP_CATEGORY_PREFIX, sizeof(varname));
|
||||
struct ast_group_info *gi = NULL;
|
||||
|
||||
ast_app_group_list_lock();
|
||||
|
||||
gi = ast_app_group_list_head();
|
||||
while (gi) {
|
||||
if (gi->chan != chan)
|
||||
continue;
|
||||
if (ast_strlen_zero(data))
|
||||
break;
|
||||
if (!ast_strlen_zero(gi->category) && !strcasecmp(gi->category, data))
|
||||
break;
|
||||
gi = AST_LIST_NEXT(gi, list);
|
||||
}
|
||||
|
||||
group = pbx_builtin_getvar_helper(chan, varname);
|
||||
if (group)
|
||||
ast_copy_string(buf, group, len);
|
||||
|
||||
|
||||
if (gi)
|
||||
ast_copy_string(buf, gi->group, len);
|
||||
|
||||
ast_app_group_list_unlock();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -152,38 +150,36 @@ static struct ast_custom_function group_function = {
|
||||
static int group_list_function_read(struct ast_channel *chan, char *cmd,
|
||||
char *data, char *buf, size_t len)
|
||||
{
|
||||
struct ast_var_t *current;
|
||||
struct varshead *headp;
|
||||
struct ast_group_info *gi = NULL;
|
||||
char tmp1[1024] = "";
|
||||
char tmp2[1024] = "";
|
||||
|
||||
if (!chan)
|
||||
return -1;
|
||||
|
||||
headp = &chan->varshead;
|
||||
AST_LIST_TRAVERSE(headp, current, entries) {
|
||||
if (!strncmp(ast_var_name(current), GROUP_CATEGORY_PREFIX "_", strlen(GROUP_CATEGORY_PREFIX) + 1)) {
|
||||
if (!ast_strlen_zero(tmp1)) {
|
||||
ast_copy_string(tmp2, tmp1, sizeof(tmp2));
|
||||
snprintf(tmp1, sizeof(tmp1), "%s %s@%s", tmp2,
|
||||
ast_var_value(current),
|
||||
(ast_var_name(current) +
|
||||
strlen(GROUP_CATEGORY_PREFIX) + 1));
|
||||
} else {
|
||||
snprintf(tmp1, sizeof(tmp1), "%s@%s", ast_var_value(current),
|
||||
(ast_var_name(current) +
|
||||
strlen(GROUP_CATEGORY_PREFIX) + 1));
|
||||
}
|
||||
} else if (!strcmp(ast_var_name(current), GROUP_CATEGORY_PREFIX)) {
|
||||
if (!ast_strlen_zero(tmp1)) {
|
||||
ast_copy_string(tmp2, tmp1, sizeof(tmp2));
|
||||
snprintf(tmp1, sizeof(tmp1), "%s %s", tmp2,
|
||||
ast_var_value(current));
|
||||
} else {
|
||||
snprintf(tmp1, sizeof(tmp1), "%s", ast_var_value(current));
|
||||
}
|
||||
ast_app_group_list_lock();
|
||||
|
||||
gi = ast_app_group_list_head();
|
||||
while (gi) {
|
||||
if (gi->chan != chan)
|
||||
continue;
|
||||
if (!ast_strlen_zero(tmp1)) {
|
||||
ast_copy_string(tmp2, tmp1, sizeof(tmp2));
|
||||
if (!ast_strlen_zero(gi->category))
|
||||
snprintf(tmp1, sizeof(tmp1), "%s %s@%s", tmp2, gi->group, gi->category);
|
||||
else
|
||||
snprintf(tmp1, sizeof(tmp1), "%s %s", tmp2, gi->group);
|
||||
} else {
|
||||
if (!ast_strlen_zero(gi->category))
|
||||
snprintf(tmp1, sizeof(tmp1), "%s@%s", gi->group, gi->category);
|
||||
else
|
||||
snprintf(tmp1, sizeof(tmp1), "%s", gi->group);
|
||||
}
|
||||
gi = AST_LIST_NEXT(gi, list);
|
||||
}
|
||||
|
||||
ast_app_group_list_unlock();
|
||||
|
||||
ast_copy_string(buf, tmp1, len);
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user