}
do_cib_invoke(long long action,	      enum crmd_fsa_cause cause,	      enum crmd_fsa_state cur_state,	      enum crmd_fsa_input current_input,	      void *data){	xmlNodePtr cib_msg = NULL;	xmlNodePtr answer = NULL;	xmlNodePtr tmp1 = NULL;	xmlNodePtr tmp2 = NULL;	xmlNodePtr new_options = NULL;	const char *req_from;	const char *section = NULL;	FNIN();	if(data != NULL)		cib_msg = (xmlNodePtr)data;		if(action & A_CIB_INVOKE) {		const char *op = get_xml_attr(cib_msg, XML_TAG_OPTIONS,					      XML_ATTR_OP, TRUE);		if(safe_str_eq(op, CRM_OPERATION_SHUTDOWN_REQ)){			// create update section			tmp2 =				create_xml_node(NULL, XML_CIB_TAG_STATE);			req_from =				xmlGetProp(cib_msg, XML_ATTR_HOSTFROM);						set_xml_property_copy(tmp1, "id", req_from);			set_xml_property_copy(tmp1, "exp_state", "shutdown");			// create fragment			tmp1 = create_cib_fragment(tmp2, NULL);						// add to cib_msg			add_node_copy(cib_msg, tmp1);			free_xml(tmp2);			free_xml(tmp1);		}		set_xml_property_copy(cib_msg, XML_ATTR_SYSTO, "cib");		answer = process_cib_message(cib_msg, TRUE);		if(relay_message(answer, TRUE) == FALSE) {			cl_log(LOG_ERR, "Confused what to do with cib result");			xml_message_debug(answer, "Couldnt route: ");		}		if(op != NULL && AM_I_DC		   && (strcmp(op, CRM_OPERATION_CREATE) == 0		       || strcmp(op, CRM_OPERATION_UPDATE) == 0		       || strcmp(op, CRM_OPERATION_DELETE) == 0		       || strcmp(op, CRM_OPERATION_REPLACE) == 0		       || strcmp(op, CRM_OPERATION_WELCOME) == 0		       || strcmp(op, CRM_OPERATION_SHUTDOWN_REQ) == 0		       || strcmp(op, CRM_OPERATION_ERASE) == 0)) {			FNRET(I_CIB_UPDATE);			}		if(op == NULL) {			xml_message_debug(cib_msg, "Invalid CIB Message");		}							// check the answer, see if we are interested in it also#if 0		if(interested in reply) {			put_message(answer);			FNRET(I_REQUEST);		}#endif		free_xml(answer);		/* experimental */	} else if(action & A_CIB_INVOKE_LOCAL) {		answer = process_cib_message(cib_msg, TRUE);		put_message(answer);		FNRET(I_REQUEST);	} else if(action & A_CIB_BUMPGEN) {   		// check if the response was ok before next bit		section = get_xml_attr(cib_msg, XML_TAG_OPTIONS,				       XML_ATTR_FILTER_TYPE, FALSE);				/* set the section so that we dont always send the		 * whole thing		 */		if(section != NULL) {			new_options = set_xml_attr(NULL, XML_TAG_OPTIONS,						   XML_ATTR_FILTER_TYPE,						   section, TRUE);		}				answer = process_cib_request(CRM_OPERATION_BUMP,					     new_options, NULL);		free_xml(new_options);		if(answer == NULL) {			cl_log(LOG_ERR, "Result of BUMP in %s was NULL",			       __FUNCTION__);			FNRET(I_FAIL);		}		send_request(NULL, answer, CRM_OPERATION_REPLACE,			     NULL, CRM_SYSTEM_CRMD);				free_xml(answer);	} else {		cl_log(LOG_ERR, "Unexpected action %s in %s",		       fsa_action2string(action), __FUNCTION__);	}			FNRET(I_NULL);}