|
|
@ -48,6 +48,7 @@ static void *sorcery_memory_retrieve_fields(const struct ast_sorcery *sorcery, v
|
|
|
|
static void sorcery_memory_retrieve_multiple(const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects,
|
|
|
|
static void sorcery_memory_retrieve_multiple(const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects,
|
|
|
|
const struct ast_variable *fields);
|
|
|
|
const struct ast_variable *fields);
|
|
|
|
static void sorcery_memory_retrieve_regex(const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects, const char *regex);
|
|
|
|
static void sorcery_memory_retrieve_regex(const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects, const char *regex);
|
|
|
|
|
|
|
|
static void sorcery_memory_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 int sorcery_memory_update(const struct ast_sorcery *sorcery, void *data, void *object);
|
|
|
|
static int sorcery_memory_update(const struct ast_sorcery *sorcery, void *data, void *object);
|
|
|
|
static int sorcery_memory_delete(const struct ast_sorcery *sorcery, void *data, void *object);
|
|
|
|
static int sorcery_memory_delete(const struct ast_sorcery *sorcery, void *data, void *object);
|
|
|
|
static void sorcery_memory_close(void *data);
|
|
|
|
static void sorcery_memory_close(void *data);
|
|
|
@ -60,6 +61,7 @@ static struct ast_sorcery_wizard memory_object_wizard = {
|
|
|
|
.retrieve_fields = sorcery_memory_retrieve_fields,
|
|
|
|
.retrieve_fields = sorcery_memory_retrieve_fields,
|
|
|
|
.retrieve_multiple = sorcery_memory_retrieve_multiple,
|
|
|
|
.retrieve_multiple = sorcery_memory_retrieve_multiple,
|
|
|
|
.retrieve_regex = sorcery_memory_retrieve_regex,
|
|
|
|
.retrieve_regex = sorcery_memory_retrieve_regex,
|
|
|
|
|
|
|
|
.retrieve_prefix = sorcery_memory_retrieve_prefix,
|
|
|
|
.update = sorcery_memory_update,
|
|
|
|
.update = sorcery_memory_update,
|
|
|
|
.delete = sorcery_memory_delete,
|
|
|
|
.delete = sorcery_memory_delete,
|
|
|
|
.close = sorcery_memory_close,
|
|
|
|
.close = sorcery_memory_close,
|
|
|
@ -76,6 +78,12 @@ struct sorcery_memory_fields_cmp_params {
|
|
|
|
/*! \brief Regular expression for checking object id */
|
|
|
|
/*! \brief Regular expression for checking object id */
|
|
|
|
regex_t *regex;
|
|
|
|
regex_t *regex;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! \brief Prefix for matching object id */
|
|
|
|
|
|
|
|
const char *prefix;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! \brief Prefix length in bytes for matching object id */
|
|
|
|
|
|
|
|
const size_t prefix_len;
|
|
|
|
|
|
|
|
|
|
|
|
/*! \brief Optional container to put object into */
|
|
|
|
/*! \brief Optional container to put object into */
|
|
|
|
struct ao2_container *container;
|
|
|
|
struct ao2_container *container;
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -127,6 +135,11 @@ static int sorcery_memory_fields_cmp(void *obj, void *arg, int flags)
|
|
|
|
ao2_link(params->container, obj);
|
|
|
|
ao2_link(params->container, obj);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
} else if (params->prefix) {
|
|
|
|
|
|
|
|
if (!strncmp(params->prefix, ast_sorcery_object_get_id(obj), params->prefix_len)) {
|
|
|
|
|
|
|
|
ao2_link(params->container, obj);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
} else if (params->fields &&
|
|
|
|
} else if (params->fields &&
|
|
|
|
(!(objset = ast_sorcery_objectset_create(params->sorcery, obj)) ||
|
|
|
|
(!(objset = ast_sorcery_objectset_create(params->sorcery, obj)) ||
|
|
|
|
(!ast_variable_lists_match(objset, params->fields, 0)))) {
|
|
|
|
(!ast_variable_lists_match(objset, params->fields, 0)))) {
|
|
|
@ -200,6 +213,18 @@ static void sorcery_memory_retrieve_regex(const struct ast_sorcery *sorcery, voi
|
|
|
|
regfree(&expression);
|
|
|
|
regfree(&expression);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void sorcery_memory_retrieve_prefix(const struct ast_sorcery *sorcery, void *data, const char *type, struct ao2_container *objects, const char *prefix, const size_t prefix_len)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
struct sorcery_memory_fields_cmp_params params = {
|
|
|
|
|
|
|
|
.sorcery = sorcery,
|
|
|
|
|
|
|
|
.container = objects,
|
|
|
|
|
|
|
|
.prefix = prefix,
|
|
|
|
|
|
|
|
.prefix_len = prefix_len,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ao2_callback(data, 0, sorcery_memory_fields_cmp, ¶ms);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static int sorcery_memory_update(const struct ast_sorcery *sorcery, void *data, void *object)
|
|
|
|
static int sorcery_memory_update(const struct ast_sorcery *sorcery, void *data, void *object)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
RAII_VAR(void *, existing, NULL, ao2_cleanup);
|
|
|
|
RAII_VAR(void *, existing, NULL, ao2_cleanup);
|
|
|
|