Asterisk - The Open Source Telephony Project  21.4.1
Functions | Variables
res_sorcery_astdb.c File Reference

Sorcery Astdb Object Wizard. More...

#include "asterisk.h"
#include <regex.h>
#include "asterisk/module.h"
#include "asterisk/sorcery.h"
#include "asterisk/astdb.h"
#include "asterisk/json.h"

Go to the source code of this file.

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int load_module (void)
 
static int make_astdb_prefix_pattern (char *tree, const char *regex)
 
static void sorcery_astdb_close (void *data)
 
static int sorcery_astdb_create (const struct ast_sorcery *sorcery, void *data, void *object)
 
static int sorcery_astdb_delete (const struct ast_sorcery *sorcery, void *data, void *object)
 
static struct ast_variablesorcery_astdb_filter_objectset (struct ast_variable *objectset, const struct ast_sorcery *sorcery, const char *type)
 Internal helper function which returns a filtered objectset. More...
 
static void * sorcery_astdb_open (const char *data)
 
static void * sorcery_astdb_retrieve_fields (const struct ast_sorcery *sorcery, void *data, const char *type, const struct ast_variable *fields)
 
static void * sorcery_astdb_retrieve_fields_common (const struct ast_sorcery *sorcery, void *data, const char *type, const struct ast_variable *fields, struct ao2_container *objects)
 Internal helper function which retrieves an object, or multiple objects, using fields for criteria.
 
static void * sorcery_astdb_retrieve_id (const struct ast_sorcery *sorcery, void *data, const char *type, const char *id)
 
static void sorcery_astdb_retrieve_multiple (const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects, const struct ast_variable *fields)
 
static void sorcery_astdb_retrieve_prefix (const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects, const char *prefix, const size_t prefix_len)
 
static void sorcery_astdb_retrieve_regex (const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects, const char *regex)
 
static int sorcery_astdb_update (const struct ast_sorcery *sorcery, void *data, void *object)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER , .description = "Sorcery Astdb Object Wizard" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_REALTIME_DRIVER, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct ast_sorcery_wizard astdb_object_wizard
 

Detailed Description

Sorcery Astdb Object Wizard.

Author
Joshua Colp jcolp.nosp@m.@dig.nosp@m.ium.c.nosp@m.om

Definition in file res_sorcery_astdb.c.

Function Documentation

static struct ast_variable* sorcery_astdb_filter_objectset ( struct ast_variable objectset,
const struct ast_sorcery sorcery,
const char *  type 
)
static

Internal helper function which returns a filtered objectset.

The following are filtered out of the objectset:

  • Fields that are not registered with sorcery.
Parameters
objectsetObjectset to filter.
sorceryThe sorcery instance that is requesting an objectset.
typeThe object type
Returns
The filtered objectset

Definition at line 93 of file res_sorcery_astdb.c.

References ast_debug, ast_sorcery_get_object_type(), ast_sorcery_is_object_field_registered(), ast_variables_destroy(), ast_sorcery_object_type::name, and ast_variable::next.

Referenced by sorcery_astdb_retrieve_fields_common().

95 {
96  struct ast_variable *previous = NULL, *field = objectset;
97  struct ast_sorcery_object_type *object_type;
98 
99  object_type = ast_sorcery_get_object_type(sorcery, type);
100  if (!object_type) {
101  ast_log(LOG_WARNING, "Unknown sorcery object type %s. Expect errors\n", type);
102  return objectset;
103  }
104 
105  while (field) {
106  struct ast_variable *removed;
107 
108  if (ast_sorcery_is_object_field_registered(object_type, field->name)) {
109  previous = field;
110  field = field->next;
111  continue;
112  }
113 
114  ast_debug(1, "Filtering out astdb field '%s' from retrieval\n", field->name);
115 
116  if (previous) {
117  previous->next = field->next;
118  } else {
119  objectset = field->next;
120  }
121 
122  removed = field;
123  field = field->next;
124  removed->next = NULL;
125 
126  ast_variables_destroy(removed);
127  }
128 
129  ao2_cleanup(object_type);
130 
131  return objectset;
132 }
struct ast_variable * next
void ast_variables_destroy(struct ast_variable *var)
Free variable list.
Definition: extconf.c:1262
Structure for variables, used for configurations and for channel variables.
Structure for registered object type.
Definition: sorcery.c:148
#define ast_debug(level,...)
Log a DEBUG message.
struct aco_type type
Type details.
Definition: sorcery.c:177
struct ast_sorcery_object_type * ast_sorcery_get_object_type(const struct ast_sorcery *sorcery, const char *type)
Get the sorcery object type given a type name.
Definition: sorcery.c:2494
int ast_sorcery_is_object_field_registered(const struct ast_sorcery_object_type *object_type, const char *field_name)
Determine if a particular object field has been registered with sorcery.
Definition: sorcery.c:2514
char name[MAX_OBJECT_TYPE]
Unique name of the object type.
Definition: sorcery.c:150