hb_from, CRM_SYSTEM_DC, NULL);
NULL, CRM_SYSTEM_DC, NULL);
do_cl_join_announce(long long action,	    enum crmd_fsa_cause cause,	    enum crmd_fsa_state cur_state,	    enum crmd_fsa_input current_input,	    void *data){	xmlNodePtr msg = (xmlNodePtr)data;		/* 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 = xmlGetProp(msg, XML_ATTR_HOSTFROM);		if(hb_from == NULL) {			crm_err("Failed to determin origin of hb message");			return I_FAIL;		}		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)) {			crm_warn("Already announced to %s", hb_from);			return I_NULL;		} 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					*/		}		send_request(NULL, NULL, CRM_OP_ANNOUNCE,			     hb_from, CRM_SYSTEM_DC, NULL);	} else {		/* Delay announce until we have finished local startup */		crm_warn("Delaying announce until local startup is complete");		return I_NULL;	}		return I_NULL;}