static int fwd_server_count_instances(const qeocore_reader_t *reader) { qeo_retcode_t rc = QEO_OK; qeocore_filter_t filter = { 0 }; qeocore_data_t *data; int cnt = 0; data = qeocore_reader_data_new(reader); if (NULL != data) { filter.instance_handle = DDS_HANDLE_NIL; while (1) { rc = qeocore_reader_read(reader, &filter, data); if (QEO_OK == rc) { filter.instance_handle = qeocore_data_get_instance_handle(data); cnt++; #ifdef DEBUG { const org_qeo_system_Forwarder_t *fwd = qeocore_data_get_data(data); qeo_log_d("forwarder %d : id=%" PRIx64 " -> %s", cnt, fwd->deviceId, (fwd->deviceId == reader->entity.factory->qeo_id.device_id ? "self" : "other")); } #endif qeocore_data_reset(data); continue; } else if (QEO_ENODATA == rc) { rc = QEO_OK; } /* QEO_ENODATA or error */ break; } qeocore_data_free(data); } if (QEO_OK == rc) { qeo_log_i("found %d local forwarders", cnt); } else { qeo_log_e("failed to read all local forwarders"); } return cnt; }
qeo_retcode_t qeo_state_reader_foreach(const qeo_state_reader_t *reader, qeo_iterate_callback cb, uintptr_t userdata) { qeocore_reader_t *r = (qeocore_reader_t *)reader; qeo_retcode_t rc = QEO_OK; if ((NULL == r) || (NULL == cb)) { rc = QEO_EINVAL; } else { qeocore_filter_t filter = { 0 }; qeo_iterate_action_t action = QEO_ITERATE_CONTINUE; qeocore_data_t *data; data = qeocore_reader_data_new(r); if (NULL == data) { rc = QEO_ENOMEM; } else { filter.instance_handle = DDS_HANDLE_NIL; while (1) { rc = qeocore_reader_read(r, &filter, data); if (QEO_OK == rc) { filter.instance_handle = qeocore_data_get_instance_handle(data); if (QEO_ITERATE_CONTINUE == action) { action = cb(qeocore_data_get_data(data), userdata); } qeocore_data_reset(data); } else if (QEO_ENODATA == rc) { rc = QEO_OK; break; } } qeocore_data_free(data); } } return rc; }
static void on_data_available(const qeocore_reader_t *reader, const qeocore_data_t *data, uintptr_t userdata) { switch (qeocore_data_get_status(data)) { case QEOCORE_DATA: { org_qeo_dynamic_qdm_test_TypeWithStructs_t *t = (org_qeo_dynamic_qdm_test_TypeWithStructs_t *) qeocore_data_get_data(data); /* verify struct TODO */ assert(NULL != t); /* release main thread */ sem_post(&_sync); break; } case QEOCORE_NO_MORE_DATA: /* release main thread */ sem_post(&_sync_nodata); break; default: abort(); break; } }
void on_regcred_available(const qeocore_reader_t *reader, const qeocore_data_t *data, uintptr_t userdata) { log_verbose("%s entry (%d)", __FUNCTION__, qeocore_data_get_status(data)); switch (qeocore_data_get_status(data)) { case QEOCORE_DATA: { org_qeo_system_RegistrationCredentials_t *t = (org_qeo_system_RegistrationCredentials_t *)qeocore_data_get_data(data); /* verify struct */ validate_regcred(_current_regcred, t, false); /* release main thread */ sem_post(&_sync); break; } case QEOCORE_NO_MORE_DATA: break; case QEOCORE_REMOVE: { org_qeo_system_RegistrationCredentials_t *t = (org_qeo_system_RegistrationCredentials_t *)qeocore_data_get_data(data); /* verify struct */ validate_regcred(_current_regcred, t, true); /* release main thread */ sem_post(&_sync); break; } case QEOCORE_NOTIFY: sem_post(&_notify_sync); break; default: abort(); /* error */ } log_verbose("%s exit", __FUNCTION__); }