• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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