summaryrefslogtreecommitdiffstats
path: root/lib/common/messages.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/common/messages.c122
1 files changed, 69 insertions, 53 deletions
diff --git a/lib/common/messages.c b/lib/common/messages.c
index 2c01eed..fa21169 100644
--- a/lib/common/messages.c
+++ b/lib/common/messages.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2022 the Pacemaker project contributors
+ * Copyright 2004-2024 the Pacemaker project contributors
*
* The version control history for this file may have further details.
*
@@ -15,7 +15,7 @@
#include <glib.h>
#include <libxml/tree.h>
-#include <crm/msg_xml.h>
+#include <crm/common/xml.h>
#include <crm/common/xml_internal.h>
/*!
@@ -61,23 +61,25 @@ create_request_adv(const char *task, xmlNode *msg_data,
}
// host_from will get set for us if necessary by the controller when routed
- request = create_xml_node(NULL, __func__);
- crm_xml_add(request, F_CRM_ORIGIN, origin);
- crm_xml_add(request, F_TYPE, T_CRM);
- crm_xml_add(request, F_CRM_VERSION, CRM_FEATURE_SET);
- crm_xml_add(request, F_CRM_MSG_TYPE, XML_ATTR_REQUEST);
- crm_xml_add(request, F_CRM_REFERENCE, reference);
- crm_xml_add(request, F_CRM_TASK, task);
- crm_xml_add(request, F_CRM_SYS_TO, sys_to);
- crm_xml_add(request, F_CRM_SYS_FROM, true_from);
+ request = pcmk__xe_create(NULL, __func__);
+ crm_xml_add(request, PCMK_XA_ORIGIN, origin);
+ crm_xml_add(request, PCMK__XA_T, PCMK__VALUE_CRMD);
+ crm_xml_add(request, PCMK_XA_VERSION, CRM_FEATURE_SET);
+ crm_xml_add(request, PCMK__XA_SUBT, PCMK__VALUE_REQUEST);
+ crm_xml_add(request, PCMK_XA_REFERENCE, reference);
+ crm_xml_add(request, PCMK__XA_CRM_TASK, task);
+ crm_xml_add(request, PCMK__XA_CRM_SYS_TO, sys_to);
+ crm_xml_add(request, PCMK__XA_CRM_SYS_FROM, true_from);
/* HOSTTO will be ignored if it is to the DC anyway. */
if (host_to != NULL && strlen(host_to) > 0) {
- crm_xml_add(request, F_CRM_HOST_TO, host_to);
+ crm_xml_add(request, PCMK__XA_CRM_HOST_TO, host_to);
}
if (msg_data != NULL) {
- add_message_xml(request, F_CRM_DATA, msg_data);
+ xmlNode *wrapper = pcmk__xe_create(request, PCMK__XE_CRM_XML);
+
+ pcmk__xml_copy(wrapper, msg_data);
}
free(reference);
free(true_from);
@@ -104,67 +106,56 @@ create_reply_adv(const xmlNode *original_request, xmlNode *xml_response_data,
{
xmlNode *reply = NULL;
- const char *host_from = crm_element_value(original_request, F_CRM_HOST_FROM);
- const char *sys_from = crm_element_value(original_request, F_CRM_SYS_FROM);
- const char *sys_to = crm_element_value(original_request, F_CRM_SYS_TO);
- const char *type = crm_element_value(original_request, F_CRM_MSG_TYPE);
- const char *operation = crm_element_value(original_request, F_CRM_TASK);
- const char *crm_msg_reference = crm_element_value(original_request, F_CRM_REFERENCE);
+ const char *host_from = crm_element_value(original_request, PCMK__XA_SRC);
+ const char *sys_from = crm_element_value(original_request,
+ PCMK__XA_CRM_SYS_FROM);
+ const char *sys_to = crm_element_value(original_request,
+ PCMK__XA_CRM_SYS_TO);
+ const char *type = crm_element_value(original_request, PCMK__XA_SUBT);
+ const char *operation = crm_element_value(original_request,
+ PCMK__XA_CRM_TASK);
+ const char *crm_msg_reference = crm_element_value(original_request,
+ PCMK_XA_REFERENCE);
if (type == NULL) {
crm_err("Cannot create new_message, no message type in original message");
CRM_ASSERT(type != NULL);
return NULL;
-#if 0
- } else if (strcasecmp(XML_ATTR_REQUEST, type) != 0) {
- crm_err("Cannot create new_message, original message was not a request");
- return NULL;
-#endif
}
- reply = create_xml_node(NULL, __func__);
- if (reply == NULL) {
- crm_err("Cannot create new_message, malloc failed");
- return NULL;
+
+ if (strcmp(type, PCMK__VALUE_REQUEST) != 0) {
+ /* Replies should only be generated for request messages, but it's possible
+ * we expect replies to other messages right now so this can't be enforced.
+ */
+ crm_trace("Creating a reply for a non-request original message");
}
- crm_xml_add(reply, F_CRM_ORIGIN, origin);
- crm_xml_add(reply, F_TYPE, T_CRM);
- crm_xml_add(reply, F_CRM_VERSION, CRM_FEATURE_SET);
- crm_xml_add(reply, F_CRM_MSG_TYPE, XML_ATTR_RESPONSE);
- crm_xml_add(reply, F_CRM_REFERENCE, crm_msg_reference);
- crm_xml_add(reply, F_CRM_TASK, operation);
+ reply = pcmk__xe_create(NULL, __func__);
+ crm_xml_add(reply, PCMK_XA_ORIGIN, origin);
+ crm_xml_add(reply, PCMK__XA_T, PCMK__VALUE_CRMD);
+ crm_xml_add(reply, PCMK_XA_VERSION, CRM_FEATURE_SET);
+ crm_xml_add(reply, PCMK__XA_SUBT, PCMK__VALUE_RESPONSE);
+ crm_xml_add(reply, PCMK_XA_REFERENCE, crm_msg_reference);
+ crm_xml_add(reply, PCMK__XA_CRM_TASK, operation);
/* since this is a reply, we reverse the from and to */
- crm_xml_add(reply, F_CRM_SYS_TO, sys_from);
- crm_xml_add(reply, F_CRM_SYS_FROM, sys_to);
+ crm_xml_add(reply, PCMK__XA_CRM_SYS_TO, sys_from);
+ crm_xml_add(reply, PCMK__XA_CRM_SYS_FROM, sys_to);
/* HOSTTO will be ignored if it is to the DC anyway. */
if (host_from != NULL && strlen(host_from) > 0) {
- crm_xml_add(reply, F_CRM_HOST_TO, host_from);
+ crm_xml_add(reply, PCMK__XA_CRM_HOST_TO, host_from);
}
if (xml_response_data != NULL) {
- add_message_xml(reply, F_CRM_DATA, xml_response_data);
+ xmlNode *wrapper = pcmk__xe_create(reply, PCMK__XE_CRM_XML);
+
+ pcmk__xml_copy(wrapper, xml_response_data);
}
return reply;
}
-xmlNode *
-get_message_xml(const xmlNode *msg, const char *field)
-{
- return pcmk__xml_first_child(first_named_child(msg, field));
-}
-
-gboolean
-add_message_xml(xmlNode *msg, const char *field, xmlNode *xml)
-{
- xmlNode *holder = create_xml_node(msg, field);
-
- add_node_copy(holder, xml);
- return TRUE;
-}
-
/*!
* \brief Get name to be used as identifier for cluster messages
*
@@ -289,3 +280,28 @@ pcmk__reset_request(pcmk__request_t *request)
pcmk__reset_result(&(request->result));
}
+
+// Deprecated functions kept only for backward API compatibility
+// LCOV_EXCL_START
+
+#include <crm/common/xml_compat.h>
+
+gboolean
+add_message_xml(xmlNode *msg, const char *field, xmlNode *xml)
+{
+ xmlNode *holder = pcmk__xe_create(msg, field);
+
+ pcmk__xml_copy(holder, xml);
+ return TRUE;
+}
+
+xmlNode *
+get_message_xml(const xmlNode *msg, const char *field)
+{
+ xmlNode *child = pcmk__xe_first_child(msg, field, NULL, NULL);
+
+ return pcmk__xe_first_child(child, NULL, NULL, NULL);
+}
+
+// LCOV_EXCL_STOP
+// End deprecated API