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