aco: Minimize use of regex.

Remove nearly all use of regex from ACO users.  Still remaining:
* app_confbridge has a legitamate use of option name regex.
* ast_sorcery_object_fields_register is implemented with regex, all
  callers use simple prefix based regex.  I haven't decided the best
  way to fix this in both 13/15 and master.

Change-Id: Ib5ed478218d8a661ace4d2eaaea98b59a897974b
This commit is contained in:
Corey Farrell
2017-12-12 13:55:12 -05:00
parent 7413bcbeb5
commit 501f4dcdd8
17 changed files with 124 additions and 73 deletions

View File

@@ -457,11 +457,17 @@ struct agents_cfg {
struct ao2_container *agents;
};
static const char *agent_type_blacklist[] = {
"general",
"agents",
NULL,
};
static struct aco_type agent_type = {
.type = ACO_ITEM,
.name = "agent-id",
.category_match = ACO_BLACKLIST,
.category = "^(general|agents)$",
.category_match = ACO_BLACKLIST_ARRAY,
.category = (const char *)agent_type_blacklist,
.item_alloc = agent_cfg_alloc,
.item_find = agent_cfg_find,
.item_offset = offsetof(struct agents_cfg, agents),
@@ -473,8 +479,8 @@ static struct aco_type *agent_types[] = ACO_TYPES(&agent_type);
static struct aco_type general_type = {
.type = ACO_GLOBAL,
.name = "global",
.category_match = ACO_WHITELIST,
.category = "^general$",
.category_match = ACO_WHITELIST_EXACT,
.category = "general",
};
static struct aco_file agents_conf = {

View File

@@ -244,8 +244,8 @@ static struct aco_type global_option = {
.type = ACO_GLOBAL,
.name = "globals",
.item_offset = offsetof(struct skel_config, global),
.category_match = ACO_WHITELIST,
.category = "^general$",
.category_match = ACO_WHITELIST_EXACT,
.category = "general",
};
struct aco_type *global_options[] = ACO_TYPES(&global_option);
@@ -255,18 +255,24 @@ static struct aco_type sound_option = {
.type = ACO_GLOBAL,
.name = "sounds",
.item_offset = offsetof(struct skel_config, global),
.category_match = ACO_WHITELIST,
.category = "^sounds$",
.category_match = ACO_WHITELIST_EXACT,
.category = "sounds",
};
struct aco_type *sound_options[] = ACO_TYPES(&sound_option);
static const char *level_categories[] = {
"general",
"sounds",
NULL,
};
/*! \brief An aco_type structure to link the everything but the "general" and "sounds" categories to the skel_level type */
static struct aco_type level_option = {
.type = ACO_ITEM,
.name = "level",
.category_match = ACO_BLACKLIST,
.category = "^(general|sounds)$",
.category_match = ACO_BLACKLIST_ARRAY,
.category = (const char *)level_categories,
.item_alloc = skel_level_alloc,
.item_find = skel_level_find,
.item_offset = offsetof(struct skel_config, levels),

View File

@@ -377,7 +377,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
regardless if this limit is reached or not.
</para></description>
</configOption>
<configOption name="^sound_">
<configOption name="sound_">
<synopsis>Override the various conference bridge sound files</synopsis>
<description><para>
All sounds in the conference are customizable using the bridge profile options below.
@@ -592,8 +592,8 @@ static void *bridge_profile_find(struct ao2_container *container, const char *ca
static struct aco_type bridge_type = {
.type = ACO_ITEM,
.name = "bridge_profile",
.category_match = ACO_BLACKLIST,
.category = "^general$",
.category_match = ACO_BLACKLIST_EXACT,
.category = "general",
.matchfield = "type",
.matchvalue = "bridge",
.item_alloc = bridge_profile_alloc,
@@ -629,8 +629,8 @@ static void *user_profile_find(struct ao2_container *container, const char *cate
static struct aco_type user_type = {
.type = ACO_ITEM,
.name = "user_profile",
.category_match = ACO_BLACKLIST,
.category = "^general$",
.category_match = ACO_BLACKLIST_EXACT,
.category = "general",
.matchfield = "type",
.matchvalue = "user",
.item_alloc = user_profile_alloc,
@@ -660,8 +660,8 @@ static void *menu_find(struct ao2_container *container, const char *category)
static struct aco_type menu_type = {
.type = ACO_ITEM,
.name = "menu",
.category_match = ACO_BLACKLIST,
.category = "^general$",
.category_match = ACO_BLACKLIST_EXACT,
.category = "general",
.matchfield = "type",
.matchvalue = "menu",
.item_alloc = menu_alloc,
@@ -678,8 +678,8 @@ static struct aco_type *user_types[] = ACO_TYPES(&user_type);
static struct aco_type general_type = {
.type = ACO_GLOBAL,
.name = "global",
.category_match = ACO_WHITELIST,
.category = "^general$",
.category_match = ACO_WHITELIST_EXACT,
.category = "general",
};
static struct aco_file confbridge_conf = {
@@ -2149,7 +2149,7 @@ int conf_load_config(void)
aco_option_register(&cfg_info, "record_file", ACO_EXACT, bridge_types, NULL, OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, rec_file));
aco_option_register(&cfg_info, "regcontext", ACO_EXACT, bridge_types, NULL, OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, regcontext));
aco_option_register(&cfg_info, "language", ACO_EXACT, bridge_types, "en", OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, language));
aco_option_register_custom(&cfg_info, "^sound_", ACO_REGEX, bridge_types, NULL, sound_option_handler, 0);
aco_option_register_custom(&cfg_info, "sound_", ACO_PREFIX, bridge_types, NULL, sound_option_handler, 0);
/* This option should only be used with the CONFBRIDGE dialplan function */
aco_option_register_custom(&cfg_info, "template", ACO_EXACT, bridge_types, NULL, bridge_template_handler, 0);