Asterisk - The Open Source Telephony Project  GIT-master-a24979a
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:614
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) {
206  ast_variables_destroy(head);
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:481
const ast_string_field auth_pass
Definition: res_pjsip.h:481
An entity with which Asterisk communicates.
Definition: res_pjsip.h:854
Transport to bind to.
Definition: res_pjsip.h:187
#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:936
#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 void * phoneprov_alloc(const char *name)
Allocator for phoneprov.
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 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 
349  ast_sorcery_reload_object(sorcery, "phoneprov");
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_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
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
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().

◆ 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.

◆ 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:2312
#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 401 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_object_field_register(), __ast_sorcery_object_register(), __ast_sorcery_object_type_remove_wizard(), __ast_sorcery_open(), alloc_and_initialize_sorcery(), apply_list_configuration(), 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_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_retrieve(), bucket_file_wizard_update(), bucket_http_wizard_retrieve_id(), bucket_wizard_create(), bucket_wizard_delete(), bucket_wizard_retrieve(), can_reuse_registration(), create_object(), deinitialize_sorcery(), global_loaded_observer(), handle_aor(), handle_auth(), handle_auths(), handle_endpoint(), 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(), 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_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(), stir_shaken_certificate_load(), stir_shaken_general_load(), stir_shaken_general_loaded(), stir_shaken_profile_load(), stir_shaken_store_load(), transport_apply(), wizard_apply_handler(), and wizard_mapped_observer().