• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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