153c3577eSopenharmony_ci/* 253c3577eSopenharmony_ci* Copyright (c) 2022 Huawei Device Co., Ltd. 353c3577eSopenharmony_ci* Licensed under the Apache License, Version 2.0 (the "License"); 453c3577eSopenharmony_ci* you may not use this file except in compliance with the License. 553c3577eSopenharmony_ci* You may obtain a copy of the License at 653c3577eSopenharmony_ci* 753c3577eSopenharmony_ci* http://www.apache.org/licenses/LICENSE-2.0 853c3577eSopenharmony_ci* 953c3577eSopenharmony_ci* Unless required by applicable law or agreed to in writing, software 1053c3577eSopenharmony_ci* distributed under the License is distributed on an "AS IS" BASIS, 1153c3577eSopenharmony_ci* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1253c3577eSopenharmony_ci* See the License for the specific language governing permissions and 1353c3577eSopenharmony_ci* limitations under the License. 1453c3577eSopenharmony_ci*/ 1553c3577eSopenharmony_ci#define LOG_TAG "Bootstrap" 1653c3577eSopenharmony_ci#include "bootstrap.h" 1753c3577eSopenharmony_ci 1853c3577eSopenharmony_ci#include <dlfcn.h> 1953c3577eSopenharmony_ci 2053c3577eSopenharmony_ci#include "backup_manager.h" 2153c3577eSopenharmony_ci#include "backuprule/backup_rule_manager.h" 2253c3577eSopenharmony_ci#include "checker/checker_manager.h" 2353c3577eSopenharmony_ci#include "cloud/cloud_config_manager.h" 2453c3577eSopenharmony_ci#include "config_factory.h" 2553c3577eSopenharmony_ci#include "directory/directory_manager.h" 2653c3577eSopenharmony_ci#include "log_print.h" 2753c3577eSopenharmony_ci#include "app_id_mapping/app_id_mapping_config_manager.h" 2853c3577eSopenharmony_cinamespace OHOS { 2953c3577eSopenharmony_cinamespace DistributedData { 3053c3577eSopenharmony_ciBootstrap &Bootstrap::GetInstance() 3153c3577eSopenharmony_ci{ 3253c3577eSopenharmony_ci static Bootstrap bootstrap; 3353c3577eSopenharmony_ci return bootstrap; 3453c3577eSopenharmony_ci} 3553c3577eSopenharmony_ci 3653c3577eSopenharmony_cistd::string Bootstrap::GetProcessLabel() 3753c3577eSopenharmony_ci{ 3853c3577eSopenharmony_ci auto *global = ConfigFactory::GetInstance().GetGlobalConfig(); 3953c3577eSopenharmony_ci if (global == nullptr || global->processLabel.empty()) { 4053c3577eSopenharmony_ci return DEFAULT_LABEL; 4153c3577eSopenharmony_ci } 4253c3577eSopenharmony_ci return global->processLabel; 4353c3577eSopenharmony_ci} 4453c3577eSopenharmony_ci 4553c3577eSopenharmony_cistd::string Bootstrap::GetMetaDBName() 4653c3577eSopenharmony_ci{ 4753c3577eSopenharmony_ci auto *global = ConfigFactory::GetInstance().GetGlobalConfig(); 4853c3577eSopenharmony_ci if (global == nullptr || global->metaData.empty()) { 4953c3577eSopenharmony_ci return DEFAULT_META; 5053c3577eSopenharmony_ci } 5153c3577eSopenharmony_ci return global->metaData; 5253c3577eSopenharmony_ci} 5353c3577eSopenharmony_ci 5453c3577eSopenharmony_civoid Bootstrap::LoadComponents() 5553c3577eSopenharmony_ci{ 5653c3577eSopenharmony_ci auto *comps = ConfigFactory::GetInstance().GetComponentConfig(); 5753c3577eSopenharmony_ci if (comps == nullptr) { 5853c3577eSopenharmony_ci return; 5953c3577eSopenharmony_ci } 6053c3577eSopenharmony_ci for (auto &comp : *comps) { 6153c3577eSopenharmony_ci if (comp.lib.empty()) { 6253c3577eSopenharmony_ci continue; 6353c3577eSopenharmony_ci } 6453c3577eSopenharmony_ci // no need to close the component, so we don't keep the handles 6553c3577eSopenharmony_ci auto handle = dlopen(comp.lib.c_str(), RTLD_LAZY); 6653c3577eSopenharmony_ci if (handle == nullptr) { 6753c3577eSopenharmony_ci ZLOGE("dlopen(%{public}s) failed(%{public}d)!", comp.lib.c_str(), errno); 6853c3577eSopenharmony_ci continue; 6953c3577eSopenharmony_ci } 7053c3577eSopenharmony_ci 7153c3577eSopenharmony_ci if (comp.constructor.empty()) { 7253c3577eSopenharmony_ci continue; 7353c3577eSopenharmony_ci } 7453c3577eSopenharmony_ci 7553c3577eSopenharmony_ci auto ctor = reinterpret_cast<Constructor>(dlsym(handle, comp.constructor.c_str())); 7653c3577eSopenharmony_ci if (ctor == nullptr) { 7753c3577eSopenharmony_ci ZLOGE("dlsym(%{public}s) failed(%{public}d)!", comp.constructor.c_str(), errno); 7853c3577eSopenharmony_ci continue; 7953c3577eSopenharmony_ci } 8053c3577eSopenharmony_ci ctor(comp.params.c_str()); 8153c3577eSopenharmony_ci } 8253c3577eSopenharmony_ci} 8353c3577eSopenharmony_ci 8453c3577eSopenharmony_civoid Bootstrap::LoadCheckers() 8553c3577eSopenharmony_ci{ 8653c3577eSopenharmony_ci auto *checkers = ConfigFactory::GetInstance().GetCheckerConfig(); 8753c3577eSopenharmony_ci if (checkers == nullptr) { 8853c3577eSopenharmony_ci return; 8953c3577eSopenharmony_ci } 9053c3577eSopenharmony_ci CheckerManager::GetInstance().LoadCheckers(checkers->checkers); 9153c3577eSopenharmony_ci for (const auto &trust : checkers->trusts) { 9253c3577eSopenharmony_ci auto *checker = CheckerManager::GetInstance().GetChecker(trust.checker); 9353c3577eSopenharmony_ci if (checker == nullptr) { 9453c3577eSopenharmony_ci continue; 9553c3577eSopenharmony_ci } 9653c3577eSopenharmony_ci checker->SetTrustInfo(trust); 9753c3577eSopenharmony_ci } 9853c3577eSopenharmony_ci for (const auto &distrust : checkers->distrusts) { 9953c3577eSopenharmony_ci auto *checker = CheckerManager::GetInstance().GetChecker(distrust.checker); 10053c3577eSopenharmony_ci if (checker == nullptr) { 10153c3577eSopenharmony_ci continue; 10253c3577eSopenharmony_ci } 10353c3577eSopenharmony_ci checker->SetDistrustInfo(distrust); 10453c3577eSopenharmony_ci } 10553c3577eSopenharmony_ci for (const auto &switches : checkers->switches) { 10653c3577eSopenharmony_ci auto *checker = CheckerManager::GetInstance().GetChecker(switches.checker); 10753c3577eSopenharmony_ci if (checker == nullptr) { 10853c3577eSopenharmony_ci continue; 10953c3577eSopenharmony_ci } 11053c3577eSopenharmony_ci checker->SetSwitchesInfo(switches); 11153c3577eSopenharmony_ci } 11253c3577eSopenharmony_ci for (const auto &dynamicStore : checkers->dynamicStores) { 11353c3577eSopenharmony_ci auto *checker = CheckerManager::GetInstance().GetChecker(dynamicStore.checker); 11453c3577eSopenharmony_ci if (checker == nullptr) { 11553c3577eSopenharmony_ci continue; 11653c3577eSopenharmony_ci } 11753c3577eSopenharmony_ci checker->AddDynamicStore(dynamicStore); 11853c3577eSopenharmony_ci } 11953c3577eSopenharmony_ci for (const auto &staticStore : checkers->staticStores) { 12053c3577eSopenharmony_ci auto *checker = CheckerManager::GetInstance().GetChecker(staticStore.checker); 12153c3577eSopenharmony_ci if (checker == nullptr) { 12253c3577eSopenharmony_ci continue; 12353c3577eSopenharmony_ci } 12453c3577eSopenharmony_ci checker->AddStaticStore(staticStore); 12553c3577eSopenharmony_ci } 12653c3577eSopenharmony_ci} 12753c3577eSopenharmony_ci 12853c3577eSopenharmony_civoid Bootstrap::LoadBackup(std::shared_ptr<ExecutorPool> executors) 12953c3577eSopenharmony_ci{ 13053c3577eSopenharmony_ci auto *backupRules = ConfigFactory::GetInstance().GetBackupConfig(); 13153c3577eSopenharmony_ci if (backupRules == nullptr) { 13253c3577eSopenharmony_ci return; 13353c3577eSopenharmony_ci } 13453c3577eSopenharmony_ci BackupRuleManager::GetInstance().LoadBackupRules(backupRules->rules); 13553c3577eSopenharmony_ci 13653c3577eSopenharmony_ci BackupManager::BackupParam backupParam = { backupRules->schedularDelay, 13753c3577eSopenharmony_ci backupRules->schedularInternal, backupRules->backupInternal, backupRules->backupNumber}; 13853c3577eSopenharmony_ci BackupManager::GetInstance().SetBackupParam(backupParam); 13953c3577eSopenharmony_ci BackupManager::GetInstance().Init(); 14053c3577eSopenharmony_ci BackupManager::GetInstance().BackSchedule(std::move(executors)); 14153c3577eSopenharmony_ci} 14253c3577eSopenharmony_ci 14353c3577eSopenharmony_civoid Bootstrap::LoadNetworks() 14453c3577eSopenharmony_ci{ 14553c3577eSopenharmony_ci} 14653c3577eSopenharmony_civoid Bootstrap::LoadDirectory() 14753c3577eSopenharmony_ci{ 14853c3577eSopenharmony_ci auto *config = ConfigFactory::GetInstance().GetDirectoryConfig(); 14953c3577eSopenharmony_ci if (config == nullptr) { 15053c3577eSopenharmony_ci return; 15153c3577eSopenharmony_ci } 15253c3577eSopenharmony_ci std::vector<DirectoryManager::Strategy> strategies(config->strategy.size()); 15353c3577eSopenharmony_ci for (size_t i = 0; i < config->strategy.size(); ++i) { 15453c3577eSopenharmony_ci strategies[i] = config->strategy[i]; 15553c3577eSopenharmony_ci } 15653c3577eSopenharmony_ci DirectoryManager::GetInstance().Initialize(strategies); 15753c3577eSopenharmony_ci} 15853c3577eSopenharmony_ci 15953c3577eSopenharmony_civoid Bootstrap::LoadCloud() 16053c3577eSopenharmony_ci{ 16153c3577eSopenharmony_ci auto *config = ConfigFactory::GetInstance().GetCloudConfig(); 16253c3577eSopenharmony_ci if (config == nullptr) { 16353c3577eSopenharmony_ci return; 16453c3577eSopenharmony_ci } 16553c3577eSopenharmony_ci std::vector<CloudConfigManager::Info> infos; 16653c3577eSopenharmony_ci for (auto &info : config->mapper) { 16753c3577eSopenharmony_ci infos.push_back({ info.localBundle, info.cloudBundle }); 16853c3577eSopenharmony_ci } 16953c3577eSopenharmony_ci CloudConfigManager::GetInstance().Initialize(infos); 17053c3577eSopenharmony_ci} 17153c3577eSopenharmony_ci 17253c3577eSopenharmony_civoid Bootstrap::LoadAppIdMappings() 17353c3577eSopenharmony_ci{ 17453c3577eSopenharmony_ci auto *appIdMapping = ConfigFactory::GetInstance().GetAppIdMappingConfig(); 17553c3577eSopenharmony_ci if (appIdMapping == nullptr) { 17653c3577eSopenharmony_ci return; 17753c3577eSopenharmony_ci } 17853c3577eSopenharmony_ci std::vector<AppIdMappingConfigManager::AppMappingInfo> infos; 17953c3577eSopenharmony_ci for (auto &info : *appIdMapping) { 18053c3577eSopenharmony_ci infos.push_back({ info.srcAppId, info.dstAppId }); 18153c3577eSopenharmony_ci } 18253c3577eSopenharmony_ci AppIdMappingConfigManager::GetInstance().Initialize(infos); 18353c3577eSopenharmony_ci} 18453c3577eSopenharmony_ci} // namespace DistributedData 18553c3577eSopenharmony_ci} // namespace OHOS 186