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
20 using namespace std;
21 using namespace Hpackage;
22 namespace Updater {
RegisterHelper(void)23 extern "C" __attribute__((constructor)) void RegisterHelper(void)
24 {
25 PreProcess::GetInstance().RegisterHelper(UpdatePreProcess);
26 }
27
AuthHelper(void)28 extern "C" __attribute__((constructor)) void AuthHelper(void)
29 {
30 PreProcess::GetInstance().AuthHelper(UpdateAuth);
31 }
32
RegisterHelper(PreProcessFunc ptr)33 void PreProcess::RegisterHelper(PreProcessFunc ptr)
34 {
35 helper_ = std::move(ptr);
36 }
37
AuthHelper(AuthFunc ptr)38 void PreProcess::AuthHelper(AuthFunc ptr)
39 {
40 authHelper_ = std::move(ptr);
41 }
42
GetInstance()43 PreProcess &PreProcess::GetInstance()
44 {
45 static PreProcess checkPackagesInfo;
46 return checkPackagesInfo;
47 }
48
DoUpdatePreProcess(UpdaterParams & upParams,PkgManager::PkgManagerPtr pkgManager)49 int32_t PreProcess::DoUpdatePreProcess(UpdaterParams &upParams, PkgManager::PkgManagerPtr pkgManager)
50 {
51 if (helper_ == nullptr) {
52 LOG(INFO) << "PreProcess helper_ is null";
53 return -1;
54 }
55 return helper_(upParams, pkgManager);
56 }
57
DoUpdateAuth(std::string path)58 int32_t PreProcess::DoUpdateAuth(std::string path)
59 {
60 return authHelper_(path);
61 }
62
CheckVersion(PkgManager::PkgManagerPtr pkgManager,PackagesInfoPtr pkginfomanager)63 int CheckVersion(PkgManager::PkgManagerPtr pkgManager, PackagesInfoPtr pkginfomanager)
64 {
65 int ret = -1;
66 if (pkgManager == nullptr || pkginfomanager == nullptr) {
67 return PKG_INVALID_VERSION;
68 }
69 const char *verPtr = GetDisplayVersion();
70 if (verPtr == nullptr) {
71 LOG(ERROR) << "Fail to GetDisplayVersion";
72 return PKG_INVALID_VERSION;
73 }
74 std::string verStr(verPtr);
75 LOG(INFO) << "current version:" << verStr;
76 std::vector<std::string> targetVersions = pkginfomanager->GetOTAVersion(pkgManager, "version_list", "");
77 if (targetVersions.size() == 0) {
78 targetVersions = pkginfomanager->GetOTAVersion(pkgManager, "/version_list", "");
79 }
80 for (size_t i = 0; i < targetVersions.size(); i++) {
81 ret = verStr.compare(targetVersions[i]);
82 if (ret == 0) {
83 LOG(INFO) << "Check version success ";
84 break;
85 }
86 }
87 return ret;
88 }
89
CheckBoardId(PkgManager::PkgManagerPtr pkgManager,PackagesInfoPtr pkginfomanager)90 int CheckBoardId(PkgManager::PkgManagerPtr pkgManager, PackagesInfoPtr pkginfomanager)
91 {
92 int ret = -1;
93 if (pkgManager == nullptr || pkginfomanager == nullptr) {
94 return PKG_INVALID_VERSION;
95 }
96 std::string localBoardId = Utils::GetLocalBoardId();
97 if (localBoardId.empty()) {
98 return 0;
99 }
100 std::vector<std::string> boardIdList = pkginfomanager->GetBoardID(pkgManager, "board_list", "");
101 if (boardIdList.size() == 0) {
102 boardIdList = pkginfomanager->GetBoardID(pkgManager, "/board_list", "");
103 }
104 for (size_t i = 0; i < boardIdList.size(); i++) {
105 ret = localBoardId.compare(boardIdList[i]);
106 if (ret == 0) {
107 LOG(INFO) << "Check board list success ";
108 break;
109 }
110 }
111 return ret;
112 }
113
UpdatePreProcess(UpdaterParams & upParams,PkgManager::PkgManagerPtr pkgManager)114 int32_t UpdatePreProcess(UpdaterParams &upParams, PkgManager::PkgManagerPtr pkgManager)
115 {
116 int ret = -1;
117 if (pkgManager == nullptr) {
118 return PKG_INVALID_VERSION;
119 }
120 PackagesInfoPtr pkginfomanager = PackagesInfo::GetPackagesInfoInstance();
121 if (pkginfomanager == nullptr) {
122 return PKG_INVALID_VERSION;
123 }
124 ret = CheckBoardId(pkgManager, pkginfomanager);
125 if (ret != 0) {
126 PackagesInfo::ReleasePackagesInfoInstance(pkginfomanager);
127 return ret;
128 }
129 ret = CheckVersion(pkgManager, pkginfomanager);
130 PackagesInfo::ReleasePackagesInfoInstance(pkginfomanager);
131 return ret;
132 }
133
UpdateAuth(std::string & path)134 int32_t UpdateAuth(std::string &path)
135 {
136 return 0;
137 }
138 } // namespace Updater
139