This source file includes following definitions.
- pcmk__xml_attr_value
1
2
3
4
5
6
7
8
9
10 #ifndef CRMCOMMON_PRIVATE__H
11 # define CRMCOMMON_PRIVATE__H
12
13
14
15
16
17 #include <stdint.h>
18 #include <stdbool.h>
19 #include <sys/types.h>
20 #include <glib.h>
21 #include <libxml/tree.h>
22 #include <qb/qbipcc.h>
23
24
25 #define PCMK__BUFFER_SIZE 4096
26
27
28
29
30 typedef struct pcmk__deleted_xml_s {
31 char *path;
32 int position;
33 } pcmk__deleted_xml_t;
34
35 typedef struct xml_private_s {
36 long check;
37 uint32_t flags;
38 char *user;
39 GList *acls;
40 GList *deleted_objs;
41 } xml_private_t;
42
43 #define pcmk__set_xml_flags(xml_priv, flags_to_set) do { \
44 (xml_priv)->flags = pcmk__set_flags_as(__func__, __LINE__, \
45 LOG_NEVER, "XML", "XML node", (xml_priv)->flags, \
46 (flags_to_set), #flags_to_set); \
47 } while (0)
48
49 #define pcmk__clear_xml_flags(xml_priv, flags_to_clear) do { \
50 (xml_priv)->flags = pcmk__clear_flags_as(__func__, __LINE__, \
51 LOG_NEVER, "XML", "XML node", (xml_priv)->flags, \
52 (flags_to_clear), #flags_to_clear); \
53 } while (0)
54
55 G_GNUC_INTERNAL
56 void pcmk__xml2text(xmlNode *data, int options, char **buffer, int *offset,
57 int *max, int depth);
58
59 G_GNUC_INTERNAL
60 void pcmk__buffer_add_char(char **buffer, int *offset, int *max, char c);
61
62 G_GNUC_INTERNAL
63 bool pcmk__tracking_xml_changes(xmlNode *xml, bool lazy);
64
65 G_GNUC_INTERNAL
66 int pcmk__element_xpath(const char *prefix, xmlNode *xml, char *buffer,
67 int offset, size_t buffer_size);
68
69 G_GNUC_INTERNAL
70 void pcmk__mark_xml_created(xmlNode *xml);
71
72 G_GNUC_INTERNAL
73 int pcmk__xml_position(xmlNode *xml, enum xml_private_flags ignore_if_set);
74
75 G_GNUC_INTERNAL
76 xmlNode *pcmk__xml_match(xmlNode *haystack, xmlNode *needle, bool exact);
77
78 G_GNUC_INTERNAL
79 void pcmk__xe_log(int log_level, const char *file, const char *function,
80 int line, const char *prefix, xmlNode *data, int depth,
81 int options);
82
83 G_GNUC_INTERNAL
84 void pcmk__xml_update(xmlNode *parent, xmlNode *target, xmlNode *update,
85 bool as_diff);
86
87 G_GNUC_INTERNAL
88 xmlNode *pcmk__xc_match(xmlNode *root, xmlNode *search_comment, bool exact);
89
90 G_GNUC_INTERNAL
91 void pcmk__xc_update(xmlNode *parent, xmlNode *target, xmlNode *update);
92
93 G_GNUC_INTERNAL
94 void pcmk__free_acls(GList *acls);
95
96 G_GNUC_INTERNAL
97 void pcmk__unpack_acl(xmlNode *source, xmlNode *target, const char *user);
98
99 G_GNUC_INTERNAL
100 void pcmk__apply_acl(xmlNode *xml);
101
102 G_GNUC_INTERNAL
103 void pcmk__apply_creation_acl(xmlNode *xml, bool check_top);
104
105 G_GNUC_INTERNAL
106 void pcmk__mark_xml_attr_dirty(xmlAttr *a);
107
108 G_GNUC_INTERNAL
109 bool pcmk__xa_filterable(const char *name);
110
111 static inline const char *
112 pcmk__xml_attr_value(const xmlAttr *attr)
113 {
114 return ((attr == NULL) || (attr->children == NULL))? NULL
115 : (const char *) attr->children->content;
116 }
117
118
119
120
121
122 #define PCMK__IPC_VERSION 1
123
124 #define PCMK__CONTROLD_API_MAJOR "1"
125 #define PCMK__CONTROLD_API_MINOR "0"
126
127
128 typedef struct pcmk__ipc_methods_s {
129
130
131
132
133
134
135
136
137 int (*new_data)(pcmk_ipc_api_t *api);
138
139
140
141
142
143
144
145 void (*free_data)(void *api_data);
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161 int (*post_connect)(pcmk_ipc_api_t *api);
162
163
164
165
166
167
168
169
170
171
172 bool (*reply_expected)(pcmk_ipc_api_t *api, xmlNode *request);
173
174
175
176
177
178
179
180
181
182
183 bool (*dispatch)(pcmk_ipc_api_t *api, xmlNode *msg);
184
185
186
187
188
189
190
191 void (*post_disconnect)(pcmk_ipc_api_t *api);
192 } pcmk__ipc_methods_t;
193
194
195 struct pcmk_ipc_api_s {
196 enum pcmk_ipc_server server;
197 enum pcmk_ipc_dispatch dispatch_type;
198 size_t ipc_size_max;
199 crm_ipc_t *ipc;
200 mainloop_io_t *mainloop_io;
201 bool free_on_disconnect;
202 pcmk_ipc_callback_t cb;
203 void *user_data;
204 void *api_data;
205 pcmk__ipc_methods_t *cmds;
206 };
207
208 typedef struct pcmk__ipc_header_s {
209 struct qb_ipc_response_header qb;
210 uint32_t size_uncompressed;
211 uint32_t size_compressed;
212 uint32_t flags;
213 uint8_t version;
214 } pcmk__ipc_header_t;
215
216 G_GNUC_INTERNAL
217 int pcmk__send_ipc_request(pcmk_ipc_api_t *api, xmlNode *request);
218
219 G_GNUC_INTERNAL
220 void pcmk__call_ipc_callback(pcmk_ipc_api_t *api,
221 enum pcmk_ipc_event event_type,
222 crm_exit_t status, void *event_data);
223
224 G_GNUC_INTERNAL
225 unsigned int pcmk__ipc_buffer_size(unsigned int max);
226
227 G_GNUC_INTERNAL
228 bool pcmk__valid_ipc_header(const pcmk__ipc_header_t *header);
229
230 G_GNUC_INTERNAL
231 pcmk__ipc_methods_t *pcmk__controld_api_methods(void);
232
233 G_GNUC_INTERNAL
234 pcmk__ipc_methods_t *pcmk__pacemakerd_api_methods(void);
235
236 G_GNUC_INTERNAL
237 pcmk__ipc_methods_t *pcmk__schedulerd_api_methods(void);
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279 int pcmk__crm_ipc_is_authentic_process(qb_ipcc_connection_t *qb_ipc, int sock, uid_t refuid, gid_t refgid,
280 pid_t *gotpid, uid_t *gotuid, gid_t *gotgid);
281
282
283 #endif