mot-agent: Remove discovery retry mechanism
authorSaurav Babu <saurav.babu@samsung.com>
Mon, 26 Feb 2018 07:27:24 +0000 (12:57 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 2 Jul 2018 10:38:48 +0000 (19:38 +0900)
Signed-off-by: Saurav Babu <saurav.babu@samsung.com>
src/mot-agent/introspection/ma.xml
src/mot-agent/ma-service-interface.c
src/mot-agent/ma-service-interface.h
src/mot-agent/ma-subowner.c

index 4c49109b7b90497ceecc2dd55f67120d709f9313..efa6a34cd6bdf0c4f6077492ef9f70d8ab6bdc66 100644 (file)
         <signal name="disc_mot_enb_devs_done">\r
             <arg type="aa{sv}" name="list" direction="out"/>\r
         </signal>\r
-        <signal name="mot_enb_devs_added">\r
-            <arg type="a{sv}" name="device" direction="out"/>\r
-        </signal>\r
         <signal name="disc_mowned_devs_done">\r
             <arg type="aa{sv}" name="list" direction="out"/>\r
         </signal>\r
-        <signal name="mowned_devs_added">\r
-            <arg type="a{sv}" name="device" direction="out"/>\r
-        </signal>\r
         <signal name="mot_done">\r
             <arg type="i" name="result" direction="out"/>\r
         </signal>\r
index 59fba07e62f3c05743f23dda85ce3d2d82f74d5d..9298a8b3c064d0062b69f7ee3d371440c479df5d 100644 (file)
@@ -570,16 +570,6 @@ void ma_notify_mowned_devs(GVariant *devices)
        net_ma_emit_disc_mowned_devs_done(ma_dbus_get_object(), devices);\r
 }\r
 \r
-void ma_notify_mot_enb_dev_added(GVariant *device)\r
-{\r
-       net_ma_emit_mot_enb_devs_added(ma_dbus_get_object(), device);\r
-}\r
-\r
-void ma_notify_mowned_dev_added(GVariant *device)\r
-{\r
-       net_ma_emit_mowned_devs_added(ma_dbus_get_object(), device);\r
-}\r
-\r
 static void _ma_dbus_deinit(ma_service *service)\r
 {\r
        ma_check_null_ret("service", service);\r
index ac29cc3a24e58136cd3221c506a879e8c9ad21bb..e6082011499b332d8e165d12fec29fdedc22a1bd 100644 (file)
@@ -49,8 +49,6 @@ gboolean ma_service_interface_init(ma_service *service);
 void ma_service_interface_deinit(ma_service *service);\r
 void ma_notify_mot_env_devs(GVariant *devices);\r
 void ma_notify_mowned_devs(GVariant *devices);\r
-void ma_notify_mot_enb_dev_added(GVariant *device);\r
-void ma_notify_mowned_dev_added(GVariant *device);\r
 \r
 #ifdef __cplusplus\r
 }\r
index e126fbe2676b4d1586f77c4cba4e6a54e7133da8..65adf8fa9f306847d65538a6cc30567e1bec1565 100755 (executable)
 #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";
@@ -140,8 +134,6 @@ typedef struct _ma_subowner {
        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;
@@ -942,131 +934,30 @@ static gboolean _ma_timeout_cb(gpointer data)
 }
 #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));
@@ -1081,6 +972,8 @@ static int _disc_mot_enb_devs(ma_service *service, int timeout)
        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;
        }
 
@@ -1108,40 +1001,27 @@ static int _disc_mot_enb_devs(ma_service *service, int timeout)
 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));
 
@@ -1154,6 +1034,8 @@ static int _disc_owned_devs(ma_service *service, int timeout)
        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;
        }
 
@@ -2725,14 +2607,12 @@ int ma_request_disc_mot_enb_devs(ma_service *service, int timeout)
 
        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);
 
@@ -2747,14 +2627,12 @@ int ma_request_disc_owned_devs(ma_service *service, int 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);