| 242 | } |
| 243 | |
| 244 | xmlNode * |
| 245 | cib_msg_copy(xmlNode * msg, gboolean with_data) |
| 246 | { |
| 247 | int lpc = 0; |
| 248 | const char *field = NULL; |
| 249 | const char *value = NULL; |
| 250 | xmlNode *value_struct = NULL; |
| 251 | |
| 252 | static const char *field_list[] = { |
| 253 | F_XML_TAGNAME, |
| 254 | F_TYPE, |
| 255 | F_CIB_CLIENTID, |
| 256 | F_CIB_CALLOPTS, |
| 257 | F_CIB_CALLID, |
| 258 | F_CIB_OPERATION, |
| 259 | F_CIB_ISREPLY, |
| 260 | F_CIB_SECTION, |
| 261 | F_CIB_HOST, |
| 262 | F_CIB_RC, |
| 263 | F_CIB_DELEGATED, |
| 264 | F_CIB_OBJID, |
| 265 | F_CIB_OBJTYPE, |
| 266 | F_CIB_EXISTING, |
| 267 | F_CIB_SEENCOUNT, |
| 268 | F_CIB_TIMEOUT, |
| 269 | F_CIB_CALLBACK_TOKEN, |
| 270 | F_CIB_GLOBAL_UPDATE, |
| 271 | F_CIB_CLIENTNAME, |
| 272 | #if ENABLE_ACL |
| 273 | F_CIB_USER, |
| 274 | #endif |
| 275 | F_CIB_NOTIFY_TYPE, |
| 276 | F_CIB_NOTIFY_ACTIVATE |
| 277 | }; |
| 278 | |
| 279 | static const char *data_list[] = { |
| 280 | F_CIB_CALLDATA, |
| 281 | F_CIB_UPDATE, |
| 282 | F_CIB_UPDATE_RESULT |
| 283 | }; |
| 284 | |
| 285 | xmlNode *copy = create_xml_node(NULL, "copy"); |
| 286 | |
| 287 | CRM_ASSERT(copy != NULL); |
| 288 | |
| 289 | for (lpc = 0; lpc < DIMOF(field_list); lpc++) { |
| 290 | field = field_list[lpc]; |
| 291 | value = crm_element_value(msg, field); |
| 292 | if (value != NULL) { |
| 293 | crm_xml_add(copy, field, value); |
| 294 | } |
| 295 | } |
| 296 | for (lpc = 0; with_data && lpc < DIMOF(data_list); lpc++) { |
| 297 | field = data_list[lpc]; |
| 298 | value_struct = get_message_xml(msg, field); |
| 299 | if (value_struct != NULL) { |
| 300 | add_message_xml(copy, field, value_struct); |
| 301 | } |
no test coverage detected