tmp1 = create_node_state(xmlGetProp(node_entry, "id"), "down", NULL, NULL);
const char *state   = "down"; const char *node_id = xmlGetProp(node_entry, "id");  gpointer a_node = g_hash_table_lookup(fsa_membership_copy->members, node_id);
do_send_welcome(long long action,		enum crmd_fsa_cause cause,		enum crmd_fsa_state cur_state,		enum crmd_fsa_input current_input,		void *data){	int lpc = 0, size = 0, num_sent = 0;	oc_node_t *members;	gboolean was_sent = TRUE;	FNIN();	if(action & A_JOIN_WELCOME && data == NULL) {		cl_log(LOG_ERR,		       "Attempt to send welcome message "		       "without a message to reply to!");		FNRET(I_NULL);			} else if(action & A_JOIN_WELCOME) {		xmlNodePtr welcome = (xmlNodePtr)data;		const char *join_to = xmlGetProp(welcome, XML_ATTR_HOSTFROM);		if(join_to != NULL) {/*			xmlNodePtr update =				create_node_state(new_node, "active", "active", NULL);			xmlNodePtr tmp1 = create_cib_fragment(update, NULL);			send_request(NULL, tmp1, "update", NULL, CRM_SYSTEM_DCIB);*/						send_request(NULL, NULL, CRM_OPERATION_WELCOME,				     join_to, CRM_SYSTEM_CRMD);					}				FNRET(I_NULL);	}// welcome everyone...	/* Give everyone a chance to join before invoking the PolicyEngine */	stopTimer(integration_timer);	startTimer(integration_timer);		members = fsa_membership_copy->members;	size = fsa_membership_copy->members_size;		if(joined_nodes != NULL) {		g_hash_table_destroy(joined_nodes);		joined_nodes = g_hash_table_new(&g_str_hash, &g_str_equal);			}	// reset everyones status back to down in the CIB	xmlNodePtr cib_copy = get_cib_copy();	xmlNodePtr tmp1 = get_object_root(XML_CIB_TAG_STATUS, cib_copy);	xmlNodePtr node_entry = tmp1->children;	xmlNodePtr update = NULL;	while(node_entry != NULL){		tmp1 = create_node_state(xmlGetProp(node_entry, "id"),					 "down", NULL, NULL);		node_entry = node_entry->next;				if(update == NULL) {			update = tmp1;		} else {			update = xmlAddSibling(update, tmp1);		}	}	if(update != NULL) {		xml_message_debug(update, "creating fragment for...");		tmp1 = create_cib_fragment(update, NULL);		send_request(NULL, tmp1, "update", NULL, CRM_SYSTEM_DCIB);			}		free_xml(tmp1);	free_xml(update);	free_xml(cib_copy);		for(; members != NULL && lpc < size; lpc++) {		const char *new_node = members[lpc].node_uname;		if(strcmp(fsa_our_uname, new_node) == 0) {			// dont send one to ourselves			continue;		}		CRM_DEBUG("Sending welcome message to %s (%d)",			   new_node, was_sent);		num_sent++;		was_sent = was_sent			&& send_request(NULL, NULL, CRM_OPERATION_WELCOME,					new_node, CRM_SYSTEM_CRMD);		CRM_DEBUG("Sent welcome message to %s (%d)",			   new_node, was_sent);	}	if(was_sent == FALSE)		FNRET(I_FAIL);/* No point hanging around in S_INTEGRATION if we're the only ones here! */	if(num_sent == 0) {		// that was the last outstanding join ack)		cl_log(LOG_INFO,"That was the last outstanding join ack");		FNRET(I_SUCCESS);	} else {		cl_log(LOG_DEBUG,		       "Still waiting on %d outstanding join acks",		       num_sent);		//dont waste time by invoking the pe yet;	}		FNRET(I_NULL);}