Asterisk - The Open Source Telephony Project GIT-master-d856a3e
Data Structures | Functions | Variables
res_pjsip_phoneprov_provider.c File Reference

PJSIP Phoneprov Configuration Provider. More...

#include "asterisk.h"
#include <pjsip.h>
#include "asterisk/res_pjsip.h"
#include "asterisk/module.h"
#include "asterisk/sorcery.h"
#include "asterisk/phoneprov.h"
#include "res_pjsip/include/res_pjsip_private.h"
Include dependency graph for res_pjsip_phoneprov_provider.c:

Go to the source code of this file.

Data Structures

struct  phoneprov
 Structure for a phoneprov object. More...
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
static int aco_handler (const struct aco_option *opt, struct ast_variable *var, void *obj)
 Adds a config name/value pair to the phoneprov object. More...
 
static int assign_and_insert (const char *name, const char *value, struct varshead *vars)
 Helper that creates an ast_var_t and inserts it into the list. More...
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int fields_handler (const void *obj, struct ast_variable **fields)
 Converts the phoneprov varlist to an ast_variable list. More...
 
static int load_endpoint (const char *id, const char *endpoint_name, struct varshead *vars, char *port_string)
 
static int load_module (void)
 
static int load_users (void)
 Callback that loads the users from phoneprov sections. More...
 
static void * phoneprov_alloc (const char *name)
 Allocator for phoneprov. More...
 
static void phoneprov_destroy (void *obj)
 Destructor function for phoneprov. More...
 
static int reload_module (void)
 
static int unload_module (void)
 
static void users_apply_handler (struct phoneprov *pp)
 Callback that validates the phoneprov object. More...
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "PJSIP Phoneprov Provider" , .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_EXTENDED, .load = load_module, .reload = reload_module, .unload = unload_module, .load_pri = AST_MODPRI_APP_DEPEND, .requires = "res_pjsip,res_phoneprov", }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct ast_sorcerysorcery
 

Detailed Description

PJSIP Phoneprov Configuration Provider.

Author
George Joseph georg.nosp@m.e.jo.nosp@m.seph@.nosp@m.fair.nosp@m.view5.nosp@m..com

Definition in file res_pjsip_phoneprov_provider.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 420 of file res_pjsip_phoneprov_provider.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 420 of file res_pjsip_phoneprov_provider.c.

◆ aco_handler()

static int aco_handler ( const struct aco_option opt,
struct ast_variable var,
void *  obj 
)
static

Adds a config name/value pair to the phoneprov object.

Definition at line 187 of file res_pjsip_phoneprov_provider.c.

188{
189 struct phoneprov *pp = obj;
190
191 return assign_and_insert(var->name, var->value, pp->vars);
192}
#define var
Definition: ast_expr2f.c:605
static int assign_and_insert(const char *name, const char *value, struct varshead *vars)
Helper that creates an ast_var_t and inserts it into the list.
Structure for a phoneprov object.
struct varshead * vars

References assign_and_insert(), var, and phoneprov::vars.

Referenced by load_module().

◆ assign_and_insert()

static int assign_and_insert ( const char *  name,
const char *  value,
struct varshead vars 
)
static

Helper that creates an ast_var_t and inserts it into the list.

Definition at line 163 of file res_pjsip_phoneprov_provider.c.

164{
165 struct ast_var_t *var;
166
167 if (ast_strlen_zero(name) || !vars) {
168 return -1;
169 }
170
171 /* Just ignore if the value is NULL or empty */
172 if (ast_strlen_zero(value)) {
173 return 0;
174 }
175
177 if (!var) {
178 ast_log(LOG_ERROR, "Could not allocate variable memory for variable.\n");
179 return -1;
180 }
182
183 return 0;
184}
#define ast_log
Definition: astobj2.c:42
static void AST_VAR_LIST_INSERT_TAIL(struct varshead *head, struct ast_var_t *var)
Definition: chanvars.h:51
#define ast_var_assign(name, value)
Definition: chanvars.h:40
static const char name[]
Definition: format_mp3.c:68
#define LOG_ERROR
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
int value
Definition: syslog.c:37

References ast_log, ast_strlen_zero(), ast_var_assign, AST_VAR_LIST_INSERT_TAIL(), LOG_ERROR, name, value, and var.

Referenced by aco_handler(), load_endpoint(), and users_apply_handler().

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 420 of file res_pjsip_phoneprov_provider.c.

◆ fields_handler()

static int fields_handler ( const void *  obj,
struct ast_variable **  fields 
)
static

Converts the phoneprov varlist to an ast_variable list.

Definition at line 195 of file res_pjsip_phoneprov_provider.c.

196{
197 const struct phoneprov *pp = obj;
198 struct ast_var_t *pvar;
199 struct ast_variable *head = NULL;
200 struct ast_variable *tail = NULL;
201 struct ast_variable *var;
202
203 AST_VAR_LIST_TRAVERSE(pp->vars, pvar) {
204 var = ast_variable_new(pvar->name, pvar->value, "");
205 if (!var) {
207 return -1;
208 }
209 if (!head) {
210 head = var;
211 tail = var;
212 continue;
213 }
214 tail->next = var;
215 tail = var;
216 }
217
218 *fields = head;
219
220 return 0;
221}
#define AST_VAR_LIST_TRAVERSE(head, var)
Definition: chanvars.h:49
#define ast_variable_new(name, value, filename)
void ast_variables_destroy(struct ast_variable *var)
Free variable list.
Definition: extconf.c:1262
#define NULL
Definition: resample.c:96
char name[0]
Definition: chanvars.h:31
char * value
Definition: chanvars.h:30
Structure for variables, used for configurations and for channel variables.
struct ast_variable * next

References AST_VAR_LIST_TRAVERSE, ast_variable_new, ast_variables_destroy(), ast_var_t::name, ast_variable::next, NULL, ast_var_t::value, var, and phoneprov::vars.

Referenced by load_module().

◆ load_endpoint()

static int load_endpoint ( const char *  id,
const char *  endpoint_name,
struct varshead vars,
char *  port_string 
)
static

Definition at line 223 of file res_pjsip_phoneprov_provider.c.

225{
226 struct ast_sip_auth *auth;
227 RAII_VAR(struct ast_sip_endpoint *, endpoint, NULL, ao2_cleanup);
228 RAII_VAR(struct ast_sip_transport *, transport, NULL, ao2_cleanup);
229 const char *auth_name;
230
231 *port_string = '\0';
232
233 /* We need to use res_pjsip's sorcery instance instead of our own to
234 * get endpoint and auth.
235 */
236 endpoint = ast_sorcery_retrieve_by_id(sorcery, "endpoint",
237 endpoint_name);
238 if (!endpoint) {
239 ast_log(LOG_ERROR, "phoneprov %s contained invalid endpoint %s.\n", id,
240 endpoint_name);
241 return -1;
242 }
243
244 assign_and_insert("ENDPOINT_ID", endpoint_name, vars);
245 assign_and_insert("TRANSPORT_ID", endpoint->transport, vars);
246
247 if (endpoint->id.self.number.valid && !ast_strlen_zero(endpoint->id.self.number.str)) {
249 endpoint->id.self.number.str, vars);
250 }
251
252 if (endpoint->id.self.name.valid && !ast_strlen_zero(endpoint->id.self.name.str)) {
255 endpoint->id.self.name.str, vars);
256 }
257
258 transport = ast_sorcery_retrieve_by_id(sorcery, "transport",
259 endpoint->transport);
260 if (!transport) {
261 ast_log(LOG_ERROR, "Endpoint %s contained invalid transport %s.\n", endpoint_name,
262 endpoint->transport);
263 return -1;
264 }
265 snprintf(port_string, 6, "%d", pj_sockaddr_get_port(&transport->host));
266
267 if (!AST_VECTOR_SIZE(&endpoint->inbound_auths)) {
268 return 0;
269 }
270 auth_name = AST_VECTOR_GET(&endpoint->inbound_auths, 0);
271
272 auth = ast_sorcery_retrieve_by_id(sorcery, "auth", auth_name);
273 if (!auth) {
274 ast_log(LOG_ERROR, "phoneprov %s contained invalid auth %s.\n", id, auth_name);
275 return -1;
276 }
277
278 assign_and_insert("AUTH_ID", auth_name, vars);
280 auth->auth_user, vars);
282 auth->auth_pass, vars);
283 ao2_ref(auth, -1);
284
285 return 0;
286}
#define ao2_cleanup(obj)
Definition: astobj2.h:1934
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition: astobj2.h:459
const char * ast_phoneprov_std_variable_lookup(enum ast_phoneprov_std_variables var)
Returns the string respresentation of a phoneprov standard variable.
@ AST_PHONEPROV_STD_CALLERID
Definition: phoneprov.h:36
@ AST_PHONEPROV_STD_USERNAME
Definition: phoneprov.h:32
@ AST_PHONEPROV_STD_DISPLAY_NAME
Definition: phoneprov.h:33
@ AST_PHONEPROV_STD_SECRET
Definition: phoneprov.h:34
static struct ast_sorcery * sorcery
void * ast_sorcery_retrieve_by_id(const struct ast_sorcery *sorcery, const char *type, const char *id)
Retrieve an object using its unique identifier.
Definition: sorcery.c:1853
const ast_string_field auth_user
Definition: res_pjsip.h:597
const ast_string_field auth_pass
Definition: res_pjsip.h:597
An entity with which Asterisk communicates.
Definition: res_pjsip.h:961
Transport to bind to.
Definition: res_pjsip.h:221
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
Definition: utils.h:941
#define AST_VECTOR_SIZE(vec)
Get the number of elements in a vector.
Definition: vector.h:609
#define AST_VECTOR_GET(vec, idx)
Get an element from a vector.
Definition: vector.h:680

References ao2_cleanup, ao2_ref, assign_and_insert(), ast_log, AST_PHONEPROV_STD_CALLERID, AST_PHONEPROV_STD_DISPLAY_NAME, AST_PHONEPROV_STD_SECRET, AST_PHONEPROV_STD_USERNAME, ast_phoneprov_std_variable_lookup(), ast_sorcery_retrieve_by_id(), ast_strlen_zero(), AST_VECTOR_GET, AST_VECTOR_SIZE, ast_sip_auth::auth_pass, ast_sip_auth::auth_user, LOG_ERROR, NULL, RAII_VAR, and sorcery.

Referenced by users_apply_handler().

◆ load_module()

static int load_module ( void  )
static

Definition at line 368 of file res_pjsip_phoneprov_provider.c.

369{
371
372 ast_sorcery_apply_config(sorcery, "res_pjsip_phoneprov_provider");
373 ast_sorcery_apply_default(sorcery, "phoneprov", "config",
374 "pjsip.conf,criteria=type=phoneprov");
375
377 NULL);
378
379 ast_sorcery_object_field_register(sorcery, "phoneprov", "type", "", OPT_NOOP_T, 0,
380 0);
383
384 ast_sorcery_load_object(sorcery, "phoneprov");
385
387 ast_log(LOG_ERROR, "Unable to register pjsip phoneprov provider.\n");
389 }
390
392}
#define AST_MODULE
@ OPT_NOOP_T
Type for a default handler that should do nothing.
@ AST_MODULE_LOAD_SUCCESS
Definition: module.h:70
@ AST_MODULE_LOAD_DECLINE
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78
int ast_phoneprov_provider_register(char *provider_name, ast_phoneprov_load_users_cb load_users)
Registers a config provider to phoneprov.
struct ast_sorcery * ast_sip_get_sorcery(void)
Get a pointer to the SIP sorcery structure.
static int aco_handler(const struct aco_option *opt, struct ast_variable *var, void *obj)
Adds a config name/value pair to the phoneprov object.
static int load_users(void)
Callback that loads the users from phoneprov sections.
static void * phoneprov_alloc(const char *name)
Allocator for phoneprov.
static int fields_handler(const void *obj, struct ast_variable **fields)
Converts the phoneprov varlist to an ast_variable list.
int ast_sorcery_object_fields_register(struct ast_sorcery *sorcery, const char *type, const char *regex, aco_option_handler config_handler, sorcery_fields_handler sorcery_handler)
Register a regex for multiple fields within an object.
Definition: sorcery.c:1160
#define ast_sorcery_object_register(sorcery, type, alloc, transform, apply)
Register an object type.
Definition: sorcery.h:837
void ast_sorcery_load_object(const struct ast_sorcery *sorcery, const char *type)
Inform any wizards of a specific object type to load persistent objects.
Definition: sorcery.c:1393
#define ast_sorcery_apply_config(sorcery, name)
Definition: sorcery.h:455
#define ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, flags,...)
Register a field within an object.
Definition: sorcery.h:955
#define ast_sorcery_apply_default(sorcery, type, name, data)
Definition: sorcery.h:476

References aco_handler(), ast_log, AST_MODULE, AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, ast_phoneprov_provider_register(), ast_sip_get_sorcery(), ast_sorcery_apply_config, ast_sorcery_apply_default, ast_sorcery_load_object(), ast_sorcery_object_field_register, ast_sorcery_object_fields_register(), ast_sorcery_object_register, fields_handler(), load_users(), LOG_ERROR, NULL, OPT_NOOP_T, phoneprov_alloc(), and sorcery.

◆ load_users()

static int load_users ( void  )
static

Callback that loads the users from phoneprov sections.

Definition at line 343 of file res_pjsip_phoneprov_provider.c.

344{
345 struct ao2_container *users;
346 struct ao2_iterator i;
347 struct phoneprov *pp;
348
350
353 if (!users) {
354 return 0;
355 }
356
357 i = ao2_iterator_init(users, 0);
358 while ((pp = ao2_iterator_next(&i))) {
360 ao2_ref(pp, -1);
361 }
363 ao2_ref(users, -1);
364
365 return 0;
366}
#define ao2_iterator_next(iter)
Definition: astobj2.h:1911
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags) attribute_warn_unused_result
Create an iterator for a container.
void ao2_iterator_destroy(struct ao2_iterator *iter)
Destroy a container iterator.
struct ao2_container * users
static void users_apply_handler(struct phoneprov *pp)
Callback that validates the phoneprov object.
@ AST_RETRIEVE_FLAG_MULTIPLE
Return all matching objects.
Definition: sorcery.h:120
@ AST_RETRIEVE_FLAG_ALL
Perform no matching, return all objects.
Definition: sorcery.h:123
void ast_sorcery_reload_object(const struct ast_sorcery *sorcery, const char *type)
Inform any wizards of a specific object type to reload persistent objects.
Definition: sorcery.c:1442
void * ast_sorcery_retrieve_by_fields(const struct ast_sorcery *sorcery, const char *type, unsigned int flags, struct ast_variable *fields)
Retrieve an object or multiple objects using specific fields.
Definition: sorcery.c:1897
Generic container type.
When we need to walk through a container, we use an ao2_iterator to keep track of the current positio...
Definition: astobj2.h:1821
list of users found in the config file

References ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ao2_ref, AST_RETRIEVE_FLAG_ALL, AST_RETRIEVE_FLAG_MULTIPLE, ast_sorcery_reload_object(), ast_sorcery_retrieve_by_fields(), NULL, sorcery, users, and users_apply_handler().

Referenced by load_module(), and reload_module().

◆ phoneprov_alloc()

static void * phoneprov_alloc ( const char *  name)
static

Allocator for phoneprov.

Definition at line 148 of file res_pjsip_phoneprov_provider.c.

149{
150 struct phoneprov *pp = ast_sorcery_generic_alloc(sizeof(*pp), phoneprov_destroy);
151
152 if (!pp || !(pp->vars = ast_var_list_create())) {
153 ast_log(LOG_ERROR, "Unable to allocate memory for phoneprov structure %s\n",
154 name);
155 ao2_cleanup(pp);
156 return NULL;
157 }
158
159 return pp;
160}
struct varshead * ast_var_list_create(void)
Definition: chanvars.c:97
static void phoneprov_destroy(void *obj)
Destructor function for phoneprov.
void * ast_sorcery_generic_alloc(size_t size, ao2_destructor_fn destructor)
Allocate a generic sorcery capable object.
Definition: sorcery.c:1728

References ao2_cleanup, ast_log, ast_sorcery_generic_alloc(), ast_var_list_create(), LOG_ERROR, name, NULL, phoneprov_destroy(), and phoneprov::vars.

Referenced by load_module().

◆ phoneprov_destroy()

static void phoneprov_destroy ( void *  obj)
static

Destructor function for phoneprov.

Definition at line 135 of file res_pjsip_phoneprov_provider.c.

136{
137 struct phoneprov *pp = obj;
138 char *mac = ast_var_find(pp->vars, "MAC");
139
140 if (mac) {
142 }
143
145}
void ast_var_list_destroy(struct varshead *head)
Definition: chanvars.c:109
char * ast_var_find(const struct varshead *head, const char *name)
Definition: chanvars.c:85
void ast_phoneprov_delete_extension(char *provider_name, char *macaddress)
Deletes an extension.

References AST_MODULE, ast_phoneprov_delete_extension(), ast_var_find(), ast_var_list_destroy(), and phoneprov::vars.

Referenced by phoneprov_alloc().

◆ reload_module()

static int reload_module ( void  )
static

Definition at line 401 of file res_pjsip_phoneprov_provider.c.

402{
404
406 ast_log(LOG_ERROR, "Unable to register pjsip phoneprov provider.\n");
408 }
409
410 return 0;
411}
void ast_phoneprov_provider_unregister(char *provider_name)
Unegisters a config provider from phoneprov and frees its resources.

References ast_log, AST_MODULE, AST_MODULE_LOAD_DECLINE, ast_phoneprov_provider_register(), ast_phoneprov_provider_unregister(), load_users(), and LOG_ERROR.

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 394 of file res_pjsip_phoneprov_provider.c.

395{
397
398 return 0;
399}

References AST_MODULE, and ast_phoneprov_provider_unregister().

◆ users_apply_handler()

static void users_apply_handler ( struct phoneprov pp)
static

Callback that validates the phoneprov object.

Definition at line 289 of file res_pjsip_phoneprov_provider.c.

290{
291 const char *id = ast_sorcery_object_get_id(pp);
292 const char *endpoint_name;
293 char port_string[6];
294
295 if (!ast_var_find(pp->vars,
297 ast_log(LOG_ERROR, "phoneprov %s must contain a MAC entry.\n", id);
298 return;
299 }
300
301 if (!ast_var_find(pp->vars,
303 ast_log(LOG_ERROR, "phoneprov %s must contain a PROFILE entry.\n", id);
304 return;
305 }
306
307 endpoint_name = ast_var_find(pp->vars, "endpoint");
308 if (endpoint_name) {
309 if (load_endpoint(id, endpoint_name, pp->vars, port_string)) {
310 return;
311 }
312 }
313
314 if (!ast_var_find(pp->vars,
318 pp->vars);
319 }
320
321 if (!ast_var_find(pp->vars,
324 id, pp->vars);
325 }
326
327 if (!ast_var_find(pp->vars,
329 assign_and_insert("SERVER_PORT", S_OR(port_string, "5060"), pp->vars);
330 }
331
332 if (!ast_var_find(pp->vars,
334 ast_log(LOG_ERROR, "phoneprov %s didn't contain a PROFILE entry.\n", id);
335 }
336
338
339 return;
340}
int ast_phoneprov_add_extension(char *provider_name, struct varshead *vars)
Adds an extension.
@ AST_PHONEPROV_STD_SERVER_PORT
Definition: phoneprov.h:41
@ AST_PHONEPROV_STD_MAC
Definition: phoneprov.h:30
@ AST_PHONEPROV_STD_LABEL
Definition: phoneprov.h:35
@ AST_PHONEPROV_STD_PROFILE
Definition: phoneprov.h:31
static int load_endpoint(const char *id, const char *endpoint_name, struct varshead *vars, char *port_string)
const char * ast_sorcery_object_get_id(const void *object)
Get the unique identifier of a sorcery object.
Definition: sorcery.c:2317
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one.
Definition: strings.h:80

References assign_and_insert(), ast_log, AST_MODULE, ast_phoneprov_add_extension(), AST_PHONEPROV_STD_LABEL, AST_PHONEPROV_STD_MAC, AST_PHONEPROV_STD_PROFILE, AST_PHONEPROV_STD_SERVER_PORT, AST_PHONEPROV_STD_USERNAME, ast_phoneprov_std_variable_lookup(), ast_sorcery_object_get_id(), ast_var_find(), load_endpoint(), LOG_ERROR, S_OR, and phoneprov::vars.

Referenced by load_users().

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "PJSIP Phoneprov Provider" , .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_EXTENDED, .load = load_module, .reload = reload_module, .unload = unload_module, .load_pri = AST_MODPRI_APP_DEPEND, .requires = "res_pjsip,res_phoneprov", }
static

Definition at line 420 of file res_pjsip_phoneprov_provider.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 420 of file res_pjsip_phoneprov_provider.c.

◆ sorcery

struct ast_sorcery* sorcery
static

Definition at line 126 of file res_pjsip_phoneprov_provider.c.

Referenced by __ast_sorcery_apply_config(), __ast_sorcery_apply_default(), __ast_sorcery_apply_wizard_mapping(), __ast_sorcery_insert_wizard_mapping(), __ast_sorcery_object_field_register(), __ast_sorcery_object_register(), __ast_sorcery_object_type_insert_wizard(), __ast_sorcery_object_type_remove_wizard(), __ast_sorcery_open(), __ast_sorcery_remove_wizard_mapping(), alloc_and_initialize_sorcery(), apply_list_configuration(), as_config_load(), as_config_reload(), ast_ari_asterisk_delete_object(), ast_ari_asterisk_get_object(), ast_ari_asterisk_update_object(), ast_sip_destroy_sorcery_global(), ast_sip_initialize_sorcery_auth(), ast_sip_initialize_sorcery_domain_alias(), ast_sip_initialize_sorcery_global(), ast_sip_initialize_sorcery_location(), ast_sip_initialize_sorcery_transport(), ast_sorcery_alloc(), ast_sorcery_copy(), ast_sorcery_create(), ast_sorcery_delete(), ast_sorcery_diff(), ast_sorcery_force_reload(), ast_sorcery_force_reload_object(), ast_sorcery_get_module(), ast_sorcery_get_object_type(), ast_sorcery_get_wizard_mapping(), ast_sorcery_get_wizard_mapping_count(), ast_sorcery_instance_observer_add(), ast_sorcery_instance_observer_remove(), ast_sorcery_is_stale(), ast_sorcery_load(), ast_sorcery_load_object(), ast_sorcery_object_fields_register(), ast_sorcery_object_set_congestion_levels(), ast_sorcery_object_set_copy_handler(), ast_sorcery_object_set_diff_handler(), ast_sorcery_object_unregister(), ast_sorcery_objectset_apply(), ast_sorcery_objectset_create2(), ast_sorcery_objectset_json_create(), ast_sorcery_observer_add(), ast_sorcery_observer_remove(), ast_sorcery_ref(), ast_sorcery_reload(), ast_sorcery_reload_object(), ast_sorcery_retrieve_by_fields(), ast_sorcery_retrieve_by_id(), ast_sorcery_retrieve_by_prefix(), ast_sorcery_retrieve_by_regex(), ast_sorcery_update(), AST_TEST_DEFINE(), bucket_file_wizard_create(), bucket_file_wizard_delete(), bucket_file_wizard_is_stale(), bucket_file_wizard_retrieve(), bucket_file_wizard_update(), bucket_http_wizard_retrieve_id(), bucket_wizard_create(), bucket_wizard_delete(), bucket_wizard_is_stale(), bucket_wizard_retrieve(), can_reuse_registration(), create_object(), deinitialize_sorcery(), global_loaded_observer(), handle_aor(), handle_auth(), handle_auths(), handle_endpoint(), handle_export_primitives(), handle_identify(), handle_phoneprov(), handle_registrations(), instance_created_observer(), instance_destroying_observer(), load_endpoint(), load_module(), load_users(), memory_cache_full_update(), memory_cache_populate(), memory_cache_stale_check(), memory_cache_stale_check_object(), memory_cache_stale_update_full(), memory_cache_stale_update_object(), mock_retrieve_id(), object_type_loaded_observer(), object_type_registered_observer(), profile_load(), profile_reload(), return_sorcery_object(), sorcery_astdb_create(), sorcery_astdb_filter_objectset(), sorcery_astdb_retrieve_fields(), sorcery_astdb_retrieve_fields_common(), sorcery_astdb_retrieve_id(), sorcery_astdb_retrieve_multiple(), sorcery_astdb_retrieve_prefix(), sorcery_astdb_retrieve_regex(), sorcery_astdb_update(), sorcery_config_internal_load(), sorcery_config_load(), sorcery_config_reload(), sorcery_config_retrieve_fields(), sorcery_config_retrieve_multiple(), sorcery_config_retrieve_prefix(), sorcery_config_retrieve_regex(), sorcery_destructor(), sorcery_function_read(), sorcery_is_configuration_met(), sorcery_is_explicit_name_met(), sorcery_memory_cache_create(), sorcery_memory_cache_load(), sorcery_memory_cache_retrieve_fields(), sorcery_memory_cache_retrieve_id(), sorcery_memory_cache_retrieve_multiple(), sorcery_memory_cache_retrieve_prefix(), sorcery_memory_cache_retrieve_regex(), sorcery_memory_cached_object_alloc(), sorcery_memory_retrieve_fields(), sorcery_memory_retrieve_multiple(), sorcery_memory_retrieve_prefix(), sorcery_memory_retrieve_regex(), sorcery_realtime_create(), sorcery_realtime_filter_objectset(), sorcery_realtime_retrieve_fields(), sorcery_realtime_retrieve_id(), sorcery_realtime_retrieve_multiple(), sorcery_realtime_retrieve_prefix(), sorcery_realtime_retrieve_regex(), sorcery_realtime_update(), sorcery_reloadable(), sorcery_test_retrieve_id(), sorcery_wizard_load(), stale_cache_update_task_data_alloc(), stale_update_task_data_alloc(), tn_config_load(), tn_config_reload(), transport_apply(), vs_config_load(), vs_config_reload(), and wizard_apply_handler().