00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __RESOURCE_LISTS_PARSER_H
00027 #define __RESOURCE_LISTS_PARSER_H
00028
00029 #include <xcap/xml_utils.h>
00030 #include <cds/memory.h>
00031
00032 typedef struct _display_name_t {
00033 SEQUENCE_ABLE(struct _display_name_t)
00034 char *name;
00035 char *lang;
00036 } display_name_t;
00037
00038 typedef struct {
00039 char *uri;
00040 SEQUENCE(display_name_t) display_names;
00041 } entry_t;
00042
00043 typedef struct {
00044 char *anchor;
00045
00046 } external_t;
00047
00048 typedef struct {
00049 char *ref;
00050
00051 } entry_ref_t;
00052
00053 typedef enum {
00054 lct_list,
00055 lct_entry,
00056 lct_entry_ref,
00057 lct_external
00058 } list_content_type_t;
00059
00060 struct _list_t;
00061
00062 typedef struct _list_content_t {
00063 SEQUENCE_ABLE(struct _list_content_t)
00064
00065 list_content_type_t type;
00066 union {
00067 struct _list_t *list;
00068 entry_t *entry;
00069 entry_ref_t *entry_ref;
00070 external_t *external;
00071 } u;
00072 } list_content_t;
00073
00074 typedef struct _list_t {
00075 SEQUENCE_ABLE(struct _list_t)
00076
00077
00078 char *display_name;
00079
00080 SEQUENCE(list_content_t) content;
00081
00082 char *name;
00083 } list_t;
00084
00085 typedef struct {
00086
00087 SEQUENCE(list_t) lists;
00088
00089 } resource_lists_t;
00090
00091 int parse_resource_lists_xml(const char *data, int data_len, resource_lists_t **dst);
00092 int parse_list_xml(const char *data, int data_len, list_t **dst);
00093 int parse_as_list_content_xml(const char *data, int data_len, list_t **dst);
00094 int parse_entry_xml(const char *data, int data_len, entry_t **dst);
00095 void free_resource_lists(resource_lists_t *rl);
00096 void free_list(list_t *l);
00097 void free_entry(entry_t *e);
00098 void free_display_names(display_name_t *sequence_first);
00099
00100
00101
00102
00103 int read_list(xmlNode *list_node, list_t **dst, int read_content_only);
00104
00105 #endif