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