Provide pending request TRUE only for already registered but not verified device.
authorNishant Chaprana <n.chaprana@samsung.com>
Thu, 21 Nov 2019 14:12:36 +0000 (19:42 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Thu, 21 Nov 2019 23:49:25 +0000 (08:49 +0900)
- Problem: Pending request returns TRUE when last registered device which is not
           yet verified by plugin, even for different device.
- Cause: __uam_manager_is_request_pending() only checks for matching function
         before returning result.
- Solution: Match device_id for UAM_REQUEST_ADD_DEVICE before returning result.

Change-Id: Ie0d148f821932eb195547c47939917bb7bdbba60
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
packaging/ua-manager.spec
ua-daemon/src/ua-manager-request-handler.c

index e70cfd3..753c4bb 100644 (file)
@@ -1,6 +1,6 @@
 Name:       ua-manager
 Summary:    User awareness manager
-Version:    0.13.5
+Version:    0.13.6
 Release:    1
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
index d0d59e3..fb2d360 100644 (file)
@@ -700,7 +700,7 @@ static int __uam_manager_sync_request_handler(
        return result;
 }
 
-static gboolean __uam_manager_is_request_pending(int function)
+static gboolean __uam_manager_is_request_pending(int function, void *data)
 {
        FUNC_ENTRY;
        GSList *l;
@@ -711,8 +711,22 @@ static gboolean __uam_manager_is_request_pending(int function)
                if (!info)
                        continue;
 
-               if (info->function == function)
-                       return TRUE;
+               if (info->function == function) {
+                       switch (function) {
+                       case UAM_REQUEST_ADD_DEVICE:
+                       {
+                               const char *device_id = (const char *)data;
+                               uam_device_info_s *dev_info = (uam_device_info_s *)info->data;
+
+                               if (!g_strcmp0(device_id,
+                                              dev_info->device_id))
+                                       return TRUE;
+                       }
+                       break;
+                       default:
+                               return TRUE;
+                       };
+               }
        }
 
        FUNC_EXIT;
@@ -787,12 +801,6 @@ static int __uam_manager_async_request_handler(
                const char *account;
                uam_device_info_s dev_info;
 
-               if (__uam_manager_is_request_pending(UAM_REQUEST_ADD_DEVICE)) {
-                       UAM_ERR("Another request is already in progress");
-                       result = UAM_ERROR_NOW_IN_PROGRESS;
-                       break;
-               }
-
                account = (char *)g_variant_get_data(in_param1);
                __uam_manager_copy_params(in_param2,
                                &dev_info, sizeof(uam_device_info_s));
@@ -806,6 +814,13 @@ static int __uam_manager_async_request_handler(
                                dev_info.payload.duid, dev_info.payload.device_icon,
                                dev_info.payload.bt_mac);
 
+               if (__uam_manager_is_request_pending(UAM_REQUEST_ADD_DEVICE,
+                                                    dev_info.device_id)) {
+                       UAM_ERR("Another request is already in progress");
+                       result = UAM_ERROR_NOW_IN_PROGRESS;
+                       break;
+               }
+
                result = _uam_core_add_device(account, &dev_info);
                if (UAM_ERROR_NONE == result) {
                        __uam_manager_save_request_context(