crm_log_xml_err(input->xml, "Bad command");
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){	const char *crm_op = NULL;	const char *operation = NULL;	enum crmd_fsa_input next_input = I_NULL;	ha_msg_input_t *input = fsa_typed_data(fsa_dt_ha_msg);			crm_op = cl_get_string(input->msg, F_CRM_TASK);			operation = get_xml_attr_nested(		input->xml, rsc_path, DIMOF(rsc_path) -3,		XML_LRM_ATTR_TASK, FALSE);		if(crm_op != NULL && safe_str_eq(crm_op, "lrm_query")) {		crm_data_t *data = do_lrm_query(FALSE);		HA_Message *reply = create_reply(input->msg, data);		if(relay_message(reply, TRUE) == FALSE) {			crm_err("Unable to route reply");			crm_log_message(LOG_ERR, reply);			crm_msg_del(reply);		}		free_xml(data);	} else if(operation != NULL) {		char rid[64];		lrm_rsc_t *rsc = NULL;		const char *id_from_cib = NULL;		if(cur_state == S_STOPPING || cur_state == S_TERMINATE) {			/* we will have already scheduled a stop */			crm_debug("Ignoring LRM operation while in state %s",				  fsa_state2string(cur_state));		}		id_from_cib = get_xml_attr_nested(			input->xml, 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;				rsc = fsa_lrm_conn->lrm_ops->get_rsc(fsa_lrm_conn, rid);		next_input = do_lrm_rsc_op(rsc, rid, operation, input->xml);			} else {		crm_err("Operation was neither a lrm_query, nor a rsc op.  %s",			crm_str(crm_op));		register_fsa_error(C_FSA_INTERNAL, I_ERROR, NULL);	}	return next_input;}