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 // 多用户场景应用备份数据路径
GetSaBundleBackupDir(int32_t userId)153 static inline std::string GetSaBundleBackupDir(int32_t userId)
154 {
155 std::string str;
156 str.append("/data/app/el2/");
157 str.append(std::to_string(userId));
158 str.append("/base/.backup/");
159 return str;
160 }
161
GetSaBundleBackupRootDir(int32_t userId)162 static inline std::string GetSaBundleBackupRootDir(int32_t userId)
163 {
164 std::string str;
165 str.append("/data/service/el2/");
166 str.append(std::to_string(userId));
167 str.append("/backup/backup_sa/");
168 return str;
169 }
170
GetSaBundleBackupToolDir(int32_t userId)171 static inline std::string GetSaBundleBackupToolDir(int32_t userId)
172 {
173 std::string str;
174 str.append("/data/service/el2/");
175 str.append(std::to_string(userId));
176 str.append("/backup/backup_tool/");
177 return str;
178 }
179
180 // 备份恢复配置文件暂存路径
181 static inline std::string_view BACKUP_CONFIG_EXTENSION_PATH = "/data/storage/el2/base/cache/";
182
183 // 应用备份恢复所需的索引文件
184 static inline std::string_view EXT_BACKUP_MANAGE = "manage.json";
185
186 // 包管理元数据配置文件
187 static inline std::string_view BACKUP_CONFIG_JSON = "backup_config.json";
188
189 // 简报文件名后缀
190 static inline std::string_view REPORT_FILE_EXT = "rp";
191
192 // 空简报
193 static inline std::string BLANK_REPORT_NAME = "blankReport.rp";
194
195 // 特殊版本信息
196 constexpr int DEFAULT_VERSION_CODE = 0;
197 constexpr char VERSION_NAME_SEPARATOR_CHAR = '-';
198 static inline std::string_view DEFAULT_VERSION_NAME = "0.0.0.0";
199 static inline std::string_view DEFAULT_VERSION_NAME_CLONE = "99.99.99.999";
200 static inline std::string_view DEFAULT_VERSION_NAME_CLONE_2 = "99.99.99.998";
201 static inline std::string_view DEFAULT_VERSION_NAME_CLONE_3 = "99.99.99.997";
202 static inline std::string_view DEFAULT_VERSION_NAME_PC = "99.99.99.996";
203 static inline std::string_view DEFAULT_VERSION_NAME_CLOUD = "99.99.99.995";
204 static inline std::vector<std::string_view> DEFAULT_VERSION_NAMES_VEC = {
205 DEFAULT_VERSION_NAME, DEFAULT_VERSION_NAME_CLONE, DEFAULT_VERSION_NAME_CLONE_2,
206 DEFAULT_VERSION_NAME_CLONE_3, DEFAULT_VERSION_NAME_PC, DEFAULT_VERSION_NAME_CLOUD,
207 };
208
209 // 应用默认备份的目录,其均为相对根路径的路径。为避免模糊匹配,务必以斜线为结尾。
210 static inline std::array<std::string_view, PATHES_TO_BACKUP_SIZE> PATHES_TO_BACKUP = {
211 "data/storage/el1/database/", "data/storage/el1/base/files/",
212 "data/storage/el1/base/preferences/", "data/storage/el1/base/haps/*/database/",
213 "data/storage/el1/base/haps/*/files/", "data/storage/el1/base/haps/*/preferences/",
214 "data/storage/el2/database/", "data/storage/el2/base/files/",
215 "data/storage/el2/base/preferences/", "data/storage/el2/base/haps/*/database/",
216 "data/storage/el2/base/haps/*/files/", "data/storage/el2/base/haps/*/preferences/",
217 "data/storage/el2/distributedfiles/",
218 };
219
220 // napi 层代码引用到的常量,对应js接口声明(@ohos.file.backup.d.ts)中的属性字段
221 static inline std::string BUNDLE_NAME = "bundleName";
222 static inline std::string URI = "uri";
223 static inline std::string FD = "fd";
224 static inline std::string MANIFEST_FD = "manifestFd";
225 static inline std::string LAST_INCREMENTAL_TIME = "lastIncrementalTime";
226 static inline std::string PARAMETERS = "parameters";
227 static inline std::string PRIORITY = "priority";
228
229 // unicast
230 const std::string UNICAST_TYPE = "unicast";
231
232 // 雷达打点引用到的常量
233 constexpr int32_t MS_1000 = 1000;
234 constexpr int32_t MAX_TIME_COST = 900000;
235 constexpr int32_t MAX_INEXCLUDE_SIZE = 25;
236 constexpr uint8_t INDEX = 3;
237 static inline std::string FILE_BACKUP_RESTORE_EVENTS = "FILE_BACKUP_RESTORE_EVENTS";
238 static inline std::string FILE_BACKUP_RESTORE_STATISTIC = "FILE_BACKUP_RESTORE_STATISTIC";
239 } // namespace OHOS::FileManagement::Backup::BConstants
240
241 #endif // OHOS_FILEMGMT_BACKUP_B_CONSTANTS_H
242