1 /*
2  * Copyright (c) 2022-2024 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 
16 #ifndef OHOS_FILEMGMT_BACKUP_B_CONSTANTS_H
17 #define OHOS_FILEMGMT_BACKUP_B_CONSTANTS_H
18 
19 #include <array>
20 #include <cstdint>
21 #include <string>
22 #include <string_view>
23 #include <unistd.h>
24 
25 namespace OHOS::FileManagement::Backup::BConstants {
26 
27 static inline const char *EXTENSION_ACTION_PARA = "extensionAction";
28 static inline const char *EXTENSION_RESTORE_TYPE_PARA = "restoreType";
29 static inline const char *EXTENSION_VERSION_CODE_PARA = "versionCode";
30 static inline const char *EXTENSION_VERSION_NAME_PARA = "versionName";
31 static inline const char *EXTENSION_RESTORE_EXT_INFO_PARA = "restoreExtInfo";
32 static inline const char *EXTENSION_BACKUP_EXT_INFO_PARA = "backupExtInfo";
33 static inline const char *EXTENSION_APP_CLONE_INDEX_PARA = "ohos.extra.param.key.appCloneIndex";
34 
35 enum class ExtensionAction {
36     INVALID = 0,
37     BACKUP = 1,
38     RESTORE = 2,
39 };
40 
41 enum ServiceSchedAction {
42     WAIT = 0,
43     START = 1,
44     RUNNING = 2,
45     FINISH = 3,
46     CLEAN = 4,
47 };
48 
49 constexpr int SPAN_USERID_UID = 200000;
50 constexpr int SYSTEM_UID = 0;
51 constexpr int XTS_UID = 1;
52 constexpr int DEFAULT_USER_ID = 100;
53 constexpr int BACKUP_UID = 1089;
54 constexpr int EXTENSION_THREAD_POOL_COUNT = 1;
55 constexpr int BACKUP_LOADSA_TIMEOUT_MS = 5000;
56 
57 constexpr int DECIMAL_BASE = 10; // 十进制基数
58 
59 constexpr off_t BIG_FILE_BOUNDARY = 2 * 1024 * 1024; // 大文件边界
60 constexpr unsigned long BIG_FILE_NAME_SIZE = 16;     // 大文件名长度(hash处理)
61 
62 constexpr int PATHES_TO_BACKUP_SIZE = 13;     // 应用默认备份的目录个数
63 constexpr uint32_t BACKUP_PARA_VALUE_MAX = 5; // 读取backup.para字段值的最大长度
64 constexpr int SA_THREAD_POOL_COUNT = 1;       // SA THREAD_POOL 最大线程数
65 constexpr int EXT_CONNECT_MAX_COUNT = 3;      // extension 最大启动数
66 constexpr int EXT_CONNECT_MAX_TIME = 15000;   // SA 启动 extension 等待连接最大时间
67 
68 constexpr int IPC_MAX_WAIT_TIME = 3000; // IPC通讯最大等待时间(s)
69 constexpr int MAX_PARCELABLE_VECTOR_NUM = 10000;
70 constexpr char FILE_SEPARATOR_CHAR = '/';
71 
72 // 分片打包常量
73 const uint64_t DEFAULT_SLICE_SIZE = 100 * 1024 * 1024; // 分片文件大小为100M
74 const uint32_t MAX_FILE_COUNT = 6000; // 单个tar包最多包含6000个文件
75 const int FILE_AND_MANIFEST_FD_COUNT = 2; // 每组文件和简报数量统计
76 
77 constexpr int DEFAULT_VFS_CACHE_PRESSURE = 100; // 默认内存回收参数
78 constexpr int BACKUP_VFS_CACHE_PRESSURE = 10000; // 备份过程修改参数
79 
80 constexpr int32_t INVALID_FD_NUM = -1;
81 
82 constexpr int MAX_FD_SEND_RATE = 800; // 允许应用申请的最大FD数量
83 constexpr int MIN_FD_SEND_RATE = 0; // 允许应用申请的最小FD数量
84 constexpr int DEFAULT_FD_SEND_RATE = 60; // 框架默认的FD数量
85 constexpr int32_t PARAM_STARING_MAX_MEMORY = 2 * 1024 * 1024;
86 constexpr uint32_t H2MS = 60 * 60 * 1000;
87 constexpr uint32_t MAX_UPDATE_TIMER = 4 * H2MS;
88 constexpr uint32_t DEFAULT_TIMEOUT = 15 * 60 * 1000;
89 constexpr uint32_t TIMEOUT_INVALID = UINT32_MAX;
90 
91 constexpr int CALL_APP_ON_PROCESS_TIME_INTERVAL = 5; // 框架每隔5s去调用应用的onProcess
92 constexpr int APP_ON_PROCESS_MAX_TIMEOUT = 1000; // 应用的onProcess接口最大超时时间为1秒
93 constexpr int FIRST_CALL_APP_ON_PROCESS_MAX_TIMEOUT = 15000; // 首次调用应用的onProcess接口最大超时时间为15秒
94 constexpr int APP_ON_PROCESS_TIMEOUT_MAX_COUNT = 3; // 应用的onProcess接口超时的上限次数
95 
96 // backup.para内配置项的名称,该配置项值为true时可在不更新hap包的情况下,可以读取包管理元数据配置文件的内容
97 static inline std::string BACKUP_DEBUG_OVERRIDE_EXTENSION_CONFIG_KEY = "backup.debug.overrideExtensionConfig";
98 static const bool BACKUP_DEBUG_OVERRIDE_EXTENSION_CONFIG_DEFAULT_VALUE = false;
99 
100 // backup.para内配置项的名称,该配置项AccountConfig为true时存在时,可以按照配置的AccountNumber备份恢复
101 static inline std::string BACKUP_DEBUG_OVERRIDE_ACCOUNT_CONFIG_KEY = "backup.debug.overrideAccountConfig";
102 static inline std::string BACKUP_DEBUG_OVERRIDE_ACCOUNT_NUMBER_KEY = "backup.debug.overrideAccountNumber";
103 
104 // 增量备份相关处理目录
105 static const std::string BACKUP_PATH_PREFIX = "/data/service/el2/";
106 static const std::string BACKUP_PATH_SURFFIX = "/backup/backup_sa/";
107 static const std::string BACKUP_INCEXC_SYMBOL = "incExc_";
108 static const std::string BACKUP_STAT_SYMBOL = "stat_";
109 static const std::string BACKUP_INCLUDE = "INCLUDES";
110 static const std::string BACKUP_EXCLUDE = "EXCLUDES";
111 
112 // backup.para内配置项的名称,该配置项为true时备份恢复支持Release接口调用
113 static inline std::string BACKUP_OVERRIDE_BACKUP_SA_RELEASE_KEY = "backup.overrideBackupSARelease";
114 static const bool BACKUP_DEBUG_OVERRIDE_BACKUP_SA_RELEASE_DEFAULT_VALUE = true;
115 
116 // backup.para内配置项的名称,该配置项为true时备份恢复支持增量恢复
117 static inline std::string BACKUP_OVERRIDE_INCREMENTAL_KEY = "backup.overrideIncrementalRestore";
118 static const bool BACKUP_DEBUG_OVERRIDE_INCREMENTAL_DEFAULT_VALUE = true;
119 
120 // 应用备份数据暂存路径
121 static inline std::string_view SA_BUNDLE_BACKUP_BACKUP = "/backup/";
122 static inline std::string_view SA_BUNDLE_BACKUP_RESTORE = "/restore/";
123 static inline std::string_view SA_BUNDLE_BACKUP_TMP_DIR = "/tmp/";
124 static inline std::string_view BACKUP_TOOL_RECEIVE_DIR = "/data/backup/received/";
125 static inline std::string_view PATH_BUNDLE_BACKUP_HOME_EL1 = "/data/storage/el1/base/.backup";
126 static inline std::string_view PATH_BUNDLE_BACKUP_HOME = "/data/storage/el2/base/.backup";
127 static inline std::string_view PATH_FILEMANAGE_BACKUP_HOME = "/storage/Users/currentUser/.backup";
128 static inline std::string_view PATH_MEDIALDATA_BACKUP_HOME = "/storage/media/local/files/.backup";
129 static inline std::string_view BACKUP_TOOL_LINK_DIR = "/data/backup";
130 static inline std::string_view BACKUP_TOOL_INCREMENTAL_RECEIVE_DIR = "/data/backup/incrementalreceived/";
131 static inline std::string_view BACKUP_TOOL_MANIFEST = "/manifest";
132 static inline std::string_view BACKUP_TOOL_INCREMENTAL = "/incremental";
133 static inline std::string BACKUP_DIR_PRE = "/data/storage/";
134 static inline std::string CONTEXT_ELS[] = {"el1", "el2"};
135 static inline std::string BACKUP_DIR_END = "/base/.backup/";
136 static inline std::string BUNDLE_BASE_DIR = "/data/storage/el2/base";
137 static inline std::string PATH_PUBLIC_HOME = "/storage/Users/currentUser/";
138 static inline std::string PATH_APP_DATA = "appdata";
139 
140 // 文管bundleName
141 static inline std::string BUNDLE_FILE_MANAGER = "hmos.filemanager";
142 // 文管bundleNameSize
143 constexpr size_t FM_LEN = 27;
144 // 媒体库数据bundleName
145 static inline std::string BUNDLE_MEDIAL_DATA = "com.ohos.medialibrary.medialibrarydata";
146 // SA Ext
147 constexpr int BACKUP_DEFAULT_SA_ID = -1;
148 constexpr int BACKUP_SA_RELOAD_MAX = 2;
149 static inline std::string EXTENSION_BACKUP = "backup";
150 static inline std::string EXTENSION_RESTORE = "restore";
151 // 路径校验
152 static inline std::string PATH_ABSOLUTE = "../";
153 
154 // 多用户场景应用备份数据路径
GetSaBundleBackupDir(int32_t userId)155 static inline std::string GetSaBundleBackupDir(int32_t userId)
156 {
157     std::string str;
158     str.append("/data/app/el2/");
159     str.append(std::to_string(userId));
160     str.append("/base/.backup/");
161     return str;
162 }
163 
GetSaBundleBackupRootDir(int32_t userId)164 static inline std::string GetSaBundleBackupRootDir(int32_t userId)
165 {
166     std::string str;
167     str.append("/data/service/el2/");
168     str.append(std::to_string(userId));
169     str.append("/backup/backup_sa/");
170     return str;
171 }
172 
GetSaBundleBackupToolDir(int32_t userId)173 static inline std::string GetSaBundleBackupToolDir(int32_t userId)
174 {
175     std::string str;
176     str.append("/data/service/el2/");
177     str.append(std::to_string(userId));
178     str.append("/backup/backup_tool/");
179     return str;
180 }
181 
182 // 备份恢复配置文件暂存路径
183 static inline std::string_view BACKUP_CONFIG_EXTENSION_PATH = "/data/storage/el2/base/cache/";
184 
185 // 应用备份恢复所需的索引文件
186 static inline std::string_view EXT_BACKUP_MANAGE = "manage.json";
187 
188 // 包管理元数据配置文件
189 static inline std::string_view BACKUP_CONFIG_JSON = "backup_config.json";
190 
191 // 简报文件名后缀
192 static inline std::string_view REPORT_FILE_EXT = "rp";
193 
194 // 空简报
195 static inline std::string BLANK_REPORT_NAME = "blankReport.rp";
196 
197 // 特殊版本信息
198 constexpr int DEFAULT_VERSION_CODE = 0;
199 constexpr char VERSION_NAME_SEPARATOR_CHAR = '-';
200 static inline std::string_view DEFAULT_VERSION_NAME = "0.0.0.0";
201 static inline std::string_view DEFAULT_VERSION_NAME_CLONE = "99.99.99.999";
202 static inline std::string_view DEFAULT_VERSION_NAME_CLONE_2 = "99.99.99.998";
203 static inline std::string_view DEFAULT_VERSION_NAME_CLONE_3 = "99.99.99.997";
204 static inline std::string_view DEFAULT_VERSION_NAME_PC = "99.99.99.996";
205 static inline std::string_view DEFAULT_VERSION_NAME_CLOUD = "99.99.99.995";
206 static inline std::vector<std::string_view> DEFAULT_VERSION_NAMES_VEC = {
207     DEFAULT_VERSION_NAME,         DEFAULT_VERSION_NAME_CLONE, DEFAULT_VERSION_NAME_CLONE_2,
208     DEFAULT_VERSION_NAME_CLONE_3, DEFAULT_VERSION_NAME_PC,    DEFAULT_VERSION_NAME_CLOUD,
209 };
210 
211 // 应用默认备份的目录,其均为相对根路径的路径。为避免模糊匹配,务必以斜线为结尾。
212 static inline std::array<std::string_view, PATHES_TO_BACKUP_SIZE> PATHES_TO_BACKUP = {
213     "data/storage/el1/database/",          "data/storage/el1/base/files/",
214     "data/storage/el1/base/preferences/",  "data/storage/el1/base/haps/*/database/",
215     "data/storage/el1/base/haps/*/files/", "data/storage/el1/base/haps/*/preferences/",
216     "data/storage/el2/database/",          "data/storage/el2/base/files/",
217     "data/storage/el2/base/preferences/",  "data/storage/el2/base/haps/*/database/",
218     "data/storage/el2/base/haps/*/files/", "data/storage/el2/base/haps/*/preferences/",
219     "data/storage/el2/distributedfiles/",
220 };
221 
222 // napi 层代码引用到的常量,对应js接口声明(@ohos.file.backup.d.ts)中的属性字段
223 static inline std::string BUNDLE_NAME = "bundleName";
224 static inline std::string URI = "uri";
225 static inline std::string FD = "fd";
226 static inline std::string MANIFEST_FD = "manifestFd";
227 static inline std::string LAST_INCREMENTAL_TIME = "lastIncrementalTime";
228 static inline std::string PARAMETERS = "parameters";
229 static inline std::string PRIORITY = "priority";
230 
231 // unicast
232 const std::string UNICAST_TYPE = "unicast";
233 
234 // 雷达打点引用到的常量
235 constexpr int32_t MS_1000 = 1000;
236 constexpr int32_t MAX_TIME_COST = 900000;
237 constexpr int32_t MAX_INEXCLUDE_SIZE = 25;
238 constexpr uint8_t INDEX = 3;
239 static inline std::string FILE_BACKUP_RESTORE_EVENTS = "FILE_BACKUP_RESTORE_EVENTS";
240 static inline std::string FILE_BACKUP_RESTORE_STATISTIC = "FILE_BACKUP_RESTORE_STATISTIC";
241 } // namespace OHOS::FileManagement::Backup::BConstants
242 
243 #endif // OHOS_FILEMGMT_BACKUP_B_CONSTANTS_H
244