1 /*
2 * Copyright (c) 2022-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 "quick_fix_error_utils.h"
17
18 #include <map>
19
20 namespace OHOS {
21 namespace AAFwk {
22 namespace {
23 const std::map<int32_t, int32_t> INTERNAL_ERR_CODE_MAP = {
24 { QUICK_FIX_OK, ERR_OK },
25 { QUICK_FIX_WRITE_PARCEL_FAILED, ERR_QUICKFIX_INTERNAL_ERROR },
26 { QUICK_FIX_READ_PARCEL_FAILED, ERR_QUICKFIX_INTERNAL_ERROR },
27 { QUICK_FIX_SEND_REQUEST_FAILED, ERR_QUICKFIX_INTERNAL_ERROR },
28 { QUICK_FIX_COPY_FILES_FAILED, ERR_QUICKFIX_HQF_INVALID },
29 { QUICK_FIX_INVALID_PARAM, ERR_QUICKFIX_PARAM_INVALID },
30 { QUICK_FIX_CONNECT_FAILED, ERR_QUICKFIX_INTERNAL_ERROR },
31 { QUICK_FIX_VERIFY_PERMISSION_FAILED, ERR_QUICKFIX_PERMISSION_DENIED },
32 { QUICK_FIX_NOT_SYSTEM_APP, ERR_QUICKFIX_NOT_SYSTEM_APP },
33 { QUICK_FIX_GET_BUNDLE_INFO_FAILED, ERR_QUICKFIX_BUNDLE_NAME_INVALID },
34 { QUICK_FIX_DEPLOY_FAILED, ERR_QUICKFIX_HQF_DEPLOY_FAILED },
35 { QUICK_FIX_SWICH_FAILED, ERR_QUICKFIX_HQF_SWITCH_FAILED },
36 { QUICK_FIX_DELETE_FAILED, ERR_QUICKFIX_HQF_DELETE_FAILED },
37 { QUICK_FIX_NOTIFY_LOAD_PATCH_FAILED, ERR_QUICKFIX_LOAD_PATCH_FAILED },
38 { QUICK_FIX_NOTIFY_RELOAD_PAGE_FAILED, ERR_QUICKFIX_INTERNAL_ERROR },
39 { QUICK_FIX_REGISTER_OBSERVER_FAILED, ERR_QUICKFIX_INTERNAL_ERROR },
40 { QUICK_FIX_APPMGR_INVALID, ERR_QUICKFIX_INTERNAL_ERROR },
41 { QUICK_FIX_BUNDLEMGR_INVALID, ERR_QUICKFIX_INTERNAL_ERROR },
42 { QUICK_FIX_SET_INFO_FAILED, ERR_QUICKFIX_INTERNAL_ERROR },
43 { QUICK_FIX_PROCESS_TIMEOUT, ERR_QUICKFIX_INTERNAL_ERROR },
44 { QUICK_FIX_NOTIFY_UNLOAD_PATCH_FAILED, ERR_QUICKFIX_UNLOAD_PATCH_FAILED },
45 { QUICK_FIX_DEPLOYING_TASK, ERR_QUICKFIX_DEPLOYING_TASK },
46 };
47
48 const std::map<int32_t, std::string> INTERNAL_ERR_MSG_MAP = {
49 { QUICK_FIX_WRITE_PARCEL_FAILED, "Write parcel failed." },
50 { QUICK_FIX_READ_PARCEL_FAILED, "Read parcel failed." },
51 { QUICK_FIX_SEND_REQUEST_FAILED, "Send request failed." },
52 { QUICK_FIX_CONNECT_FAILED, "Connect failed." },
53 { QUICK_FIX_NOTIFY_RELOAD_PAGE_FAILED, "Reload page failed." },
54 { QUICK_FIX_REGISTER_OBSERVER_FAILED, "Register observer failed." },
55 { QUICK_FIX_APPMGR_INVALID, "AppMgr invalid." },
56 { QUICK_FIX_BUNDLEMGR_INVALID, "BundleMgr invalid." },
57 { QUICK_FIX_SET_INFO_FAILED, "Set quickfix info failed." },
58 { QUICK_FIX_PROCESS_TIMEOUT, "Process timeout." },
59 };
60
61 const std::map<int32_t, std::string> EXTERNAL_ERR_MSG_MAP = {
62 { ERR_OK, "Success." },
63 { ERR_QUICKFIX_PERMISSION_DENIED, "The application does not have permission to call the interface." },
64 { ERR_QUICKFIX_NOT_SYSTEM_APP, "The application is not system-app, can not use system-api." },
65 { ERR_QUICKFIX_PARAM_INVALID, "Invalid input parameter." },
66 { ERR_QUICKFIX_BUNDLE_NAME_INVALID, "The specified bundleName is invalid." },
67 { ERR_QUICKFIX_HQF_INVALID, "The specified hqf is invalid. Hqf may not exist or inaccessible." },
68 { ERR_QUICKFIX_HQF_DEPLOY_FAILED, "Deploy hqf failed." },
69 { ERR_QUICKFIX_HQF_SWITCH_FAILED, "Switch hqf failed." },
70 { ERR_QUICKFIX_HQF_DELETE_FAILED, "Delete hqf failed." },
71 { ERR_QUICKFIX_LOAD_PATCH_FAILED, "Load patch failed." },
72 { ERR_QUICKFIX_UNLOAD_PATCH_FAILED, "Unload patch failed." },
73 { ERR_QUICKFIX_INTERNAL_ERROR, "Internal error." },
74 { ERR_QUICKFIX_DEPLOYING_TASK, "The application has a apply quick fix task that is being processed." },
75 };
76 } // namespace
77
GetErrorCode(int32_t errCode)78 int32_t QuickFixErrorUtil::GetErrorCode(int32_t errCode)
79 {
80 // no need to convert is errCode is external error code.
81 auto iter = EXTERNAL_ERR_MSG_MAP.find(errCode);
82 if (iter != EXTERNAL_ERR_MSG_MAP.end()) {
83 return errCode;
84 }
85
86 auto iterInternal = INTERNAL_ERR_CODE_MAP.find(errCode);
87 if (iterInternal != INTERNAL_ERR_CODE_MAP.end()) {
88 return iterInternal->second;
89 }
90
91 return ERR_QUICKFIX_INTERNAL_ERROR;
92 }
93
GetErrorMessage(int32_t errCode)94 std::string QuickFixErrorUtil::GetErrorMessage(int32_t errCode)
95 {
96 std::string errMsg;
97 auto externalErrCode = GetErrorCode(errCode);
98 auto iter = EXTERNAL_ERR_MSG_MAP.find(externalErrCode);
99 if (iter != EXTERNAL_ERR_MSG_MAP.end()) {
100 errMsg = iter->second;
101 } else {
102 errMsg = EXTERNAL_ERR_MSG_MAP.at(ERR_QUICKFIX_INTERNAL_ERROR);
103 }
104
105 auto iterInternal = INTERNAL_ERR_MSG_MAP.find(errCode);
106 if (iterInternal != INTERNAL_ERR_MSG_MAP.end()) {
107 errMsg += " " + iterInternal->second;
108 }
109
110 return errMsg;
111 }
112 } // namespace AAFwk
113 } // namespace OHOS