xmlSetProp(xml_root_node, XML_DC_ATTR_OP, ping_type); xmlSetProp(xml_root_node, XML_MSG_ATTR_SYSTO, CRM_SYSTEM_DC);
set_xml_property_copy(xml_root_node, XML_DC_ATTR_OP, ping_type); set_xml_property_copy(xml_root_node, XML_MSG_ATTR_SYSTO, CRM_SYSTEM_DC);
do_work(ll_cluster_t *hb_cluster){    /* construct the request */    xmlNodePtr xml_root_node = NULL;    const char *dest_node = NULL;    if(DO_DAEMON == TRUE && DO_QUERY == TRUE)    {	cl_log(LOG_DEBUG, "Querying the CIB");	char *obj_type_parent = pluralSection();		CRM_DEBUG2("Querying the CIB for section: %s", obj_type_parent);	xml_root_node = xmlNewNode(NULL, XML_REQ_TAG_DC);	xmlSetProp(xml_root_node, XML_DC_ATTR_OP, "cib_op");	xmlNewChild(xml_root_node, NULL, XML_REQ_TAG_CIB, NULL);	xmlSetProp(xml_root_node->children, XML_CIB_ATTR_OP       , "query");	xmlSetProp(xml_root_node->children, XML_ATTR_VERBOSE      , verbose);	xmlSetProp(xml_root_node->children, XML_CIB_ATTR_SECTION, obj_type_parent);	dest_node = status;	CRM_DEBUG2("CIB query creation %s", xml_root_node==NULL?"failed.":"passed.");    }    else if(DO_DAEMON == FALSE && DO_CREATE == TRUE)    {	xml_root_node = handleCreate();    }    else if(DO_DAEMON == FALSE && DO_DELETE == TRUE)    {	xml_root_node = handleDelete();    }    else if(DO_DAEMON == FALSE && DO_MODIFY == TRUE)    {	xml_root_node = handleModify();    }    else if(DO_DAEMON == TRUE && DO_HEALTH == TRUE)    {	cl_log(LOG_DEBUG, "Querying the system");/*<!ATTLIST dc_request          dc_operation	(noop|ping|deep_ping|dc_query|cib_op)	'noop'	  reference	#CDATA          timeout       #CDATA          '0'>*/	if(status != NULL)	{	    const char* ping_type = "ping";	    if(BE_VERBOSE)	    {		ping_type = "ping_deep";		if(status != NULL) expected_responses = 2; // 5; // CRM/DC, LRMD, CIB, PENGINE, TENGINE		else expected_responses = -1; // wait until timeout instead	    }	    	    if(status != NULL)	    {		xml_root_node = xmlNewNode(NULL, XML_REQ_TAG_CRM);		xmlSetProp(xml_root_node, XML_CRM_ATTR_OP, ping_type);		xmlSetProp(xml_root_node, XML_MSG_ATTR_SYSTO, CRM_SYSTEM_CRMD);	    }	    else	    {		xml_root_node = xmlNewNode(NULL, XML_REQ_TAG_DC);		xmlSetProp(xml_root_node, XML_DC_ATTR_OP, ping_type);		xmlSetProp(xml_root_node, XML_MSG_ATTR_SYSTO, CRM_SYSTEM_DC);	    }	    xmlSetProp(xml_root_node, XML_ATTR_TIMEOUT, "0");	    dest_node = status;	}	else	    cl_log(LOG_INFO, "Cluster-wide health not available yet");    }    CRM_DEBUG2("Creation of request %s", xml_root_node==NULL?"failed.  Aborting.":"passed.  Sending.");/* send it */    if(xml_root_node != NULL && crmd_channel != NULL)    {//	CRM_DEBUG2("sending message: %s", xml_root_node->name);	const char *sys_to = CRM_SYSTEM_DC;	if(dest_node != NULL)	    sys_to = CRM_SYSTEM_CRMD;		send_ipc_request(crmd_channel, xml_root_node,			 dest_node, sys_to,			 daemon_name, adminuid,			 msg_reference);    }    else if(crmd_channel == NULL)    {	cl_log(LOG_ERR, "The IPC connection is not valid, cannot send anything");	return -1;    }    else    {	// no message to send... error	cl_log(LOG_ERR, "No message to send");	return -1;    }    return 1;    }