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