diff --git a/radar/src/dm_radar_helper.cpp b/radar/src/dm_radar_helper.cpp index bae04984e2552a726672ff7ce5059ae4e92dfe43..80663a633b985083ef6e05e962df3309137eb2c6 100644 --- a/radar/src/dm_radar_helper.cpp +++ b/radar/src/dm_radar_helper.cpp @@ -636,9 +636,18 @@ std::string DmRadarHelper::ConvertHexToString(uint16_t hex) std::string DmRadarHelper::GetDeviceInfoList(std::vector &deviceInfoList) { - cJSON* deviceInfoJson = cJSON_CreateArray(); + cJSON *deviceInfoJson = cJSON_CreateArray(); + if (deviceInfoJson == nullptr) { + LOGE("deviceInfoJson is nullptr."); + return ""; + } for (size_t i = 0; i < deviceInfoList.size(); i++) { - cJSON* object = cJSON_CreateObject(); + cJSON *object = cJSON_CreateObject(); + if (object == nullptr) { + LOGE("object is nullptr."); + cJSON_Delete(deviceInfoJson); + return ""; + } std::string udidHash = GetUdidHashByUdid(std::string(deviceInfoList[i].deviceId)); cJSON_AddStringToObject(object, "PEER_UDID", udidHash.c_str()); std::string peerNetId = GetAnonyUdid(deviceInfoList[i].networkId); @@ -648,7 +657,16 @@ std::string DmRadarHelper::GetDeviceInfoList(std::vector &deviceIn cJSON_AddStringToObject(object, "PEER_DEV_NAME", deviceInfoList[i].deviceName); cJSON_AddItemToArray(deviceInfoJson, object); } - return std::string(cJSON_PrintUnformatted(deviceInfoJson)); + char *deviceInfoStr = cJSON_PrintUnformatted(deviceInfoJson); + if (deviceInfoStr == nullptr) { + LOGE("deviceInfoStr is nullptr."); + cJSON_Delete(deviceInfoJson); + return ""; + } + std::string devInfoStr = std::string(deviceInfoStr); + cJSON_Delete(deviceInfoJson); + cJSON_free(deviceInfoStr); + return devInfoStr; } std::string DmRadarHelper::GetUdidHashByUdid(std::string udid) diff --git a/radar/src/lite/dm_radar_helper.cpp b/radar/src/lite/dm_radar_helper.cpp index 5b4f1c6736a2dca0d1f7669e7b21097c4a35d349..f69e55d5b35772f3b91c4fb9baa0ea3a1642c146 100644 --- a/radar/src/lite/dm_radar_helper.cpp +++ b/radar/src/lite/dm_radar_helper.cpp @@ -134,18 +134,37 @@ std::string DmRadarHelper::ConvertHexToString(uint16_t hex) std::string DmRadarHelper::GetDeviceInfoList(std::vector &deviceInfoList) { - cJSON* deviceInfoJson = cJSON_CreateArray(); + cJSON *deviceInfoJson = cJSON_CreateArray(); + if (deviceInfoJson == nullptr) { + LOGE("deviceInfoJson is nullptr."); + return ""; + } for (size_t i = 0; i < deviceInfoList.size(); i++) { - cJSON* object = cJSON_CreateObject(); + cJSON *object = cJSON_CreateObject(); + if (object == nullptr) { + LOGE("object is nullptr."); + cJSON_Delete(deviceInfoJson); + return ""; + } std::string udidHash = GetUdidHashByUdid(std::string(deviceInfoList[i].deviceId)); cJSON_AddStringToObject(object, "PEER_UDID", udidHash.c_str()); - cJSON_AddStringToObject(object, "PEER_NET_ID", deviceInfoList[i].networkId); + std::string peerNetId = GetAnonyUdid(deviceInfoList[i].networkId); + cJSON_AddStringToObject(object, "PEER_NET_ID", peerNetId.c_str()); std::string devType = ConvertHexToString(deviceInfoList[i].deviceTypeId); cJSON_AddStringToObject(object, "PEER_DEV_TYPE", devType.c_str()); cJSON_AddStringToObject(object, "PEER_DEV_NAME", deviceInfoList[i].deviceName); cJSON_AddItemToArray(deviceInfoJson, object); } - return std::string(cJSON_PrintUnformatted(deviceInfoJson)); + char *deviceInfoStr = cJSON_PrintUnformatted(deviceInfoJson); + if (deviceInfoStr == nullptr) { + LOGE("deviceInfoStr is nullptr."); + cJSON_Delete(deviceInfoJson); + return ""; + } + std::string devInfoStr = std::string(deviceInfoStr); + cJSON_Delete(deviceInfoJson); + cJSON_free(deviceInfoStr); + return devInfoStr; } std::string DmRadarHelper::GetUdidHashByUdid(std::string udid) diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index 452f62bd2d586c887c09919dfdb81722acc59267..ae12e0fe6981dda4b7094d88d7d38dea217d511f 100755 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -128,6 +128,19 @@ int32_t DeviceManagerService::GetTrustedDeviceList(const std::string &pkgName, c return ret; } +#ifdef MINE_HARMONY + if (onlineDeviceList.size() > 0 && IsDMServiceImplReady()) { + for (auto item : onlineDeviceList) { + std::string deviceIdHash = ""; + dmServiceImpl_->GetUdidHashByNetWorkId(item.networkId, deviceIdHash); + if (memcpy_s(item.deviceId, DM_MAX_DEVICE_ID_LEN, deviceIdHash.c_str(), deviceIdHash.length()) != 0) { + LOGE("get deviceId: %s failed", GetAnonyString(deviceIdHash).c_str()); + } + deviceList.push_back(item); + } + LOGI("Current available device size: %d.", deviceList.size()); + } +#else if (onlineDeviceList.size() > 0 && IsDMServiceImplReady()) { std::map udidMap = dmServiceImpl_->GetAppTrustDeviceIdList(pkgName); for (auto item : onlineDeviceList) { @@ -145,6 +158,7 @@ int32_t DeviceManagerService::GetTrustedDeviceList(const std::string &pkgName, c } LOGI("Current app available device size: %d.", deviceList.size()); } +#endif return DM_OK; } diff --git a/services/service/src/softbus/softbus_listener.cpp b/services/service/src/softbus/softbus_listener.cpp index 901c7b265e5006ad5cf9965286ab31cde8191968..0586a0c4c53549899ac7c5d91535f0a54efe4475 100644 --- a/services/service/src/softbus/softbus_listener.cpp +++ b/services/service/src/softbus/softbus_listener.cpp @@ -576,17 +576,11 @@ int32_t SoftbusListener::GetTrustedDeviceList(std::vector &deviceI LOGE("[SOFTBUS]GetAllNodeDeviceInfo failed, ret: %d.", ret); return ERR_DM_FAILED; } - DmDeviceInfo *info = static_cast(malloc(sizeof(DmDeviceInfo) * (deviceCount))); - if (info == nullptr) { - FreeNodeInfo(nodeInfo); - return ERR_DM_MALLOC_FAILED; - } - DmDeviceInfo **pInfoList = &info; for (int32_t i = 0; i < deviceCount; ++i) { NodeBasicInfo *nodeBasicInfo = nodeInfo + i; - DmDeviceInfo *deviceInfo = *pInfoList + i; - ConvertNodeBasicInfoToDmDevice(*nodeBasicInfo, *deviceInfo); - deviceInfoList.push_back(*deviceInfo); + DmDeviceInfo deviceInfo; + ConvertNodeBasicInfoToDmDevice(*nodeBasicInfo, deviceInfo); + deviceInfoList.push_back(deviceInfo); } radarInfo.stageRes = static_cast(StageRes::STAGE_SUCC); if (deviceCount > 0 && IsDmRadarHelperReady() && GetDmRadarHelperObj() != nullptr) { @@ -596,7 +590,6 @@ int32_t SoftbusListener::GetTrustedDeviceList(std::vector &deviceI } } FreeNodeInfo(nodeInfo); - free(info); LOGI("GetTrustDevices success, deviceCount: %d.", deviceCount); return ret; } @@ -610,20 +603,13 @@ int32_t SoftbusListener::GetAvailableDeviceList(std::vector & LOGE("[SOFTBUS]GetAllNodeDeviceInfo failed, ret: %d.", ret); return ERR_DM_FAILED; } - DmDeviceBasicInfo *info = static_cast(malloc(sizeof(DmDeviceBasicInfo) * (deviceCount))); - if (info == nullptr) { - FreeNodeInfo(nodeInfo); - return ERR_DM_MALLOC_FAILED; - } - DmDeviceBasicInfo **pInfoList = &info; for (int32_t i = 0; i < deviceCount; ++i) { NodeBasicInfo *nodeBasicInfo = nodeInfo + i; - DmDeviceBasicInfo *deviceBasicInfo = *pInfoList + i; - ConvertNodeBasicInfoToDmDevice(*nodeBasicInfo, *deviceBasicInfo); - deviceBasicInfoList.push_back(*deviceBasicInfo); + DmDeviceBasicInfo deviceBasicInfo; + ConvertNodeBasicInfoToDmDevice(*nodeBasicInfo, deviceBasicInfo); + deviceBasicInfoList.push_back(deviceBasicInfo); } FreeNodeInfo(nodeInfo); - free(info); LOGI("GetAvailableDevices success, deviceCount: %d.", deviceCount); return ret; } @@ -748,23 +734,27 @@ int32_t SoftbusListener::ConvertNodeBasicInfoToDmDevice(const NodeBasicInfo &nod if (memcpy_s(devInfo.networkId, sizeof(devInfo.networkId), nodeInfo.networkId, std::min(sizeof(devInfo.networkId), sizeof(nodeInfo.networkId))) != DM_OK) { LOGE("ConvertNodeBasicInfoToDmDevice copy networkId data failed."); + return ERR_DM_FAILED; } if (memcpy_s(devInfo.deviceName, sizeof(devInfo.deviceName), nodeInfo.deviceName, std::min(sizeof(devInfo.deviceName), sizeof(nodeInfo.deviceName))) != DM_OK) { LOGE("ConvertNodeBasicInfoToDmDevice copy deviceName data failed."); + return ERR_DM_FAILED; } + + char osVersion[OS_VERSION_BUF_LEN + 1] = {0}; + if (memcpy_s(osVersion, OS_VERSION_BUF_LEN + 1, nodeInfo.osVersion, + OS_VERSION_BUF_LEN) != DM_OK) { + LOGE("ConvertNodeBasicInfoToDmDevice copy osVersion data failed."); + return ERR_DM_FAILED; + } + devInfo.deviceTypeId = nodeInfo.deviceTypeId; - std::string extraData = devInfo.extraData; nlohmann::json extraJson; - if (!extraData.empty()) { - extraJson = nlohmann::json::parse(extraData, nullptr, false); - } - if (!extraJson.is_discarded()) { - extraJson[PARAM_KEY_OS_TYPE] = nodeInfo.osType; - extraJson[PARAM_KEY_OS_VERSION] = std::string(nodeInfo.osVersion); - devInfo.extraData = to_string(extraJson); - } + extraJson[PARAM_KEY_OS_TYPE] = nodeInfo.osType; + extraJson[PARAM_KEY_OS_VERSION] = std::string(osVersion); + devInfo.extraData = to_string(extraJson); return DM_OK; }