crm_debug("c0) announce");
do_cl_join_announce(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){	ha_msg_input_t *input = fsa_typed_data(fsa_dt_ha_msg);		/* Once we hear from the DC, we can stop the timer	 *	 * This timer was started either on startup or when a node	 * left the CCM list	 */	/* dont announce if we're in one of these states */	if(cur_state != S_PENDING) {		crm_warn("Do not announce ourselves in state %s",			 fsa_state2string(cur_state));		return I_NULL;	}	if(AM_I_OPERATIONAL) {		const char *hb_from = cl_get_string(			input->msg, F_CRM_HOST_FROM);		if(hb_from == NULL) {			crm_err("Failed to determin origin of hb message");			register_fsa_error(C_FSA_INTERNAL, I_FAIL, NULL);			return I_NULL;		}		if(fsa_our_dc == NULL) {			crm_info("Set DC to %s", hb_from);			fsa_our_dc = crm_strdup(hb_from);		} else if(safe_str_eq(hb_from, fsa_our_dc)) {			reannounce_count++;			if(fsa_join_reannouce > 0			   && reannounce_count < fsa_join_reannouce) {				crm_warn("Already announced to %s", hb_from);				return I_NULL;			}			crm_warn("Re-announcing ourselves to %s (%d times)",				 hb_from, reannounce_count);					} else {			crm_warn("We announced ourselves to %s, but are"				 " now receiving DC Heartbeats from %s",				 fsa_our_dc, hb_from);			/* reset the fsa_our_dc to NULL */			crm_warn("Resetting our DC to NULL after DC_HB"				 " from unrecognised node.");			crm_free(fsa_our_dc);			fsa_our_dc = NULL;			return I_NULL; /* for now, wait for the DC's					* to settle down					*/		}				reannounce_count = 0;		/* send as a broadcast */		{			HA_Message *req = create_request(			CRM_OP_ANNOUNCE, NULL, NULL,			CRM_SYSTEM_DC, CRM_SYSTEM_CRMD, NULL);			send_msg_via_ha(fsa_cluster_conn, req);		}		} else {		/* Delay announce until we have finished local startup */		crm_warn("Delaying announce until local startup is complete");		return I_NULL;	}		return I_NULL;}