Return error code while handling devices
authorAbhay agarwal <ay.agarwal@samsung.com>
Mon, 4 Nov 2019 04:38:29 +0000 (10:08 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Tue, 5 Nov 2019 07:42:47 +0000 (16:42 +0900)
- Improve error handling by returning error code

Change-Id: I6d0da4c9a819345b808aaa913c2fa31e00f431a4
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
packaging/ua-manager.spec
ua-daemon/include/ua-manager-core.h
ua-daemon/src/pm/ua-ble-plugin-handler.c
ua-daemon/src/pm/ua-light-plugin-handler.c
ua-daemon/src/pm/ua-motion-plugin-handler.c
ua-daemon/src/pm/ua-wifi-plugin-handler.c
ua-daemon/src/ua-manager-core.c

index 6f06cea..bb512d7 100644 (file)
@@ -1,6 +1,6 @@
 Name:       ua-manager
 Summary:    User awareness manager
-Version:    0.12.8
+Version:    0.12.9
 Release:    1
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
index bc9f3f7..dae035f 100644 (file)
@@ -175,7 +175,7 @@ void _uam_core_handle_sensor_ready(unsigned int sensor, gboolean is_ready);
 int _uam_core_handle_device_added(int status,
                int user_id, const uam_device_info_s *dev_info);
 
-void _uam_core_handle_presence_detected(unsigned int sensor,
+int _uam_core_handle_presence_detected(unsigned int sensor,
                int user_id, void *sensor_info);
 
 void _uam_core_handle_absence_detected(unsigned int sensor,
index 52e9263..da94841 100644 (file)
@@ -40,11 +40,14 @@ static void ble_state_changed_callback(int state)
 static void ble_lpm_detection_callback(uas_detection_type_e type, void *sensor_info)
 {
        FUNC_ENTRY;
+       int ret = UAM_ERROR_NONE;
 
        /* Currently, in lpm mode only Presence is detected */
        if (UAS_PRESENCE == type) {
                UAM_DBG("Presence detected");
-               _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_BLE, -1, NULL);
+               ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_BLE, -1, NULL);
+               if (UAM_ERROR_NONE != ret)
+                       UAM_WARN("_uam_core_handle_presence_detected failed");
        } else {
                UAM_WARN("Unlikely Absence detected");
        }
@@ -68,6 +71,7 @@ static void ble_device_detection_callback(uas_detection_type_e type, uas_device_
 {
        FUNC_ENTRY;
        uam_device_info_s *dev_info;
+       int ret = UAM_ERROR_NONE;
 
        ret_if(NULL == device);
 
@@ -76,7 +80,9 @@ static void ble_device_detection_callback(uas_detection_type_e type, uas_device_
 
        if (UAS_PRESENCE == type) {
                UAM_DBG("Presence detected for %s", dev_info->device_id);
-               _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_BLE, device->user_id, dev_info);
+               ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_BLE, device->user_id, dev_info);
+               if (UAM_ERROR_NONE != ret)
+                       UAM_WARN("_uam_core_handle_presence_detected failed");
        } else {
                UAM_DBG("Absence detected for %s", dev_info->device_id);
                _uam_core_handle_absence_detected(UAM_SENSOR_BITMASK_BLE, device->user_id, dev_info);
index 51e873d..e3742c4 100644 (file)
@@ -48,6 +48,7 @@ void light_detection_callback(uas_detection_type_e type, void *sensor_info)
        FUNC_ENTRY;
        uas_sensor_info_t *info;
        uam_sensor_info_s *light_info = NULL;
+       int ret = UAM_ERROR_NONE;
 
        UAM_DBG("Light: %s", type == UAS_PRESENCE ? "PRESENCE" : "ABSENCE");
 
@@ -56,7 +57,9 @@ void light_detection_callback(uas_detection_type_e type, void *sensor_info)
 
        if (UAS_PRESENCE == type) {
                UAM_DBG("Presence detected by light sensor");
-               _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_LIGHT, 0, light_info);
+               ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_LIGHT, 0, light_info);
+               if (UAM_ERROR_NONE != ret)
+                       UAM_WARN("_uam_core_handle_presence_detected failed");
        } else {
                UAM_DBG("Absence detected by light sensor");
                _uam_core_handle_absence_detected(UAM_SENSOR_BITMASK_LIGHT, 0, light_info);
index 39b8d41..14ade6f 100644 (file)
@@ -70,6 +70,7 @@ void motion_detection_callback(uas_detection_type_e type, void *sensor_info)
        FUNC_ENTRY;
        uas_sensor_info_t *info = NULL;
        uam_sensor_info_s *motion_info = NULL;
+       int ret = UAM_ERROR_NONE;
 
        UAM_DBG("Motion: %s", type == UAS_PRESENCE ? "PRESENCE" : "ABSENCE");
 
@@ -79,7 +80,9 @@ void motion_detection_callback(uas_detection_type_e type, void *sensor_info)
 
        if (UAS_PRESENCE == type) {
                UAM_DBG("Presence detected by motion sensor");
-               _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_MOTION, 0, motion_info);
+               ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_MOTION, 0, motion_info);
+               if (UAM_ERROR_NONE != ret)
+                       UAM_WARN("_uam_core_handle_presence_detected failed");
        } else {
                UAM_DBG("Absence detected by motion sensor");
                _uam_core_handle_absence_detected(UAM_SENSOR_BITMASK_MOTION, 0, motion_info);
index 43181b8..ee5155c 100644 (file)
@@ -40,11 +40,14 @@ static void wifi_state_changed_callback(int state)
 static void wifi_lpm_detection_callback(uas_detection_type_e type, void *sensor_info)
 {
        FUNC_ENTRY;
+       int ret = UAM_ERROR_NONE;
 
        /* Currently, in lpm mode only Presence is detected */
        if (UAS_PRESENCE == type) {
                UAM_DBG("Presence detected");
-               _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_WIFI, -1, NULL);
+               ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_WIFI, -1, NULL);
+               if (UAM_ERROR_NONE != ret)
+                       UAM_WARN("_uam_core_handle_presence_detected failed");
        } else {
                UAM_WARN("Unlikely Absence detected");
        }
@@ -68,6 +71,7 @@ static void wifi_device_detection_callback(uas_detection_type_e type, uas_device
 {
        FUNC_ENTRY;
        uam_device_info_s *dev_info;
+       int ret = UAM_ERROR_NONE;
 
        ret_if(NULL == device);
 
@@ -76,7 +80,9 @@ static void wifi_device_detection_callback(uas_detection_type_e type, uas_device
 
        if (UAS_PRESENCE == type) {
                UAM_DBG("Presence detected for %s", dev_info->device_id);
-               _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_WIFI, device->user_id, dev_info);
+               ret = _uam_core_handle_presence_detected(UAM_SENSOR_BITMASK_WIFI, device->user_id, dev_info);
+               if (UAM_ERROR_NONE != ret)
+                       UAM_WARN("_uam_core_handle_presence_detected failed");
        } else {
                UAM_DBG("Absence detected for %s", dev_info->device_id);
                _uam_core_handle_absence_detected(UAM_SENSOR_BITMASK_WIFI, device->user_id, dev_info);
index 86164df..3c45151 100644 (file)
@@ -253,25 +253,23 @@ static char *__get_mac_addr(uam_db_tech_info_t *tech)
        return NULL;
 }
 
-static void __remove_user_device(gpointer data)
+static int _uam_remove_user_device(uam_db_device_info_t *device)
 {
        FUNC_ENTRY;
-       uam_db_device_info_t *device = data;
        uam_device_info_s dev_info;
        int user_id;
        GSList *l;
+       int ret = UAM_ERROR_NONE;
 
-       ret_if(NULL == device);
-
+       retv_if(NULL == device, UAM_ERROR_INVALID_PARAMETER);
        user_id = device->user->user_id;
        dev_info.operating_system = device->os;
        g_strlcpy(dev_info.device_id, device->device_id, UAM_DEVICE_ID_MAX_STRING_LEN);
 
-       ret_if(UAM_ERROR_NONE != __uam_db_begin_transaction());
+       retv_if(UAM_ERROR_NONE != __uam_db_begin_transaction(), UAM_ERROR_DB_FAILED);
        for (l = device->tech_list; NULL != l; l = g_slist_next(l)) {
                uam_db_tech_info_t *tech = l->data;
                GSList *l1, *l2;
-               int ret;
 
                if (!tech)
                        continue;
@@ -322,26 +320,37 @@ static void __remove_user_device(gpointer data)
                __send_device_event(UAM_ERROR_NONE, UAM_EVENT_DEVICE_REMOVED, &dev_info);
 
                /* Remove device from database */
-               if (UAM_ERROR_NONE != _uam_device_db_delete_device_info(
-                                       dev_info.device_id, dev_info.type, dev_info.mac)) {
+               ret = _uam_device_db_delete_device_info(
+                                       dev_info.device_id, dev_info.type, dev_info.mac);
+               if (UAM_ERROR_NONE != ret) {
                        UAM_ERR("_uam_device_db_delete_device_info failed");
                        __uam_db_end_transaction(0);
-                       return;
+                       return ret;
                }
        }
        __uam_db_end_transaction(1);
 
-       __free_user_device(device);
-
        FUNC_EXIT;
+       return ret;
 }
 
-static void __free_uam_db_user_info(gpointer data)
+static int __free_uam_db_user_info(gpointer data)
 {
        FUNC_ENTRY;
        uam_db_user_info_t *user = data;
+       GSList *l;
+       int ret = UAM_ERROR_NONE;
 
-       g_slist_free_full(user->devices, __remove_user_device);
+       for (l = user->devices; NULL != l; l = g_slist_next(l)) {
+               uam_db_device_info_t *device = l->data;
+               ret = _uam_remove_user_device(device);
+               if (UAM_ERROR_NONE != ret) {
+                       UAM_ERR("_uam_remove_user_device failed");
+                       return ret;
+               }
+       }
+
+       g_slist_free_full(user->devices, __free_user_device);
 
        /* Set/update registered device list to plugins */
        if (UAM_ERROR_NONE != _uam_pm_set_registered_devices(devices))
@@ -353,7 +362,9 @@ static void __free_uam_db_user_info(gpointer data)
        g_free(user->name);
        g_free(user->account);
        g_free(user);
+
        FUNC_EXIT;
+       return ret;
 }
 
 static gint __compare_device_id(gconstpointer data, gconstpointer user_data)
@@ -852,15 +863,17 @@ int _uam_core_remove_user(const char *account)
        FUNC_ENTRY;
        GSList *l;
        uam_db_user_info_t *user;
+       int ret = UAM_ERROR_NONE;
 
        l = g_slist_find_custom(users, account, __compare_user_account);
        retv_if((NULL == l), UAM_ERROR_NOT_REGISTERED);
        user = l->data;
 
        /* Remove user from database */
-       if (UAM_ERROR_NONE != _uam_db_delete_by_user_id(user->user_id)) {
+       ret = _uam_db_delete_by_user_id(user->user_id);
+       if (UAM_ERROR_NONE != ret) {
                UAM_ERR("_uam_db_delete_by_user_id failed");
-               return UAM_ERROR_DB_FAILED;
+               return ret;
        }
 
        users = g_slist_remove(users, user);
@@ -871,7 +884,10 @@ int _uam_core_remove_user(const char *account)
                                        UAM_ERROR_NONE, user->account, user->name)))
                UAM_ERR("Failed to send UAM_EVENT_USER_REMOVED");
 
-       __free_uam_db_user_info((gpointer)user);
+       ret = __free_uam_db_user_info((gpointer)user);
+       if (UAM_ERROR_NONE != ret) {
+               UAM_WARN("_free_uam_db_user_info failed");
+       }
 
        FUNC_EXIT;
        return UAM_ERROR_NONE;
@@ -2744,7 +2760,7 @@ void __send_user_presence_event(uam_db_tech_info_t *tech, unsigned int sensor,
        FUNC_EXIT;
 }
 
-void _uam_core_handle_presence_detected(unsigned int sensor,
+int _uam_core_handle_presence_detected(unsigned int sensor,
                int user_id, void *info)
 {
        FUNC_ENTRY;
@@ -2754,6 +2770,7 @@ void _uam_core_handle_presence_detected(unsigned int sensor,
        GSList *l;
        uam_device_info_s *dev_info = NULL;
        uam_sensor_info_s *sensor_info = NULL;
+       int ret = UAM_ERROR_NONE;
 
        UAM_INFO("sensor: 0x%8.8X, user_id: %d", sensor, user_id);
 
@@ -2766,15 +2783,15 @@ void _uam_core_handle_presence_detected(unsigned int sensor,
 
        if (NULL == dev_info) {
                __send_sensor_presence_event(sensor_info, sensor);
-               return;
+               return ret;
        }
 
-       ret_if(0 > user_id);
+       retv_if(0 > user_id, UAM_ERROR_INVALID_PARAMETER);
 
        l = g_slist_find_custom(users, &user_id, __compare_user_id);
        if (NULL == l) {
                UAM_ERR("Invalid user_id [%d]", user_id);
-               return;
+               return UAM_ERROR_INVALID_PARAMETER;
        }
        user = l->data;
 
@@ -2783,27 +2800,27 @@ void _uam_core_handle_presence_detected(unsigned int sensor,
        if (NULL == l) {
                UAM_ERR("Valid user_id [%d] but Invalid device_id [%s]",
                                user_id, dev_info->device_id);
-               return;
+               return UAM_ERROR_INVALID_PARAMETER;
        }
        device = l->data;
        if (!(device->supported_techs & dev_info->type)) {
                UAM_ERR("Valid device_id [%s] but Invalid tech type [%d]",
                                dev_info->device_id, dev_info->type);
-               return;
+               return UAM_ERROR_INVALID_PARAMETER;
        }
 
        l = g_slist_find_custom(device->tech_list,
                        &(dev_info->type), __compare_tech_type);
        if (NULL == l) {
                UAM_ERR("Strange, tech type [%d] not found", dev_info->type);
-               return;
+               return UAM_ERROR_INVALID_PARAMETER;
        }
        tech = l->data;
 
        tech->presence_state = UAM_PRESENCE_STATE_PRESENT;
        tech->timestamp = (unsigned long long)time(NULL);
 
-       ret_if(UAM_ERROR_NONE != __uam_db_begin_transaction());
+       retv_if(UAM_ERROR_NONE != __uam_db_begin_transaction(), UAM_ERROR_INVALID_PARAMETER);
        /* Check if IP address was updated then update in DB */
        if (UAM_TECH_TYPE_WIFI == dev_info->type) {
                uam_db_address_info_t *addr_info = NULL;
@@ -2836,34 +2853,38 @@ void _uam_core_handle_presence_detected(unsigned int sensor,
                        addr_info->address = g_strdup(dev_info->ipv4_addr);
 
                        /* Update address in DB */
-                       if (UAM_ERROR_NONE != _uam_device_db_update_device_ip_address(dev_info->device_id,
-                                       dev_info->type, dev_info->mac, dev_info->ipv4_addr)) {
+                       ret = _uam_device_db_update_device_ip_address(dev_info->device_id,
+                                       dev_info->type, dev_info->mac, dev_info->ipv4_addr);
+                       if (UAM_ERROR_NONE != ret) {
                                UAM_WARN("_uam_device_db_update_device_ip_address failed");
                                __uam_db_end_transaction(0);
-                               return;
+                               return ret;
                        }
                }
        }
 
        /* Update database (presence state & timestamp) */
-       if (UAM_ERROR_NONE != _uam_device_db_update_device_timestamp(dev_info->device_id,
-                               dev_info->type, dev_info->mac, tech->timestamp)) {
+       ret = _uam_device_db_update_device_timestamp(dev_info->device_id,
+                               dev_info->type, dev_info->mac, tech->timestamp);
+       if (UAM_ERROR_NONE != ret) {
                UAM_WARN("_uam_device_db_update_device_timestamp failed");
                __uam_db_end_transaction(0);
-               return;
+               return ret;
        }
 
-       if (UAM_ERROR_NONE != _uam_device_db_update_device_presence(dev_info->device_id,
-                               dev_info->type, dev_info->mac, tech->presence_state)) {
+       ret = _uam_device_db_update_device_presence(dev_info->device_id,
+                               dev_info->type, dev_info->mac, tech->presence_state);
+       if (UAM_ERROR_NONE != ret) {
                UAM_WARN("_uam_device_db_update_device_presence failed");
                __uam_db_end_transaction(0);
-               return;
+               return ret;
        }
 
        __send_user_presence_event(tech, sensor, dev_info->device_id);
        __uam_db_end_transaction(1);
 
        FUNC_EXIT;
+       return ret;
 }
 
 static void __send_user_absence_event(uam_tech_type_e type, unsigned int sensor)