12f0d0f1aSopenharmony_ci/* 22f0d0f1aSopenharmony_ci* Copyright (c) 2024 Huawei Device Co., Ltd. 32f0d0f1aSopenharmony_ci* Licensed under the Apache License, Version 2.0 (the "License"); 42f0d0f1aSopenharmony_ci* you may not use this file except in compliance with the License. 52f0d0f1aSopenharmony_ci* You may obtain a copy of the License at 62f0d0f1aSopenharmony_ci* 72f0d0f1aSopenharmony_ci* http://www.apache.org/licenses/LICENSE-2.0 82f0d0f1aSopenharmony_ci* 92f0d0f1aSopenharmony_ci* Unless required by applicable law or agreed to in writing, software 102f0d0f1aSopenharmony_ci* distributed under the License is distributed on an "AS IS" BASIS, 112f0d0f1aSopenharmony_ci* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122f0d0f1aSopenharmony_ci* See the License for the specific language governing permissions and 132f0d0f1aSopenharmony_ci* limitations under the License. 142f0d0f1aSopenharmony_ci*/ 152f0d0f1aSopenharmony_ci 162f0d0f1aSopenharmony_ci#include <cstdint> 172f0d0f1aSopenharmony_ci#include <iomanip> 182f0d0f1aSopenharmony_ci#include <sstream> 192f0d0f1aSopenharmony_ci#include "drm_dfx_utils.h" 202f0d0f1aSopenharmony_ci#include "drm_log.h" 212f0d0f1aSopenharmony_ci#include "iservice_registry.h" 222f0d0f1aSopenharmony_ci#include "bundle_mgr_interface.h" 232f0d0f1aSopenharmony_ci#include "bundle_mgr_proxy.h" 242f0d0f1aSopenharmony_ci#include "system_ability_definition.h" 252f0d0f1aSopenharmony_ci 262f0d0f1aSopenharmony_cinamespace OHOS { 272f0d0f1aSopenharmony_cinamespace DrmStandard { 282f0d0f1aSopenharmony_cistd::string __attribute__((visibility("default"))) GetClientBundleName(int32_t uid) 292f0d0f1aSopenharmony_ci{ 302f0d0f1aSopenharmony_ci std::string bundleName = ""; 312f0d0f1aSopenharmony_ci auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 322f0d0f1aSopenharmony_ci if (samgr == nullptr) { 332f0d0f1aSopenharmony_ci DRM_ERR_LOG("Get ability manager failed"); 342f0d0f1aSopenharmony_ci return bundleName; 352f0d0f1aSopenharmony_ci } 362f0d0f1aSopenharmony_ci 372f0d0f1aSopenharmony_ci sptr<IRemoteObject> object = samgr->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); 382f0d0f1aSopenharmony_ci if (object == nullptr) { 392f0d0f1aSopenharmony_ci DRM_ERR_LOG("object is NULL."); 402f0d0f1aSopenharmony_ci return bundleName; 412f0d0f1aSopenharmony_ci } 422f0d0f1aSopenharmony_ci 432f0d0f1aSopenharmony_ci sptr<OHOS::AppExecFwk::IBundleMgr> bms = iface_cast<OHOS::AppExecFwk::IBundleMgr>(object); 442f0d0f1aSopenharmony_ci if (bms == nullptr) { 452f0d0f1aSopenharmony_ci DRM_ERR_LOG("bundle manager service is NULL."); 462f0d0f1aSopenharmony_ci return bundleName; 472f0d0f1aSopenharmony_ci } 482f0d0f1aSopenharmony_ci 492f0d0f1aSopenharmony_ci auto result = bms->GetNameForUid(uid, bundleName); 502f0d0f1aSopenharmony_ci if (result != ERR_OK) { 512f0d0f1aSopenharmony_ci DRM_ERR_LOG("GetBundleNameForUid fail"); 522f0d0f1aSopenharmony_ci return ""; 532f0d0f1aSopenharmony_ci } 542f0d0f1aSopenharmony_ci 552f0d0f1aSopenharmony_ci DRM_INFO_LOG("BundleName:%{public}s", bundleName.c_str()); 562f0d0f1aSopenharmony_ci 572f0d0f1aSopenharmony_ci return bundleName; 582f0d0f1aSopenharmony_ci} 592f0d0f1aSopenharmony_ci 602f0d0f1aSopenharmony_cistd::string __attribute__((visibility("default"))) CastToHexString(std::vector<uint8_t> binaryData) 612f0d0f1aSopenharmony_ci{ 622f0d0f1aSopenharmony_ci std::string hexString; 632f0d0f1aSopenharmony_ci for (uint8_t binary : binaryData) { 642f0d0f1aSopenharmony_ci std::stringstream stream; 652f0d0f1aSopenharmony_ci stream << std::hex << std::setw(minimumDigit) << std::setfill('0') << static_cast<int>(binary); 662f0d0f1aSopenharmony_ci hexString += stream.str(); 672f0d0f1aSopenharmony_ci } 682f0d0f1aSopenharmony_ci return hexString; 692f0d0f1aSopenharmony_ci} 702f0d0f1aSopenharmony_ci 712f0d0f1aSopenharmony_ciuint32_t __attribute__((visibility("default"))) CalculateTimeDiff(std::chrono::system_clock::time_point timeBefore, 722f0d0f1aSopenharmony_ci std::chrono::system_clock::time_point timeAfter) 732f0d0f1aSopenharmony_ci{ 742f0d0f1aSopenharmony_ci auto duration = timeAfter - timeBefore; 752f0d0f1aSopenharmony_ci auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(duration); 762f0d0f1aSopenharmony_ci return static_cast<uint32_t>(milliseconds.count()); 772f0d0f1aSopenharmony_ci} 782f0d0f1aSopenharmony_ci} // namespace DrmStandard 792f0d0f1aSopenharmony_ci} // namespace OHOS