XML_BOOLEAN_NO, NULL, NULL);
XML_BOOLEAN_NO, NULL, NULL, NULL);
do_ccm_event(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 return_input = I_NULL;	oc_ed_t *event = NULL;	const oc_ev_membership_t *oc = NULL;	if(msg_data == NULL || msg_data->data == NULL) {		crm_err("No data provided to FSA function");		return I_FAIL;	} else if(msg_data->fsa_cause != C_CCM_CALLBACK) {		crm_err("FSA function called in response to incorect input");		return I_NULL;	}	event = ((struct crmd_ccm_data_s *)msg_data->data)->event;	oc = ((struct crmd_ccm_data_s *)msg_data->data)->oc;		crm_info("event=%s", 	       *event==OC_EV_MS_NEW_MEMBERSHIP?"NEW MEMBERSHIP":	       *event==OC_EV_MS_NOT_PRIMARY?"NOT PRIMARY":	       *event==OC_EV_MS_PRIMARY_RESTORED?"PRIMARY RESTORED":	       *event==OC_EV_MS_EVICTED?"EVICTED":	       "NO QUORUM MEMBERSHIP");		if(CCM_EVENT_DETAIL) {		ccm_event_detail(oc, *event);	}	if (OC_EV_MS_EVICTED == *event) {		/* get out... NOW! */		return_input = I_SHUTDOWN;	}		if(return_input != I_SHUTDOWN) {		/* My understanding is that we will never get both		 * node leaving *and* node joining callbacks at the		 * same time.		 *		 * This logic would need to change if this is not		 * the case		 */		if(oc->m_n_out != 0) {			if(AM_I_DC) {				int lpc = 0;				int offset = oc->m_out_idx;				for(lpc=0; lpc < oc->m_n_out; lpc++) {					oc_node_t *member = NULL;					xmlNodePtr node_state = NULL;					xmlNodePtr update = NULL;										if(member == NULL) {						continue;					}					node_state = create_node_state(						NULL,						oc->m_array[offset+lpc].node_uname,						XML_BOOLEAN_NO, NULL, NULL);					set_xml_property_copy(						node_state,						XML_CIB_ATTR_EXPSTATE, CRMD_JOINSTATE_DOWN);					update = create_cib_fragment(node_state, NULL);					invoke_local_cib(NULL, update, CRM_OP_UPDATE);					free_xml(update);					free_xml(node_state);				}			}		} else if(oc->m_n_in !=0) {			/* delay the I_NODE_JOIN until they acknowledge our			 * DC status and send us their CIB			 */		} else {			crm_warn("So why are we here?  What CCM event happened?");		}	}	return return_input;}