#define CALLBACK_TIMEOUT_10S 10 * 1000 /**< 10 sec = 10 * 1000 * 1ms */
#define CALLBACK_TIMEOUT_5S 5 * 1000 /**< 5sec = 5 * 1000 * 1ms */
-#define RETRY_INTERVAL 100
-#define MAX_RETRY_COUNT 20
-
//#define TIMEOUT_USED
#define DEBUG_UUID
-static int _disc_mot_enb_devs(ma_service *service, int timeout);
-static int _disc_owned_devs(ma_service *service, int timeout);
-
/* '_' for separaing from the same constant variable in srmresourcestrings.c */
static const char* SVR_DB_FILE_NAME = "oic_svr_db_ma.dat";
static const char* PRVN_DB_FILE_NAME = "oic_pdm_ma.db";
char *rnd_pin; /**< Random PIN */
int rnd_pin_len; /**< Random PIN length */
- int g_motdev_retry_cnt; /* MOT Enabled discovery retry count */
- int g_mowned_retry_cnt; /* My owned discovery retry count */
} ma_subowner_s;
ma_subowner_s *g_client;
}
#endif
-static gboolean __retry_device_discovery(gpointer data)
-{
- ma_req_cb_s *con = (ma_req_cb_s *)data;
-
- if (con->cid == MA_DISC_MOT_ENB_DEVS) {
- MA_LOGI("Retry to find MOT enabled devices retry count %d",
- g_client->g_motdev_retry_cnt);
- _disc_mot_enb_devs(con->userdata, con->timeout);
- } else if (con->cid == MA_DISC_MOWNED_DEVS) {
- MA_LOGI("Retry to find My owned devices retry count %d",
- g_client->g_mowned_retry_cnt);
- _disc_owned_devs(con->userdata, con->timeout);
- }
-
- return FALSE;
-}
-
-static void _update_mot_dev_list(ma_req_cb_s *con, OCProvisionDev_t *list)
-{
- OCProvisionDev_t *iter = NULL;
- OCProvisionDev_t *dev_list;
- GVariantBuilder builder;
-
- if (con->cid == MA_DISC_MOT_ENB_DEVS)
- dev_list = g_client->g_motdev_list;
- else if (con->cid == MA_DISC_MOWNED_DEVS)
- dev_list = g_client->g_mowned_list;
- else
- return;
-
- iter = list;
-
- while (iter) {
- OicUuid_t *uuid = &iter->doxm->deviceID;
-
- if (!_get_dev_by_uuid(dev_list, uuid)) {
- MA_LOGD("Add device %s to list", _get_readable_uuid(uuid));
- OCProvisionDev_t *temp;
- temp = _clone_ocprovision_dev(iter);
-
- /* Notify Mot Enabled Device added */
- g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
- g_variant_builder_add(&builder, "{sv}", "deviceId",
- g_variant_new_string(_get_readable_uuid(uuid)));
- g_variant_builder_add(&builder, "{sv}", "adapter",
- g_variant_new_uint32(iter->endpoint.adapter));
- g_variant_builder_add(&builder, "{sv}", "flags",
- g_variant_new_int32(iter->endpoint.flags));
- g_variant_builder_add(&builder, "{sv}", "port",
- g_variant_new_uint16(iter->endpoint.port));
- g_variant_builder_add(&builder, "{sv}", "addr",
- g_variant_new_string(iter->endpoint.addr));
- g_variant_builder_add(&builder, "{sv}", "ifindex",
- g_variant_new_int32(iter->endpoint.ifindex));
- g_variant_builder_add(&builder, "{sv}", "routeData",
- g_variant_new_string(iter->endpoint.routeData));
- g_variant_builder_add(&builder, "{sv}", "remoteId",
- g_variant_new_string(iter->endpoint.remoteId));
-
- g_variant_builder_add(&builder, "{sv}", "connType",
- g_variant_new_uint32(iter->connType));
- g_variant_builder_add(&builder, "{sv}", "securePort",
- g_variant_new_uint16(iter->securePort));
-#ifdef WITH_TCP
- g_variant_builder_add(&builder, "{sv}", "tcpPort",
- g_variant_new_uint16(iter->tcpPort));
-#endif
- g_variant_builder_add(&builder, "{sv}", "secVer",
- g_variant_new_string(iter->secVer));
- g_variant_builder_add(&builder, "{sv}", "devStatus",
- g_variant_new_uint32(iter->devStatus));
-
- if (con->cid == MA_DISC_MOT_ENB_DEVS) {
- ma_notify_mot_enb_dev_added(g_variant_builder_end(&builder));
- LL_APPEND(g_client->g_motdev_list, temp);
- } else {
- ma_notify_mowned_dev_added(g_variant_builder_end(&builder));
- LL_APPEND(g_client->g_mowned_list, temp);
- }
- } else {
- MA_LOGD("Device %s already exist", _get_readable_uuid(uuid));
- }
-
- iter = iter->next;
- }
-}
-
static gpointer _disc_mot_env_devs_func(gpointer data)
{
int ret = OC_STACK_OK;
- OCProvisionDev_t *list = NULL;
ma_req_cb_s *con = (ma_req_cb_s *)data;
ma_check_null_ret_error("con", con, NULL);
MA_LOGI("Discovering Multiple Ownership Transfer enabled Devices on Network..");
- g_client->g_motdev_retry_cnt += 1;
+ /* delete mot device lists before updating them */
+ _remove_mot_client();
g_mutex_lock(&iotivity_mutex);
- OCDiscoverMultipleOwnerEnabledDevices(con->timeout, &list);
+ OCDiscoverMultipleOwnerEnabledDevices(con->timeout,
+ &g_client->g_motdev_list);
g_mutex_unlock(&iotivity_mutex);
if (OC_STACK_OK != ret) {
MA_LOGE( "OCDiscoverMultipleOwnerEnalbedDevices API error");
goto DISC_MOT_ENB_DEVS_END;
}
- _update_mot_dev_list(con, list);
-
- if (list)
- OCDeleteDiscoveredDevices(list);
-
- /* Notify Found Devices when first discovery try is finished */
- if (g_client->g_motdev_retry_cnt == 1)
- __notify_found_devs(con);
-
- if (g_client->g_motdev_retry_cnt <= MAX_RETRY_COUNT) {
- g_timeout_add(RETRY_INTERVAL, __retry_device_discovery, con);
-
- return NULL;
- }
+ __notify_found_devs(con);
DISC_MOT_ENB_DEVS_END:
- g_client->g_motdev_retry_cnt = 0;
-
_request_cleanup(con);
g_thread_exit(GINT_TO_POINTER (1));
con = g_malloc0(sizeof(ma_req_cb_s));
if (NULL == con) {
MA_LOGE( "g_malloc0() Fail=%d", errno);
+ /* Unset d2ds status 'pending' */
+ g_atomic_int_set(&service->pending, 0);
return MA_ERROR_OUT_OF_MEMORY;
}
static gpointer _disc_owned_devs_func(gpointer data)
{
OCStackResult ret = OC_STACK_OK;
- OCProvisionDev_t *list = NULL;
ma_req_cb_s *con = (ma_req_cb_s *)data;
ma_check_null_ret_error("g_client", g_client, NULL);
- MA_LOGD("Discovering Multiple Owned Devices");
+ /* delete un/owned device lists before updating them */
+ _remove_owned_client();
- g_client->g_mowned_retry_cnt += 1;
+ MA_LOGD("Discovering Multiple Owned Devices");
g_mutex_lock(&iotivity_mutex);
- ret = OCDiscoverMultipleOwnedDevices(con->timeout, &list);
+ ret = OCDiscoverMultipleOwnedDevices(con->timeout,
+ &g_client->g_mowned_list);
g_mutex_unlock(&iotivity_mutex);
if (OC_STACK_OK != ret) {
MA_LOGE( "OCDiscoverMultipleOwnerEnabledDevices API error");
goto DISC_OWNED_DEVS_END;
}
- _update_mot_dev_list(con, list);
-
- if (list)
- OCDeleteDiscoveredDevices(list);
-
- /* Notify Found Devices when first discovery try is finished */
- if (g_client->g_mowned_retry_cnt == 1)
- __notify_found_devs(con);
-
- if (g_client->g_mowned_retry_cnt <= MAX_RETRY_COUNT) {
- g_timeout_add(RETRY_INTERVAL, __retry_device_discovery, con);
-
- return NULL;
- }
+ __notify_found_devs(con);
DISC_OWNED_DEVS_END:
- g_client->g_mowned_retry_cnt = 0;
_request_cleanup(con);
g_thread_exit(GINT_TO_POINTER (1));
con = g_malloc0(sizeof(ma_req_cb_s));
if (NULL == con) {
MA_LOGE( "g_malloc0() Fail=%d", errno);
+ /* Unset d2ds status 'pending' */
+ g_atomic_int_set(&service->pending, 0);
return MA_ERROR_OUT_OF_MEMORY;
}
MA_LOGD("[IPC] Discovery MOT enabled devices");
- if (g_client->g_motdev_retry_cnt > 0) {
- MA_LOGI("Previous discovery is ongoing, reset retry count");
- g_client->g_motdev_retry_cnt = 0;
+ /* If we are working now? */
+ if (g_atomic_int_get(&service->pending))
return MA_ERROR_IN_PROGRESS;
- }
- /* delete mot device lists before updating them */
- _remove_mot_client();
+ /* Set d2ds status 'pending' */
+ g_atomic_int_set(&service->pending, 1);
ret = _disc_mot_enb_devs(service, timeout);
MA_LOGD("[IPC] Discovery Owned devices");
- if (g_client->g_mowned_retry_cnt > 0) {
- MA_LOGI("Previous discovery is ongoing, reset retry count");
- g_client->g_mowned_retry_cnt = 0;
+ /* If we are working now? */
+ if (g_atomic_int_get(&service->pending))
return MA_ERROR_IN_PROGRESS;
- }
- /* delete un/owned device lists before updating them */
- _remove_owned_client();
+ /* Set d2ds status 'pending' */
+ g_atomic_int_set(&service->pending, 1);
ret = _disc_owned_devs(service, timeout);