1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15#include "updater/updater_preprocess.h" 16#include "log.h" 17#include "parameter.h" 18#include "utils.h" 19 20using namespace std; 21using namespace Hpackage; 22namespace Updater { 23extern "C" __attribute__((constructor)) void RegisterHelper(void) 24{ 25 PreProcess::GetInstance().RegisterHelper(UpdatePreProcess); 26} 27 28extern "C" __attribute__((constructor)) void AuthHelper(void) 29{ 30 PreProcess::GetInstance().AuthHelper(UpdateAuth); 31} 32 33extern "C" __attribute__((constructor)) void ClearHelper(void) 34{ 35 PreProcess::GetInstance().ClearHelper(UpdateClear); 36} 37 38void PreProcess::RegisterHelper(PreProcessFunc ptr) 39{ 40 helper_ = std::move(ptr); 41} 42 43void PreProcess::AuthHelper(AuthFunc ptr) 44{ 45 authHelper_ = std::move(ptr); 46} 47 48void PreProcess::ClearHelper(ClearFunc ptr) 49{ 50 clearHelper_ = std::move(ptr); 51} 52 53PreProcess &PreProcess::GetInstance() 54{ 55 static PreProcess checkPackagesInfo; 56 return checkPackagesInfo; 57} 58 59int32_t PreProcess::DoUpdatePreProcess(UpdaterParams &upParams, PkgManager::PkgManagerPtr pkgManager) 60{ 61 if (helper_ == nullptr) { 62 LOG(INFO) << "PreProcess helper_ is null"; 63 return -1; 64 } 65 return helper_(upParams, pkgManager); 66} 67 68int32_t PreProcess::DoUpdateAuth(std::string path) 69{ 70 return authHelper_(path); 71} 72 73int32_t PreProcess::DoUpdateClear(void) 74{ 75 return clearHelper_(); 76} 77 78int CheckVersion(PkgManager::PkgManagerPtr pkgManager, PackagesInfoPtr pkginfomanager) 79{ 80 int ret = -1; 81 if (pkgManager == nullptr || pkginfomanager == nullptr) { 82 return PKG_INVALID_VERSION; 83 } 84 const char *verPtr = GetDisplayVersion(); 85 if (verPtr == nullptr) { 86 LOG(ERROR) << "Fail to GetDisplayVersion"; 87 return PKG_INVALID_VERSION; 88 } 89 std::string verStr(verPtr); 90 LOG(INFO) << "current version:" << verStr; 91 std::vector<std::string> targetVersions = pkginfomanager->GetOTAVersion(pkgManager, "version_list", ""); 92 if (targetVersions.size() == 0) { 93 targetVersions = pkginfomanager->GetOTAVersion(pkgManager, "/version_list", ""); 94 } 95 for (size_t i = 0; i < targetVersions.size(); i++) { 96 ret = verStr.compare(targetVersions[i]); 97 if (ret == 0) { 98 LOG(INFO) << "Check version success "; 99 break; 100 } 101 } 102 return ret; 103} 104 105int CheckBoardId(PkgManager::PkgManagerPtr pkgManager, PackagesInfoPtr pkginfomanager) 106{ 107 int ret = -1; 108 if (pkgManager == nullptr || pkginfomanager == nullptr) { 109 return PKG_INVALID_VERSION; 110 } 111 std::string localBoardId = Utils::GetLocalBoardId(); 112 if (localBoardId.empty()) { 113 return 0; 114 } 115 std::vector<std::string> boardIdList = pkginfomanager->GetBoardID(pkgManager, "board_list", ""); 116 if (boardIdList.size() == 0) { 117 boardIdList = pkginfomanager->GetBoardID(pkgManager, "/board_list", ""); 118 } 119 for (size_t i = 0; i < boardIdList.size(); i++) { 120 ret = localBoardId.compare(boardIdList[i]); 121 if (ret == 0) { 122 LOG(INFO) << "Check board list success "; 123 break; 124 } 125 } 126 return ret; 127} 128 129int32_t UpdatePreProcess(UpdaterParams &upParams, PkgManager::PkgManagerPtr pkgManager) 130{ 131 int ret = -1; 132 if (pkgManager == nullptr) { 133 return PKG_INVALID_VERSION; 134 } 135 PackagesInfoPtr pkginfomanager = PackagesInfo::GetPackagesInfoInstance(); 136 if (pkginfomanager == nullptr) { 137 return PKG_INVALID_VERSION; 138 } 139 ret = CheckBoardId(pkgManager, pkginfomanager); 140 if (ret != 0) { 141 PackagesInfo::ReleasePackagesInfoInstance(pkginfomanager); 142 return ret; 143 } 144 ret = CheckVersion(pkgManager, pkginfomanager); 145 PackagesInfo::ReleasePackagesInfoInstance(pkginfomanager); 146 return ret; 147} 148 149int32_t UpdateAuth(std::string &path) 150{ 151 return 0; 152} 153 154int32_t UpdateClear(void) 155{ 156 return 0; 157} 158} // namespace Updater 159