25 #ifndef ASTERISK_DATA_H
26 #define ASTERISK_DATA_H
182 #if defined(__cplusplus) || defined(c_plusplus)
204 #define AST_DATA_HANDLER_VERSION 1
205 #define AST_DATA_QUERY_VERSION 1
260 #define AST_DATA_ENTRY(__path, __handler) { .path = __path, .handler = __handler }
284 char *(*AST_DATA_STRING)(
void *ptr);
285 char *(*AST_DATA_PASSWORD)(
void *ptr);
293 void *(*AST_DATA_POINTER)(
void *ptr);
295 void *(*AST_DATA_CONTAINER)(
void *ptr);
300 #define AST_DATA_STRUCTURE(__struct, __name) \
301 __name(__AST_DATA_MAPPING_FUNCTION); \
302 static const struct ast_data_mapping_structure __data_mapping_structure_##__struct[] = { \
303 __name(__AST_DATA_MAPPING_STRUCTURE) \
307 #define __AST_DATA_MAPPING_STRUCTURE(__structure, __member, __type) \
308 { .name = #__member, .get.__type = data_mapping_structure_get_##__structure##__member, \
312 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_PASSWORD(__structure, __member) \
313 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_PASSWORD, char *)
314 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_STRING(__structure, __member) \
315 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_STRING, char *)
316 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_CHARACTER(__structure, __member) \
317 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_CHARACTER, char)
318 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_INTEGER(__structure, __member) \
319 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_INTEGER, int)
320 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_TIMESTAMP(__structure, __member) \
321 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_INTEGER, int)
322 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_SECONDS(__structure, __member) \
323 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_INTEGER, int)
324 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_MILLISECONDS(__structure, __member) \
325 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_INTEGER, int)
326 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_UNSIGNED_INTEGER(__structure, __member) \
327 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_UNSIGNED_INTEGER, unsigned int)
328 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_BOOLEAN(__structure, __member) \
329 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_BOOLEAN, unsigned int)
330 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_POINTER(__structure, __member) \
331 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_POINTER, void *)
332 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_IPADDR(__structure, __member) \
333 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_IPADDR, struct in_addr)
334 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_DOUBLE(__structure, __member) \
335 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_DBL, double)
336 #define __AST_DATA_MAPPING_FUNCTION_AST_DATA_CONTAINER(__structure, __member) \
337 __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, AST_DATA_CONTAINER, void *)
339 #define __AST_DATA_MAPPING_FUNCTION(__structure, __member, __type) \
340 __AST_DATA_MAPPING_FUNCTION_##__type(__structure, __member)
343 #define __AST_DATA_MAPPING_FUNCTION_TYPE(__structure, __member, __type, __real_type) \
344 static __real_type data_mapping_structure_get_##__structure##__member(void *ptr) { \
345 struct __structure *struct_##__member = (struct __structure *) ptr; \
346 return (__real_type) struct_##__member->__member; \
362 #define ast_data_register(path, handler) __ast_data_register(path, handler, __FILE__, ast_module_info->self)
363 #define ast_data_register_core(path, handler) __ast_data_register(path, handler, __FILE__, NULL)
377 #define ast_data_register_multiple(data_entries, entries) \
378 __ast_data_register_multiple(data_entries, entries, __FILE__, ast_module_info->self)
379 #define ast_data_register_multiple_core(data_entries, entries) \
380 __ast_data_register_multiple(data_entries, entries, __FILE__, NULL)
394 #define ast_data_unregister(path) __ast_data_unregister(path, __FILE__)
419 void *structure,
const char *structure_name);
420 #define ast_data_search_cmp_structure(search, structure_name, structure, structure_name_cmp) \
421 __ast_data_search_cmp_structure(search, __data_mapping_structure_##structure_name, \
422 ARRAY_LEN(__data_mapping_structure_##structure_name), structure, structure_name_cmp)
529 struct in_addr addr);
562 unsigned int timestamp);
573 unsigned int seconds);
584 unsigned int milliseconds);
606 unsigned int boolean);
619 size_t mapping_len,
void *structure);
620 #define ast_data_add_structure(structure_name, root, structure) \
621 __ast_data_add_structure(root, __data_mapping_structure_##structure_name, \
622 ARRAY_LEN(__data_mapping_structure_##structure_name), structure)
639 const char *elements);
813 #if defined(__cplusplus) || defined(c_plusplus)
unsigned int AST_DATA_BOOLEAN
unsigned int AST_DATA_UNSIGNED_INTEGER
unsigned int AST_DATA_MILLISECONDS
int(* AST_DATA_INTEGER)(void *ptr)
The data tree to be returned by the callbacks and managed by functions local to this file...
void ast_data_free(struct ast_data *root)
Release the allocated memory of a tree.
struct ast_data * ast_data_add_milliseconds(struct ast_data *root, const char *childname, unsigned int milliseconds)
Add a milliseconds node type.
union ast_data_retrieve::@161 value
const char * name
structure member name.
enum ast_data_type ast_data_retrieve_type(struct ast_data *res, const char *path)
Get a node type.
void ast_data_iterator_end(struct ast_data_iterator *iterator)
Release (stop using) an iterator.
char(* AST_DATA_CHARACTER)(void *ptr)
struct ast_data * ast_data_add_dbl(struct ast_data *root, const char *childname, double dbl)
Add a floating point node type.
static unsigned int ast_data_retrieve_bool(struct ast_data *tree, const char *path)
Retrieve the boolean value of a node.
This entries are for multiple registers.
struct ast_data * ast_data_add_uint(struct ast_data *root, const char *childname, unsigned int value)
Add an unsigned integer node type.
struct ast_data * ast_data_get(const struct ast_data_query *query)
Retrieve a subtree from the asterisk data API.
struct ast_data * ast_data_add_ipaddr(struct ast_data *root, const char *childname, struct in_addr addr)
Add a ipv4 address type.
struct ast_data * ast_data_add_bool(struct ast_data *root, const char *childname, unsigned int boolean)
Add a boolean node type.
double(* AST_DATA_DOUBLE)(void *ptr)
static void * ast_data_retrieve_ptr(struct ast_data *tree, const char *path)
Retrieve the ptr value of a node.
int(* AST_DATA_MILLISECONDS)(void *ptr)
static char ast_data_retrieve_char(struct ast_data *tree, const char *path)
Retrieve the character value of a node.
struct ast_xml_doc * ast_data_get_xml(const struct ast_data_query *query)
Retrieve a subtree from the asterisk data API in XML format..
int __ast_data_register_multiple(const struct ast_data_entry *data_entries, size_t entries, const char *registrar, struct ast_module *mod)
Register multiple data providers at once.
static unsigned int ast_data_retrieve_uint(struct ast_data *tree, const char *path)
Retrieve the unsigned integer value of a node.
struct ast_data * ast_data_add_timestamp(struct ast_data *root, const char *childname, unsigned int timestamp)
Add a timestamp node type.
uint32_t version
Data query version.
struct ast_data * ast_data_add_ptr(struct ast_data *root, const char *childname, void *ptr)
Add a ptr node type.
int(* AST_DATA_SECONDS)(void *ptr)
unsigned int(* AST_DATA_UNSIGNED_INTEGER)(void *ptr)
const char * path
Path of the node to register.
enum ast_data_type type
The type of the node retrieved.
static double ast_data_retrieve_dbl(struct ast_data *tree, const char *path)
Retrieve the double value of a node.
structure retrieved from a node, with the nodes content.
Asterisk internal frame definitions.
struct ast_data * ast_data_add_node(struct ast_data *root, const char *childname)
Add a container child.
struct ast_data_handler * handler
Data handler structure.
int ast_data_add_codecs(struct ast_data *root, const char *node_name, format_t capability)
Add the list of codecs in the root node based on the capability parameter.
char * ast_data_retrieve_name(struct ast_data *node)
Get the node name.
struct ast_data * ast_data_add_seconds(struct ast_data *root, const char *childname, unsigned int seconds)
Add a seconds node type.
char * filter
Filter string, return the internal nodes specified here. Setting it to NULL will return every interna...
void * AST_DATA_CONTAINER
The list of nodes with their search requirement.
enum ast_data_type type
structure member type.
struct ast_data_iterator * ast_data_iterator_init(struct ast_data *tree, const char *elements)
Initialize an iterator.
Map the members of a structure.
char * path
Path to the node to retrieve.
void ast_data_remove_node(struct ast_data *root, struct ast_data *child)
Remove a node that was added using ast_data_add_.
struct ast_data * ast_data_add_char(struct ast_data *root, const char *childname, char value)
Add a char node type.
static const char * ast_data_retrieve_password(struct ast_data *tree, const char *path)
Retrieve the password value of a node.
int ast_data_retrieve(struct ast_data *tree, const char *path, struct ast_data_retrieve *content)
Retrieve a value from a node in the tree.
static int ast_data_retrieve_int(struct ast_data *tree, const char *path)
Retrieve the integer value of a node.
unsigned int(* AST_DATA_BOOLEAN)(void *ptr)
int __ast_data_add_structure(struct ast_data *root, const struct ast_data_mapping_structure *mapping, size_t mapping_len, void *structure)
Add a complete structure to a node.
static format_t capability
ast_data_type
The data type of the data node.
int __ast_data_register(const char *path, const struct ast_data_handler *handler, const char *registrar, struct ast_module *mod)
Register a data provider.
int __ast_data_unregister(const char *path, const char *registrar)
Unregister a data provider.
struct ast_data * ast_data_iterator_next(struct ast_data_iterator *iterator)
Get the next node of the tree.
int(* ast_data_get_cb)(const struct ast_data_search *search, struct ast_data *root)
The get callback definition.
int(* AST_DATA_TIMESTAMP)(void *ptr)
A query to the data API is specified in this structure.
struct ast_data * ast_data_add_str(struct ast_data *root, const char *childname, const char *string)
Add a string node type.
struct ast_data * ast_data_add_int(struct ast_data *root, const char *childname, int value)
Add an integer node type.
struct in_addr AST_DATA_IPADDR
char * search
Search condition.
This structure is used by the iterator.
int ast_data_search_match(const struct ast_data_search *search, struct ast_data *data)
Check the current generated node to know if it matches the search condition.
uint32_t version
Structure version.
static struct in_addr ast_data_retrieve_ipaddr(struct ast_data *tree, const char *path)
Retrieve the ipv4 address value of a node.
The structure of the node handler.
int __ast_data_search_cmp_structure(const struct ast_data_search *search, const struct ast_data_mapping_structure *mapping, size_t mapping_len, void *structure, const char *structure_name)
Based on a search tree, evaluate every member of a structure against it.
struct in_addr(* AST_DATA_IPADDR)(void *ptr)
unsigned int AST_DATA_TIMESTAMP
unsigned int AST_DATA_SECONDS
struct ast_data * ast_data_add_password(struct ast_data *root, const char *childname, const char *string)
Add a password node type.
static const char * ast_data_retrieve_string(struct ast_data *tree, const char *path)
Retrieve the string value of a node.