Remove duplicate code to copy device
authorAbhay agarwal <ay.agarwal@samsung.com>
Mon, 4 Nov 2019 05:35:20 +0000 (11:05 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Tue, 5 Nov 2019 10:39:54 +0000 (19:39 +0900)
Change-Id: Idb87db47775d437a19d9c18f4321de6e41870f4f
Signed-off-by: Abhay agarwal <ay.agarwal@samsung.com>
ua-daemon/src/ua-manager-core.c

index 3c45151..ee7a31d 100644 (file)
@@ -253,6 +253,72 @@ static char *__get_mac_addr(uam_db_tech_info_t *tech)
        return NULL;
 }
 
+static void __uam_core_copy_addr(uam_device_info_s *device, uam_db_address_info_t *addr)
+{
+       switch (addr->addr_type) {
+       case UAM_ADDR_TYPE_BLE:
+       case UAM_ADDR_TYPE_BT:
+       case UAM_ADDR_TYPE_P2P:
+       case UAM_ADDR_TYPE_WIFI:
+               g_strlcpy(device->mac, addr->address,
+                               UAM_MAC_ADDRESS_STRING_LEN);
+               break;
+       case UAM_ADDR_TYPE_IPv4:
+               g_strlcpy(device->ipv4_addr,
+                               addr->address,
+                               UAM_IP_ADDRESS_MAX_STRING_LEN);
+               break;
+       default:
+               UAM_WARN("Unknown address type %d", addr->addr_type);
+       }
+}
+
+static void __uam_copy_payload_info(uam_ble_payload_s *dev_payload, uam_db_ble_payload_t *payload)
+{
+       if (payload) {
+               dev_payload->service_id = payload->service_id;
+               dev_payload->device_icon = payload->device_icon;
+               dev_payload->purpose = payload->purpose;
+               if (payload->duid)
+                       memcpy(dev_payload->duid,
+                       payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
+               if (payload->bt_mac)
+                       memcpy(dev_payload->bt_mac,
+                       payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+       }
+}
+
+static int __copy_tech_info_to_device_info(uam_db_tech_info_t *tech, uam_device_info_s *device)
+{
+       FUNC_ENTRY;
+       GSList *l;
+
+       retv_if(NULL == tech, UAM_ERROR_INVALID_PARAMETER);
+
+       memset(device, 0x00, sizeof(uam_device_info_s));
+       for (l = tech->addresses; NULL != l; l = g_slist_next(l)) {
+               uam_db_address_info_t *addr = l->data;
+
+               if (!addr)
+                       continue;
+
+               __uam_core_copy_addr(device, addr);
+       }
+
+       device->operating_system = tech->device->os;
+       g_strlcpy(device->device_id, tech->device->device_id,
+                       UAM_DEVICE_ID_MAX_STRING_LEN);
+       device->type = tech->tech_type;
+       device->discriminant = tech->discriminant;
+       memset(device->payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
+       memset(device->payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
+       device->last_seen = tech->timestamp;
+       __uam_copy_payload_info(&(device->payload), tech->payload);
+
+       FUNC_EXIT;
+       return UAM_ERROR_NONE;
+}
+
 static int _uam_remove_user_device(uam_db_device_info_t *device)
 {
        FUNC_ENTRY;
@@ -263,54 +329,22 @@ static int _uam_remove_user_device(uam_db_device_info_t *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);
 
        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;
 
                if (!tech)
                        continue;
 
-               /* Delete the tech information from the service list that includes tech. */
-               for (l2 = tech->svc_list; NULL != l2; l2 = g_slist_next(l2)) {
-                       uam_db_service_info_t *svc_info = l2->data;
-
-                       if (!svc_info || !svc_info->dev_techs)
-                               continue;
-
-                       svc_info->dev_techs = g_slist_remove(svc_info->dev_techs, tech);
-               }
-
-               dev_info.type = tech->tech_type;
-               memset(dev_info.mac, 0x00, UAM_MAC_ADDRESS_STRING_LEN);
-               memset(dev_info.ipv4_addr, 0x00, UAM_IP_ADDRESS_MAX_STRING_LEN);
-
-               for (l1 = tech->addresses; NULL != l1; l1 = g_slist_next(l1)) {
-                       uam_db_address_info_t *addr = l1->data;
-
-                       if (!addr)
-                               continue;
-
-                       switch (addr->addr_type) {
-                       case UAM_ADDR_TYPE_BT:
-                       case UAM_ADDR_TYPE_BLE:
-                       case UAM_ADDR_TYPE_P2P:
-                       case UAM_ADDR_TYPE_WIFI:
-                               g_strlcpy(dev_info.mac, addr->address,
-                                               UAM_MAC_ADDRESS_STRING_LEN);
-                               break;
-                       case UAM_ADDR_TYPE_IPv4:
-                               g_strlcpy(dev_info.ipv4_addr, addr->address,
-                                               UAM_IP_ADDRESS_MAX_STRING_LEN);
-                               break;
-                       default:
-                               UAM_WARN("Address type %d ignored", addr->addr_type);
-                       }
+               /* Copy tech info to device info */
+               ret = __copy_tech_info_to_device_info(tech, &dev_info);
+               if (UAM_ERROR_NONE != ret) {
+                       UAM_ERR("__copy_tech_info_to_device_info failed");
+                       return ret;
                }
 
+               /* Unregister device from plugin */
                ret = _uam_pm_unregister_device(user_id, &dev_info);
                if (UAM_ERROR_NONE != ret)
                        UAM_ERR("_uam_pm_unregister_device failed with %s",
@@ -469,67 +503,23 @@ static void __get_uam_db_dev_list_to_uam_dev_list(
        for (l = db_dev_list; NULL != l; l = g_slist_next(l)) {
                uam_db_device_info_t *db_info = l->data;
                GSList *l1;
+               int ret;
 
                if (!db_info || !db_info->device_id)
                        continue;
 
                for (l1 = db_info->tech_list; NULL != l1; l1 = g_slist_next(l1)) {
                        uam_db_tech_info_t *tech = l1->data;
-                       GSList *l2;
 
                        if (!tech || !tech->addresses)
                                continue;
 
-                       for (l2 = tech->addresses; NULL != l2; l2 = g_slist_next(l2)) {
-                               uam_db_address_info_t *addr = l2->data;
-
-                               if (!addr)
-                                       continue;
-
-                               switch (addr->addr_type) {
-                               case UAM_ADDR_TYPE_BLE:
-                               case UAM_ADDR_TYPE_BT:
-                               case UAM_ADDR_TYPE_P2P:
-                               case UAM_ADDR_TYPE_WIFI:
-                                       g_strlcpy((*device_list)[indx].mac,
-                                                       addr->address,
-                                                       UAM_MAC_ADDRESS_STRING_LEN);
-                                       break;
-                               case UAM_ADDR_TYPE_IPv4:
-                                       g_strlcpy((*device_list)[indx].ipv4_addr,
-                                                       addr->address,
-                                                       UAM_IP_ADDRESS_MAX_STRING_LEN);
-                                       break;
-                               default:
-                                       UAM_WARN("Unknown address type %d", addr->addr_type);
-                               }
-                       }
-
-                       (*device_list)[indx].operating_system = db_info->os;
-                       g_strlcpy((*device_list)[indx].device_id, db_info->device_id,
-                                       UAM_DEVICE_ID_MAX_STRING_LEN);
-
-                       memset((*device_list)[indx].payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
-                       memset((*device_list)[indx].payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
-                       if (tech->payload) {
-                               (*device_list)[indx].payload.service_id = tech->payload->service_id;
-                               (*device_list)[indx].payload.device_icon = tech->payload->device_icon;
-                               (*device_list)[indx].payload.purpose = tech->payload->purpose;
-                               if (tech->payload->duid)
-                                       memcpy((*device_list)[indx].payload.duid,
-                                       tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
-                               if (tech->payload->bt_mac)
-                                       g_strlcpy((*device_list)[indx].payload.bt_mac,
-                                       tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
+                       /* Copy tech info to device info */
+                       ret = __copy_tech_info_to_device_info(tech, &((*device_list)[indx]));
+                       if (UAM_ERROR_NONE != ret) {
+                               UAM_ERR("__copy_tech_info_to_device_info failed");
                        }
-
-                       (*device_list)[indx].discriminant = tech->discriminant;
-                       (*device_list)[indx].last_seen = tech->timestamp;
-                       (*device_list)[indx++].type = tech->tech_type;
-                       UAM_INFO("%s-%d-%s-%s-%llu-%d-%d-0x%2.2X", (*device_list)[indx-1].device_id,
-                               (*device_list)[indx-1].type, (*device_list)[indx-1].mac, (*device_list)[indx-1].ipv4_addr,
-                               (*device_list)[indx-1].last_seen, (*device_list)[indx-1].operating_system,
-                               (*device_list)[indx-1].discriminant, (*device_list)[indx-1].payload.service_id);
+                       indx++;
                }
        }
 
@@ -537,66 +527,6 @@ static void __get_uam_db_dev_list_to_uam_dev_list(
        FUNC_EXIT;
 }
 
-static void __uam_core_copy_addr(uam_device_info_s *device, uam_db_address_info_t *addr)
-{
-       switch (addr->addr_type) {
-       case UAM_ADDR_TYPE_BLE:
-       case UAM_ADDR_TYPE_BT:
-       case UAM_ADDR_TYPE_P2P:
-       case UAM_ADDR_TYPE_WIFI:
-               g_strlcpy(device->mac, addr->address,
-                               UAM_MAC_ADDRESS_STRING_LEN);
-               break;
-       case UAM_ADDR_TYPE_IPv4:
-               g_strlcpy(device->ipv4_addr,
-                               addr->address,
-                               UAM_IP_ADDRESS_MAX_STRING_LEN);
-               break;
-       default:
-               UAM_WARN("Unknown address type %d", addr->addr_type);
-       }
-}
-
-static int __copy_tech_info_to_device_info(uam_db_tech_info_t *tech, uam_device_info_s *device)
-{
-       FUNC_ENTRY;
-       GSList *l;
-
-       retv_if(NULL == tech, UAM_ERROR_INVALID_PARAMETER);
-
-       memset(device, 0x00, sizeof(uam_device_info_s));
-       for (l = tech->addresses; NULL != l; l = g_slist_next(l)) {
-               uam_db_address_info_t *addr = l->data;
-
-               if (!addr)
-                       continue;
-
-               __uam_core_copy_addr(device, addr);
-       }
-
-       device->operating_system = tech->device->os;
-       g_strlcpy(device->device_id, tech->device->device_id,
-                       UAM_DEVICE_ID_MAX_STRING_LEN);
-       device->type = tech->tech_type;
-       device->discriminant = tech->discriminant;
-       memset(device->payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
-       memset(device->payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
-       if (tech->payload) {
-               device->payload.service_id = tech->payload->service_id;
-               device->payload.device_icon = tech->payload->device_icon;
-               device->payload.purpose = tech->payload->purpose;
-               if (tech->payload->duid)
-                       memcpy(device->payload.duid,
-                       tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
-               if (tech->payload->bt_mac)
-                       memcpy(device->payload.bt_mac,
-                       tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
-       }
-
-       FUNC_EXIT;
-       return UAM_ERROR_NONE;
-}
-
 static uam_monitor_info_t *__uam_find_monitor(GSList *monitor_list,
                const char *name, const char *svc_name, uam_pm_detection_mode_e mode)
 {
@@ -3560,60 +3490,17 @@ static void __get_service_dev_list(
        /* Copy devices */
        for (l1 = service->dev_techs; NULL != l1; l1 = g_slist_next(l1)) {
                uam_db_tech_info_t *tech = l1->data;
-               GSList *l2;
+               int ret;
 
                if (!tech || !tech->addresses)
                        continue;
 
-               for (l2 = tech->addresses; NULL != l2; l2 = g_slist_next(l2)) {
-                       uam_db_address_info_t *addr = l2->data;
-
-                       if (!addr)
-                               continue;
-
-                       switch (addr->addr_type) {
-                       case UAM_ADDR_TYPE_BLE:
-                       case UAM_ADDR_TYPE_BT:
-                       case UAM_ADDR_TYPE_P2P:
-                       case UAM_ADDR_TYPE_WIFI:
-                               g_strlcpy((*device_list)[indx].mac,
-                                               addr->address,
-                                               UAM_MAC_ADDRESS_STRING_LEN);
-                               break;
-                       case UAM_ADDR_TYPE_IPv4:
-                               g_strlcpy((*device_list)[indx].ipv4_addr,
-                                               addr->address,
-                                               UAM_IP_ADDRESS_MAX_STRING_LEN);
-                               break;
-                       default:
-                               UAM_WARN("Unknown address type %d", addr->addr_type);
-                       }
+               /* Copy tech info to device info */
+               ret = __copy_tech_info_to_device_info(tech, &((*device_list)[indx]));
+               if (UAM_ERROR_NONE != ret) {
+                       UAM_ERR("__copy_tech_info_to_device_info failed");
                }
-
-               uam_db_device_info_t *db_info = tech->device;
-               (*device_list)[indx].operating_system = db_info->os;
-               g_strlcpy((*device_list)[indx].device_id, db_info->device_id,
-                               UAM_DEVICE_ID_MAX_STRING_LEN);
-               (*device_list)[indx].last_seen = tech->timestamp;
-               (*device_list)[indx].discriminant = tech->discriminant;
-               memset((*device_list)[indx].payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
-               memset((*device_list)[indx].payload.bt_mac, 0, UAM_BT_MAC_ADDRESS_STRING_LEN);
-               if (tech->payload) {
-                       if (tech->payload->service_id)
-                               (*device_list)[indx].payload.service_id = tech->payload->service_id;
-                       if (tech->payload->device_icon)
-                               (*device_list)[indx].payload.device_icon = tech->payload->device_icon;
-                       if (tech->payload->purpose)
-                               (*device_list)[indx].payload.purpose = tech->payload->purpose;
-                       if (tech->payload->duid)
-                               memcpy((*device_list)[indx].payload.duid,
-                               tech->payload->duid, UAM_BLE_PAYLOAD_DUID_LEN);
-                       if (tech->payload->bt_mac)
-                               g_strlcpy((*device_list)[indx].payload.bt_mac,
-                               tech->payload->bt_mac, UAM_BT_MAC_ADDRESS_STRING_LEN);
-                       }
-
-               (*device_list)[indx++].type = tech->tech_type;
+               indx++;
        }
 
        UAM_INFO("Count = %d, indx = %d", *count, indx);