op = xmlGetProp(action, XML_CRM_ATTR_OP);
process_message(xmlNodePtr root_xml_node,		gboolean originated_locally,		const char *src_node_name){	const char *crm_msg_reference = xmlGetProp(root_xml_node,						   XML_MSG_ATTR_REFERENCE);	const char *sys_from = xmlGetProp(root_xml_node,					  XML_MSG_ATTR_SYSFROM);	const char *sys_to   = xmlGetProp(root_xml_node,					  XML_MSG_ATTR_SYSTO);	const char *op       = NULL;	xmlNodePtr action = NULL;	gboolean processing_complete = FALSE;	FNIN();	if (root_xml_node == NULL)	{		cl_log(LOG_INFO, "Message was not valid... discarding message.");		FNOUT();	}    	// try passing the buck first	processing_complete = relay_message(root_xml_node,					    originated_locally,					    src_node_name);	/* if that doesn't work, the message is *definitly* for us	 * (where us == dc||crmd)	 */	if (processing_complete == FALSE) {		gboolean dc_mode = FALSE;		action = validate_crm_message(root_xml_node,					      NULL,					      NULL,					      NULL);		op = xmlGetProp(action, XML_CRM_ATTR_OP);  		if (strcmp(CRM_SYSTEM_DC, sys_to) == 0) {			dc_mode = TRUE;			op = xmlGetProp(action, XML_DC_ATTR_OP);		}		if (op == NULL) {			cl_log(LOG_ERR,			       "Invalid XML message.  "			       "No value %s operation for specified in (%s).",			       dc_mode?CRM_SYSTEM_DC:CRM_SYSTEM_CRMD,			       root_xml_node->name); 		} else {			processing_complete =				crm_dc_process_message(root_xml_node,						       action,						       src_node_name,						       sys_from,						       sys_to,						       op,						       dc_mode);		}			}	if (processing_complete != TRUE)		cl_log(LOG_ERR, "Did not know what to do with message "		       "(crm_msg_reference=%s)", crm_msg_reference);	else		CRM_DEBUG2("Processing complete for message (crm_msg_reference=%s)",			   crm_msg_reference);	FNOUT();}