cl_get_int(msg, F_CIB_CALLID, &call_id); cl_get_int(msg, F_CIB_RC, &rc);
ha_msg_value_int(msg, F_CIB_CALLID, &call_id); ha_msg_value_int(msg, F_CIB_RC, &rc);
cib_native_rcvmsg(cib_t* cib, int blocking){	const char *type = NULL;	struct ha_msg* msg = NULL;	IPC_Channel *ch = cib_native_channel(cib);	/* if it is not blocking mode and no message in the channel, return */	if (blocking == 0 && cib_native_msgready(cib) == FALSE) {		crm_debug("No message ready and non-blocking...");		return 0;	} else if (cib_native_msgready(cib) == FALSE) {		crm_debug("Waiting for message from CIB service...");		ch->ops->waitin(ch);	}		/* get the message */	msg = msgfromIPC_noauth(ch);	if (msg == NULL) {		crm_warn("Received a NULL msg from CIB service.");		return 0;	}	/* do callbacks */	type = cl_get_string(msg, F_TYPE);	crm_trace("Activating %s callbacks...", type);		if(cib->op_callback == NULL) {		crm_debug("No OP callback set, ignoring reply");	} else {		int rc = 0;		int call_id = 0;		xmlNodePtr output = NULL;		const char *output_s = NULL;		cl_get_int(msg, F_CIB_CALLID, &call_id);		cl_get_int(msg, F_CIB_RC, &rc);		output_s = cl_get_string(msg, F_CIB_CALLDATA);		if(output_s != NULL) {			output = string2xml(output_s);		}		cib->op_callback(msg, call_id, rc, output);		crm_trace("OP callback activated.");	}	ha_msg_del(msg);	return 1;}