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