static void fwd_client_on_data(const qeocore_reader_t *reader, const qeocore_data_t *data, uintptr_t userdata) { qeo_factory_t *factory = (qeo_factory_t *)userdata; qeocore_data_status_t status; org_qeo_system_Forwarder_t *fwd_data; org_qeo_system_ForwarderLocator_t fwd_locator; qeo_mgmt_client_locator_t locator; status = qeocore_data_get_status(data); if (QEOCORE_DATA == status) { fwd_data = (org_qeo_system_Forwarder_t *)qeocore_data_get_data(data); /* check locator */ if ((NULL != fwd_data) && (DDS_SEQ_LENGTH(fwd_data->locator) > 0)) { fwd_locator = DDS_SEQ_ITEM(fwd_data->locator, 0); locator.type = fwd_locator.type; locator.port = fwd_locator.port; locator.address = fwd_locator.address; client_state_machine_eval(factory, CLIENT_EVENT_FWD_DATA_RECEIVED, &locator, fwd_data->deviceId); } } else if (QEOCORE_REMOVE == status) { fwd_data = (org_qeo_system_Forwarder_t *)qeocore_data_get_data(data); if (NULL != fwd_data) { client_state_machine_eval(factory, CLIENT_EVENT_FWD_DATA_REMOVED, NULL, fwd_data->deviceId); } } }
/** This callback will be called for each forwarder in the list received from the management client. */ qeo_mgmt_client_retcode_t forwarder_cb(qeo_mgmt_client_forwarder_t* forwarder, void *cookie) { qeo_factory_t *factory = (qeo_factory_t *) cookie; qeo_mgmt_client_locator_t *locator = NULL; int i = 0; /* Get the IP address and port from the qeo_mgmt_client_forwarder_t info. */ if ((forwarder != NULL) && (forwarder->nrOfLocators > 0)) { qeo_log_d("received %d locators", forwarder->nrOfLocators); for (i = 0, locator = forwarder->locators; i < forwarder->nrOfLocators; i++, locator++) { qeo_log_d("locator %d", i); if (locator != NULL) { qeo_log_i("valid locator: %s:%d", locator->address, locator->port); if (factory->fwd.u.client.state == FWD_CLIENT_STATE_WAIT) { qeo_log_i("Going to use this forwarder"); flags_t flags = { .forwarding_enabled = true }; client_state_machine_eval(factory, CLIENT_EVENT_LOC_SRV_DATA_RECEIVED, locator, forwarder->deviceID, flags); } else { /* TODO: at the moment only one forwarder is taken into account. */ qeo_log_i("Going to ignore this forwarder as not the first in the list"); } break; }
/** This callback will be called for each forwarder in the list received from the management client. */ qeo_mgmt_client_retcode_t forwarder_cb(qeo_mgmt_client_forwarder_t* forwarder, void *cookie) { qeo_factory_t *factory = (qeo_factory_t *) cookie; qeo_mgmt_client_locator_t *locator = NULL; int i = 0; /* Get the IP address and port from the qeo_mgmt_client_forwarder_t info. */ if ((forwarder != NULL) && (forwarder->nrOfLocators > 0)) { qeo_log_i("received %d locators", forwarder->nrOfLocators); for (i = 0, locator = forwarder->locators; i < forwarder->nrOfLocators; i++, locator++) { qeo_log_i("locator %d", i); if (locator != NULL) { qeo_log_i("valid locator"); /* TODO: at the moment only one forwarder is taken into account. */ if (factory->fwd.locator == NULL) { client_state_machine_eval(factory, CLIENT_EVENT_LOC_SRV_DATA_RECEIVED, locator, forwarder->deviceID); } } } qeo_mgmt_client_free_forwarder(forwarder); } return QMGMTCLIENT_OK; }
static void fwd_client_discovery_timeout(uintptr_t userdata) { qeo_factory_t *factory = (qeo_factory_t *)userdata; client_state_machine_eval(factory, CLIENT_EVENT_TIMEOUT, NULL, -1); }