1 /*
2 * Copyright (c) 2021-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
16 #include "form_errors.h"
17 #include "appexecfwk_errors.h"
18 #include "form_mgr_errors.h"
19
20 namespace OHOS {
21 namespace AppExecFwk {
22 namespace {
23 const std::map<int32_t, int32_t> ERROR_CODE_MAP_EXTERNAL = {
24 { ERR_OK, ERR_OK },
25 { ERR_APPEXECFWK_FORM_COMMON_CODE, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
26 { ERR_APPEXECFWK_FORM_PERMISSION_DENY, ERR_FORM_EXTERNAL_PERMISSION_DENIED },
27 { ERR_APPEXECFWK_FORM_PERMISSION_DENY_BUNDLE, ERR_FORM_EXTERNAL_PERMISSION_DENIED },
28 { ERR_APPEXECFWK_FORM_PERMISSION_DENY_SYS, ERR_FORM_EXTERNAL_NOT_SYSTEM_APP },
29 { ERR_APPEXECFWK_FORM_GET_INFO_FAILED, ERR_FORM_EXTERNAL_GET_INFO_FAILED },
30 { ERR_APPEXECFWK_FORM_GET_BUNDLE_FAILED, ERR_FORM_EXTERNAL_GET_INFO_FAILED },
31 { ERR_APPEXECFWK_FORM_INVALID_PARAM, ERR_FORM_EXTERNAL_PARAM_INVALID },
32 { ERR_APPEXECFWK_FORM_INVALID_FORM_ID, ERR_FORM_EXTERNAL_PARAM_INVALID },
33 { ERR_APPEXECFWK_FORM_FORM_ID_NUM_ERR, ERR_FORM_EXTERNAL_PARAM_INVALID },
34 { ERR_APPEXECFWK_FORM_FORM_ARRAY_ERR, ERR_FORM_EXTERNAL_PARAM_INVALID },
35 { ERR_APPEXECFWK_FORM_RELEASE_FLG_ERR, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
36 { ERR_APPEXECFWK_FORM_REFRESH_TIME_NUM_ERR, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
37 { ERR_APPEXECFWK_FORM_INVALID_BUNDLENAME, ERR_FORM_EXTERNAL_PARAM_INVALID },
38 { ERR_APPEXECFWK_FORM_INVALID_MODULENAME, ERR_FORM_EXTERNAL_PARAM_INVALID },
39 { ERR_APPEXECFWK_FORM_INVALID_PROVIDER_DATA, ERR_FORM_EXTERNAL_PARAM_INVALID },
40 { ERR_APPEXECFWK_FORM_INVALID_REFRESH_TIME, ERR_FORM_EXTERNAL_PARAM_INVALID },
41 { ERR_APPEXECFWK_FORM_FORM_ID_ARRAY_ERR, ERR_FORM_EXTERNAL_PARAM_INVALID },
42 { ERR_APPEXECFWK_FORM_SERVER_STATUS_ERR, ERR_FORM_EXTERNAL_SERVICE_CONNECTION_ERROR },
43 { ERR_APPEXECFWK_FORM_CFG_NOT_MATCH_ID, ERR_FORM_EXTERNAL_FORM_ID_NOT_EXIST },
44 { ERR_APPEXECFWK_FORM_NOT_EXIST_ID, ERR_FORM_EXTERNAL_FORM_ID_NOT_EXIST },
45 { ERR_APPEXECFWK_FORM_PROVIDER_DATA_EMPTY, ERR_FORM_EXTERNAL_PARAM_INVALID },
46 { ERR_APPEXECFWK_FORM_BIND_PROVIDER_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
47 { ERR_APPEXECFWK_FORM_MAX_SYSTEM_FORMS, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
48 { ERR_APPEXECFWK_FORM_EXCEED_INSTANCES_PER_FORM, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
49 { ERR_APPEXECFWK_FORM_OPERATION_NOT_SELF, ERR_FORM_EXTERNAL_OPERATION_FORM_NOT_SELF },
50 { ERR_APPEXECFWK_FORM_PROVIDER_DEL_FAIL, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
51 { ERR_APPEXECFWK_FORM_MAX_FORMS_PER_CLIENT, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
52 { ERR_APPEXECFWK_FORM_MAX_SYSTEM_TEMP_FORMS, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
53 { ERR_APPEXECFWK_FORM_NO_SUCH_MODULE, ERR_FORM_EXTERNAL_PARAM_INVALID },
54 { ERR_APPEXECFWK_FORM_NO_SUCH_ABILITY, ERR_FORM_EXTERNAL_PARAM_INVALID },
55 { ERR_APPEXECFWK_FORM_NO_SUCH_DIMENSION, ERR_FORM_EXTERNAL_PARAM_INVALID },
56 { ERR_APPEXECFWK_FORM_FA_NOT_INSTALLED, ERR_FORM_EXTERNAL_ABILITY_NOT_INSTALLED },
57 { ERR_APPEXECFWK_FORM_MAX_REQUEST, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
58 { ERR_APPEXECFWK_FORM_MAX_REFRESH, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
59 { ERR_APPEXECFWK_FORM_GET_BMS_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
60 { ERR_APPEXECFWK_FORM_GET_HOST_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
61 { ERR_APPEXECFWK_FORM_GET_FMS_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
62 { ERR_APPEXECFWK_FORM_SEND_FMS_MSG, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
63 { ERR_APPEXECFWK_FORM_FORM_DUPLICATE_ADDED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
64 { ERR_APPEXECFWK_FORM_IN_RECOVER, ERR_FORM_EXTERNAL_SERVICE_CONNECTION_ERROR },
65 { ERR_APPEXECFWK_FORM_DISTRIBUTED_SCHEDULE_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
66 { ERR_APPEXECFWK_FORM_GET_SYSMGR_FAILED, ERR_FORM_EXTERNAL_IPC_ERROR },
67 { ERR_APPEXECFWK_FORM_CONNECT_FORM_RENDER_FAILED, ERR_FORM_EXTERNAL_CONNECT_RENDER_FAILED },
68 { ERR_APPEXECFWK_FORM_RENDER_SERVICE_DIED, ERR_FORM_EXTERNAL_RENDER_DIED },
69 };
70
71 const std::map<int32_t, std::string> ERR_MSG_MAP_EXTERNAL = {
72 { ERR_OK, "success" },
73 { ERR_FORM_EXTERNAL_PERMISSION_DENIED, "Permissions denied." },
74 { ERR_FORM_EXTERNAL_PARAM_INVALID, "Parameter error." },
75 { ERR_FORM_EXTERNAL_SYSTEMCAP_ERROR, "The specified SystemCapability names was not found." },
76 { ERR_FORM_EXTERNAL_KERNEL_ERROR, "A generic kernel error occurred." },
77 { ERR_FORM_EXTERNAL_KERNEL_MALLOC_ERROR, "Failed to alloc." },
78 { ERR_FORM_EXTERNAL_IPC_ERROR, "An IPC connection error happened." },
79 { ERR_FORM_EXTERNAL_SERVICE_CONNECTION_ERROR, "A service connection error happened, please try again later." },
80 { ERR_FORM_EXTERNAL_GET_INFO_FAILED, "Failed to obtain the configuration information." },
81 { ERR_FORM_EXTERNAL_NOT_SYSTEM_APP, "The application is not a system application." },
82 { ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR, "An internal functional error occurred." },
83 { ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND, "The number of forms exceeds upper bound." },
84 { ERR_FORM_EXTERNAL_FORM_ID_NOT_EXIST, "The ID of the form to be operated does not exist" },
85 { ERR_FORM_EXTERNAL_OPERATION_FORM_NOT_SELF, "The form can not be operated by the current application" },
86 { ERR_FORM_EXTERNAL_ABILITY_NOT_INSTALLED, "The ability is not installed" },
87 { ERR_FORM_EXTERNAL_CONNECT_RENDER_FAILED, "Connect FormRenderService failed, please try again later." },
88 { ERR_FORM_EXTERNAL_RENDER_DIED, "FormRenderService is dead, please reconnect." },
89 };
90
91 const std::map<int32_t, std::string> ERR_MSG_MAP_INTERNAL = {
92 { ERR_APPEXECFWK_FORM_INVALID_PARAM, "" },
93 { ERR_APPEXECFWK_FORM_INVALID_FORM_ID, "The formId is invalid." },
94 };
95 }
FormErrors()96 FormErrors::FormErrors()
97 {
98 InitErrorMessageMap();
99 }
~FormErrors()100 FormErrors::~FormErrors()
101 {
102 }
103
104 /**
105 * @brief Get the error message content.
106 *
107 * @param errCode Error code.
108 * @return Message content.
109 */
GetErrorMessage(int errCode)110 std::string FormErrors::GetErrorMessage(int errCode)
111 {
112 if (errorMessageMap_.find(errCode) != errorMessageMap_.end()) {
113 return errorMessageMap_[errCode];
114 } else {
115 return errorMessageMap_[ERR_APPEXECFWK_FORM_COMMON_CODE];
116 }
117 }
118
QueryExternalErrorCode(int32_t internalErrorCode)119 int32_t FormErrors::QueryExternalErrorCode(int32_t internalErrorCode)
120 {
121 auto iter = ERROR_CODE_MAP_EXTERNAL.find(internalErrorCode);
122 if (iter != ERROR_CODE_MAP_EXTERNAL.end()) {
123 return iter->second;
124 }
125 return ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR;
126 }
127
QueryExternalErrorMessage(int32_t internalErrorCode,int32_t externalErrorCode)128 std::string FormErrors::QueryExternalErrorMessage(int32_t internalErrorCode, int32_t externalErrorCode)
129 {
130 std::string errorMessage = GetErrorMsgByExternalErrorCode(externalErrorCode);
131
132 auto iterInternal = ERR_MSG_MAP_INTERNAL.find(internalErrorCode);
133 if (iterInternal == ERR_MSG_MAP_INTERNAL.end() || iterInternal->second.empty()) {
134 return errorMessage;
135 }
136 errorMessage += " " + iterInternal->second;
137 return errorMessage;
138 }
139
GetErrorMsgByExternalErrorCode(int32_t externalErrorCode)140 std::string FormErrors::GetErrorMsgByExternalErrorCode(int32_t externalErrorCode)
141 {
142 auto iter = ERR_MSG_MAP_EXTERNAL.find(externalErrorCode);
143 std::string errorMessage;
144 if (iter != ERR_MSG_MAP_EXTERNAL.end()) {
145 errorMessage = iter->second;
146 } else {
147 errorMessage = ERR_MSG_MAP_EXTERNAL.at(ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR);
148 }
149 return errorMessage;
150 }
151
152 /**
153 * @brief Init error message map object.
154 *
155 */
InitErrorMessageMap()156 void FormErrors::InitErrorMessageMap()
157 {
158 errorMessageMap_ = { // error + message
159 {
160 ERR_APPEXECFWK_FORM_COMMON_CODE, "some internal server error occurs.",
161 },
162 {
163 ERR_APPEXECFWK_FORM_PERMISSION_DENY,
164 "check permission deny, need to request ohos.permission.REQUIRE_FORM.",
165 },
166 {
167 ERR_APPEXECFWK_FORM_PERMISSION_DENY_BUNDLE,
168 "check permission deny, need to request ohos.permission.GET_BUNDLE_INFO_PRIVILEGED.",
169 },
170 {
171 ERR_APPEXECFWK_FORM_PERMISSION_DENY_SYS,
172 "check permission deny, need system permission.",
173 },
174 {
175 ERR_APPEXECFWK_FORM_GET_INFO_FAILED, "can't get form info by the formName.",
176 },
177 {
178 ERR_APPEXECFWK_FORM_GET_BUNDLE_FAILED, "the requested bundle name does not exist.",
179 },
180 {
181 ERR_APPEXECFWK_FORM_INVALID_PARAM, "invalid params received on operating form.",
182 },
183 {
184 ERR_APPEXECFWK_FORM_INVALID_FORM_ID, "formId must be a string.",
185 },
186 {
187 ERR_APPEXECFWK_FORM_FORM_ID_NUM_ERR, "formId must be a numeric string.",
188 },
189 {
190 ERR_APPEXECFWK_FORM_FORM_ARRAY_ERR, "formIds must be a array.",
191 },
192 {
193 ERR_APPEXECFWK_FORM_RELEASE_FLG_ERR, "release cache flag must be a boolean.",
194 },
195 {
196 ERR_APPEXECFWK_FORM_REFRESH_TIME_NUM_ERR, "refresh time must be a number.",
197 },
198 {
199 ERR_APPEXECFWK_FORM_FORM_ID_ARRAY_ERR, "formId array is empty.",
200 },
201 {
202 ERR_APPEXECFWK_FORM_INVALID_BUNDLENAME, "bundleName is not available.",
203 },
204 {
205 ERR_APPEXECFWK_FORM_INVALID_MODULENAME, "moduleName is not available.",
206 },
207 {
208 ERR_APPEXECFWK_FORM_INVALID_PROVIDER_DATA, "moduleName is not available.",
209 },
210 {
211 ERR_APPEXECFWK_FORM_INVALID_REFRESH_TIME, "refresh time is not available.",
212 },
213 {
214 ERR_APPEXECFWK_FORM_SERVER_STATUS_ERR, "form server error.",
215 },
216 {
217 ERR_APPEXECFWK_FORM_CFG_NOT_MATCH_ID, "the form id and form config are not matched.",
218 },
219 {
220 ERR_APPEXECFWK_FORM_NOT_EXIST_ID, "the requested form id is not existed on fms.",
221 },
222 {
223 ERR_APPEXECFWK_FORM_BIND_PROVIDER_FAILED, "fms bind provider failed.",
224 },
225 {
226 ERR_APPEXECFWK_FORM_MAX_SYSTEM_FORMS, "exceed max forms in system, current limit is 512.",
227 },
228 {
229 ERR_APPEXECFWK_FORM_EXCEED_INSTANCES_PER_FORM, "exceed max instances per form, limit is 32.",
230 },
231 {
232 ERR_APPEXECFWK_FORM_OPERATION_NOT_SELF,
233 "the form to be operated is not self-owned or has been deleted already.",
234 },
235 {
236 ERR_APPEXECFWK_FORM_PROVIDER_DEL_FAIL, "fms notify provider to delete failed.",
237 },
238 {
239 ERR_APPEXECFWK_FORM_MAX_FORMS_PER_CLIENT, "exceed max forms per client, limit is 256.",
240 },
241 {
242 ERR_APPEXECFWK_FORM_MAX_SYSTEM_TEMP_FORMS, "exceed max temp forms in system, limit is 256.",
243 },
244 {
245 ERR_APPEXECFWK_FORM_NO_SUCH_MODULE, "the module not exist in the bundle.",
246 },
247 {
248 ERR_APPEXECFWK_FORM_NO_SUCH_ABILITY, "the ability not exist in the module.",
249 },
250 {
251 ERR_APPEXECFWK_FORM_NO_SUCH_DIMENSION, "the dimension not exist in the form.",
252 },
253 {
254 ERR_APPEXECFWK_FORM_FA_NOT_INSTALLED, "the ability not installed,need install first.",
255 },
256 {
257 ERR_APPEXECFWK_FORM_MAX_REQUEST, "too many request,try again later.",
258 },
259 {
260 ERR_APPEXECFWK_FORM_MAX_REFRESH, "already refresh 50 times.",
261 },
262 {
263 ERR_APPEXECFWK_FORM_GET_BMS_FAILED, "get bms rpc failed.",
264 },
265 {
266 ERR_APPEXECFWK_FORM_GET_FMS_FAILED, "get fms rpc failed.",
267 },
268 {
269 ERR_APPEXECFWK_FORM_SEND_FMS_MSG, "send request to fms failed.",
270 },
271 {
272 ERR_APPEXECFWK_FORM_FORM_DUPLICATE_ADDED, "form do not support acquire same id twice.",
273 },
274 {
275 ERR_APPEXECFWK_FORM_IN_RECOVER, "form is in recover status, can't do action on form.",
276 },
277 {
278 ERR_APPEXECFWK_FORM_GET_SYSMGR_FAILED, "get system manager failed.",
279 },
280 {
281 ERR_APPEXECFWK_PARCEL_ERROR, "read parcelable info failed.",
282 },
283 {
284 ERR_APPEXECFWK_FORM_CONNECT_FORM_RENDER_FAILED, "Connect FormRenderService failed.",
285 },
286 {
287 ERR_APPEXECFWK_FORM_RENDER_SERVICE_DIED, "FormRenderService is dead.",
288 },
289 };
290 }
291 } // namespace AppExecFwk
292 } // namespace OHOS
293