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