This source file includes following definitions.
- crm_element_name
- crm_map_element_name
- numXpathResults
1
2
3
4
5
6
7
8
9
10 #ifndef CRM_COMMON_XML__H
11 # define CRM_COMMON_XML__H
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17
18
19
20
21
22
23 # include <stdio.h>
24 # include <sys/types.h>
25 # include <unistd.h>
26
27 # include <stdlib.h>
28 # include <errno.h>
29 # include <fcntl.h>
30
31 # include <libxml/tree.h>
32 # include <libxml/xpath.h>
33
34 # include <crm/crm.h>
35 # include <crm/common/nvpair.h>
36
37
38
39
40
41
42
43
44
45 # define CRM_BZ2_BLOCKS 4
46 # define CRM_BZ2_WORK 20
47 # define CRM_BZ2_THRESHOLD 128 * 1024
48
49 # define XML_PARANOIA_CHECKS 0
50
51 typedef const xmlChar *pcmkXmlStr;
52
53 gboolean add_message_xml(xmlNode * msg, const char *field, xmlNode * xml);
54 xmlNode *get_message_xml(xmlNode * msg, const char *field);
55
56 xmlDoc *getDocPtr(xmlNode * node);
57
58
59
60
61
62
63
64
65
66
67 void copy_in_properties(xmlNode * target, xmlNode * src);
68 void expand_plus_plus(xmlNode * target, const char *name, const char *value);
69 void fix_plus_plus_recursive(xmlNode * target);
70
71
72
73
74
75
76
77
78 xmlNode *create_xml_node(xmlNode * parent, const char *name);
79
80
81
82
83
84
85
86
87
88 xmlNode *pcmk_create_xml_text_node(xmlNode * parent, const char *name, const char *content);
89
90
91
92
93
94
95
96 xmlNode *pcmk_create_html_node(xmlNode * parent, const char *element_name, const char *id,
97 const char *class_name, const char *text);
98
99
100
101
102 void purge_diff_markers(xmlNode * a_node);
103
104
105
106
107
108 xmlNode *copy_xml(xmlNode * src_node);
109
110
111
112
113 xmlNode *add_node_copy(xmlNode * new_parent, xmlNode * xml_node);
114
115 int add_node_nocopy(xmlNode * parent, const char *name, xmlNode * child);
116
117
118
119
120
121
122 xmlNode *filename2xml(const char *filename);
123
124 xmlNode *stdin2xml(void);
125
126 xmlNode *string2xml(const char *input);
127
128 int write_xml_fd(xmlNode * xml_node, const char *filename, int fd, gboolean compress);
129 int write_xml_file(xmlNode * xml_node, const char *filename, gboolean compress);
130
131 char *dump_xml_formatted(xmlNode * msg);
132
133 char *dump_xml_formatted_with_text(xmlNode * msg);
134
135 char *dump_xml_unformatted(xmlNode * msg);
136
137
138
139
140 xmlNode *diff_xml_object(xmlNode * left, xmlNode * right, gboolean suppress);
141
142 xmlNode *subtract_xml_object(xmlNode * parent, xmlNode * left, xmlNode * right,
143 gboolean full, gboolean * changed, const char *marker);
144
145 gboolean can_prune_leaf(xmlNode * xml_node);
146
147
148
149
150 xmlNode *find_xml_node(xmlNode * cib, const char *node_path, gboolean must_find);
151
152 void xml_remove_prop(xmlNode * obj, const char *name);
153
154 gboolean replace_xml_child(xmlNode * parent, xmlNode * child, xmlNode * update,
155 gboolean delete_only);
156
157 gboolean update_xml_child(xmlNode * child, xmlNode * to_update);
158
159 int find_xml_children(xmlNode ** children, xmlNode * root,
160 const char *tag, const char *field, const char *value,
161 gboolean search_matches);
162
163 xmlNode *get_xpath_object(const char *xpath, xmlNode * xml_obj, int error_level);
164 xmlNode *get_xpath_object_relative(const char *xpath, xmlNode * xml_obj, int error_level);
165
166 static inline const char *
167 crm_element_name(const xmlNode *xml)
168 {
169 return xml? (const char *)(xml->name) : NULL;
170 }
171
172 static inline const char *
173 crm_map_element_name(const xmlNode *xml)
174 {
175 const char *name = crm_element_name(xml);
176
177 if (strcmp(name, "master") == 0) {
178 return "clone";
179 } else {
180 return name;
181 }
182 }
183
184 gboolean xml_has_children(const xmlNode * root);
185
186 char *calculate_on_disk_digest(xmlNode * local_cib);
187 char *calculate_operation_digest(xmlNode * local_cib, const char *version);
188 char *calculate_xml_versioned_digest(xmlNode * input, gboolean sort, gboolean do_filter,
189 const char *version);
190
191
192 gboolean validate_xml(xmlNode * xml_blob, const char *validation, gboolean to_logs);
193 gboolean validate_xml_verbose(xmlNode * xml_blob);
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232 int update_validation(xmlNode **xml_blob, int *best, int max,
233 gboolean transform, gboolean to_logs);
234
235 int get_schema_version(const char *name);
236 const char *get_schema_name(int version);
237 const char *xml_latest_schema(void);
238 gboolean cli_config_update(xmlNode ** xml, int *best_version, gboolean to_logs);
239
240
241
242
243
244
245 void crm_xml_init(void);
246 void crm_xml_cleanup(void);
247
248 void pcmk_free_xml_subtree(xmlNode *xml);
249 void free_xml(xmlNode * child);
250
251 xmlNode *first_named_child(const xmlNode *parent, const char *name);
252 xmlNode *crm_next_same_xml(const xmlNode *sibling);
253
254 xmlNode *sorted_xml(xmlNode * input, xmlNode * parent, gboolean recursive);
255 xmlXPathObjectPtr xpath_search(xmlNode * xml_top, const char *path);
256 void crm_foreach_xpath_result(xmlNode *xml, const char *xpath,
257 void (*helper)(xmlNode*, void*), void *user_data);
258 xmlNode *expand_idref(xmlNode * input, xmlNode * top);
259
260 void freeXpathObject(xmlXPathObjectPtr xpathObj);
261 xmlNode *getXpathResult(xmlXPathObjectPtr xpathObj, int index);
262 void dedupXpathResults(xmlXPathObjectPtr xpathObj);
263
264 static inline int numXpathResults(xmlXPathObjectPtr xpathObj)
265 {
266 if(xpathObj == NULL || xpathObj->nodesetval == NULL) {
267 return 0;
268 }
269 return xpathObj->nodesetval->nodeNr;
270 }
271
272 bool xml_tracking_changes(xmlNode * xml);
273 bool xml_document_dirty(xmlNode *xml);
274 void xml_track_changes(xmlNode * xml, const char *user, xmlNode *acl_source, bool enforce_acls);
275 void xml_calculate_changes(xmlNode *old_xml, xmlNode *new_xml);
276 void xml_calculate_significant_changes(xmlNode *old_xml, xmlNode *new_xml);
277 void xml_accept_changes(xmlNode * xml);
278 void xml_log_changes(uint8_t level, const char *function, xmlNode *xml);
279 void xml_log_patchset(uint8_t level, const char *function, xmlNode *xml);
280 bool xml_patch_versions(xmlNode *patchset, int add[3], int del[3]);
281
282 xmlNode *xml_create_patchset(
283 int format, xmlNode *source, xmlNode *target, bool *config, bool manage_version);
284 int xml_apply_patchset(xmlNode *xml, xmlNode *patchset, bool check_version);
285
286 void patchset_process_digest(xmlNode *patch, xmlNode *source, xmlNode *target, bool with_digest);
287
288 void save_xml_to_file(xmlNode * xml, const char *desc, const char *filename);
289 char *xml_get_path(xmlNode *xml);
290
291 char * crm_xml_escape(const char *text);
292 void crm_xml_sanitize_id(char *id);
293 void crm_xml_set_id(xmlNode *xml, const char *format, ...) G_GNUC_PRINTF(2, 3);
294
295
296
297
298 void crm_destroy_xml(gpointer data);
299
300 #if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1)
301 #include <crm/common/xml_compat.h>
302 #endif
303
304 #ifdef __cplusplus
305 }
306 #endif
307
308 #endif