free_xml(reply);
do_lrm_invoke(long long action,	      enum crmd_fsa_cause cause,	      enum crmd_fsa_state cur_state,	      enum crmd_fsa_input current_input,	      fsa_data_t *msg_data){	enum crmd_fsa_input next_input = I_NULL;	xmlNodePtr msg;	const char *operation = NULL;	char rid[64];	const char *id_from_cib = NULL;	const char *crm_op = NULL;	lrm_rsc_t *rsc = NULL;	msg = (xmlNodePtr)msg_data->data;			operation = get_xml_attr_nested(		msg, rsc_path, DIMOF(rsc_path) -3, XML_LRM_ATTR_TASK, TRUE);/*	xmlNodePtr tmp = find_xml_node_nested(msg, rsc_path, DIMOF(rsc_path) -3); *//*	operation = xmlGetProp(tmp, XML_LRM_ATTR_TASK); */	if(operation == NULL) {		crm_err("No value for %s in message at level %d.",			XML_LRM_ATTR_TASK, DIMOF(rsc_path) -3);		return I_NULL;	}		id_from_cib = get_xml_attr_nested(		msg, rsc_path, DIMOF(rsc_path) -2, XML_ATTR_ID, TRUE);	if(id_from_cib == NULL) {		crm_err("No value for %s in message at level %d.",			XML_ATTR_ID, DIMOF(rsc_path) -2);		return I_NULL;	}		/* only the first 16 chars are used by the LRM */	strncpy(rid, id_from_cib, 64);	rid[63] = 0;		crm_op = get_xml_attr(msg, XML_TAG_OPTIONS, XML_ATTR_OP, TRUE);		rsc = fsa_lrm_conn->lrm_ops->get_rsc(fsa_lrm_conn, rid);		if(crm_op != NULL && safe_str_eq(crm_op, "lrm_query")) {		xmlNodePtr data, reply;		data = do_lrm_query(FALSE);		reply = create_reply(msg, data);		relay_message(reply, TRUE);		free_xml(data);		free_xml(reply);	} else if(operation != NULL) {		next_input = do_lrm_rsc_op(rsc, rid, operation, msg);			} else {		next_input = I_ERROR;	}	return next_input;}