mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-29 15:36:13 +00:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user