blob: dc2d7cb0239fc5b47ba208bc09cb571815e6063c [file] [log] [blame]
Alex Deymoe88e9fe2016-02-03 16:38:00 -08001//
2// Copyright (C) 2012 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17#include "update_engine/common/error_code_utils.h"
18
Alex Deymoe88e9fe2016-02-03 16:38:00 -080019using std::string;
20
21namespace chromeos_update_engine {
22namespace utils {
23
24string ErrorCodeToString(ErrorCode code) {
25 // If the given code has both parts (i.e. the error code part and the flags
26 // part) then strip off the flags part since the switch statement below
27 // has case statements only for the base error code or a single flag but
28 // doesn't support any combinations of those.
29 if ((static_cast<int>(code) & static_cast<int>(ErrorCode::kSpecialFlags)) &&
30 (static_cast<int>(code) & ~static_cast<int>(ErrorCode::kSpecialFlags)))
Amin Hassanib2689592019-01-13 17:04:28 -080031 code = static_cast<ErrorCode>(static_cast<int>(code) &
32 ~static_cast<int>(ErrorCode::kSpecialFlags));
Alex Deymoe88e9fe2016-02-03 16:38:00 -080033 switch (code) {
Amin Hassanib2689592019-01-13 17:04:28 -080034 case ErrorCode::kSuccess:
35 return "ErrorCode::kSuccess";
36 case ErrorCode::kError:
37 return "ErrorCode::kError";
38 case ErrorCode::kOmahaRequestError:
39 return "ErrorCode::kOmahaRequestError";
Alex Deymoe88e9fe2016-02-03 16:38:00 -080040 case ErrorCode::kOmahaResponseHandlerError:
41 return "ErrorCode::kOmahaResponseHandlerError";
42 case ErrorCode::kFilesystemCopierError:
43 return "ErrorCode::kFilesystemCopierError";
44 case ErrorCode::kPostinstallRunnerError:
45 return "ErrorCode::kPostinstallRunnerError";
46 case ErrorCode::kPayloadMismatchedType:
47 return "ErrorCode::kPayloadMismatchedType";
48 case ErrorCode::kInstallDeviceOpenError:
49 return "ErrorCode::kInstallDeviceOpenError";
50 case ErrorCode::kKernelDeviceOpenError:
51 return "ErrorCode::kKernelDeviceOpenError";
52 case ErrorCode::kDownloadTransferError:
53 return "ErrorCode::kDownloadTransferError";
54 case ErrorCode::kPayloadHashMismatchError:
55 return "ErrorCode::kPayloadHashMismatchError";
56 case ErrorCode::kPayloadSizeMismatchError:
57 return "ErrorCode::kPayloadSizeMismatchError";
58 case ErrorCode::kDownloadPayloadVerificationError:
59 return "ErrorCode::kDownloadPayloadVerificationError";
60 case ErrorCode::kDownloadNewPartitionInfoError:
61 return "ErrorCode::kDownloadNewPartitionInfoError";
62 case ErrorCode::kDownloadWriteError:
63 return "ErrorCode::kDownloadWriteError";
64 case ErrorCode::kNewRootfsVerificationError:
65 return "ErrorCode::kNewRootfsVerificationError";
66 case ErrorCode::kNewKernelVerificationError:
67 return "ErrorCode::kNewKernelVerificationError";
68 case ErrorCode::kSignedDeltaPayloadExpectedError:
69 return "ErrorCode::kSignedDeltaPayloadExpectedError";
70 case ErrorCode::kDownloadPayloadPubKeyVerificationError:
71 return "ErrorCode::kDownloadPayloadPubKeyVerificationError";
72 case ErrorCode::kPostinstallBootedFromFirmwareB:
73 return "ErrorCode::kPostinstallBootedFromFirmwareB";
74 case ErrorCode::kDownloadStateInitializationError:
75 return "ErrorCode::kDownloadStateInitializationError";
76 case ErrorCode::kDownloadInvalidMetadataMagicString:
77 return "ErrorCode::kDownloadInvalidMetadataMagicString";
78 case ErrorCode::kDownloadSignatureMissingInManifest:
79 return "ErrorCode::kDownloadSignatureMissingInManifest";
80 case ErrorCode::kDownloadManifestParseError:
81 return "ErrorCode::kDownloadManifestParseError";
82 case ErrorCode::kDownloadMetadataSignatureError:
83 return "ErrorCode::kDownloadMetadataSignatureError";
84 case ErrorCode::kDownloadMetadataSignatureVerificationError:
85 return "ErrorCode::kDownloadMetadataSignatureVerificationError";
86 case ErrorCode::kDownloadMetadataSignatureMismatch:
87 return "ErrorCode::kDownloadMetadataSignatureMismatch";
88 case ErrorCode::kDownloadOperationHashVerificationError:
89 return "ErrorCode::kDownloadOperationHashVerificationError";
90 case ErrorCode::kDownloadOperationExecutionError:
91 return "ErrorCode::kDownloadOperationExecutionError";
92 case ErrorCode::kDownloadOperationHashMismatch:
93 return "ErrorCode::kDownloadOperationHashMismatch";
94 case ErrorCode::kOmahaRequestEmptyResponseError:
95 return "ErrorCode::kOmahaRequestEmptyResponseError";
96 case ErrorCode::kOmahaRequestXMLParseError:
97 return "ErrorCode::kOmahaRequestXMLParseError";
98 case ErrorCode::kDownloadInvalidMetadataSize:
99 return "ErrorCode::kDownloadInvalidMetadataSize";
100 case ErrorCode::kDownloadInvalidMetadataSignature:
101 return "ErrorCode::kDownloadInvalidMetadataSignature";
102 case ErrorCode::kOmahaResponseInvalid:
103 return "ErrorCode::kOmahaResponseInvalid";
104 case ErrorCode::kOmahaUpdateIgnoredPerPolicy:
105 return "ErrorCode::kOmahaUpdateIgnoredPerPolicy";
106 case ErrorCode::kOmahaUpdateDeferredPerPolicy:
107 return "ErrorCode::kOmahaUpdateDeferredPerPolicy";
108 case ErrorCode::kOmahaErrorInHTTPResponse:
109 return "ErrorCode::kOmahaErrorInHTTPResponse";
110 case ErrorCode::kDownloadOperationHashMissingError:
111 return "ErrorCode::kDownloadOperationHashMissingError";
112 case ErrorCode::kDownloadMetadataSignatureMissingError:
113 return "ErrorCode::kDownloadMetadataSignatureMissingError";
114 case ErrorCode::kOmahaUpdateDeferredForBackoff:
115 return "ErrorCode::kOmahaUpdateDeferredForBackoff";
116 case ErrorCode::kPostinstallPowerwashError:
117 return "ErrorCode::kPostinstallPowerwashError";
118 case ErrorCode::kUpdateCanceledByChannelChange:
119 return "ErrorCode::kUpdateCanceledByChannelChange";
120 case ErrorCode::kUmaReportedMax:
121 return "ErrorCode::kUmaReportedMax";
122 case ErrorCode::kOmahaRequestHTTPResponseBase:
123 return "ErrorCode::kOmahaRequestHTTPResponseBase";
124 case ErrorCode::kResumedFlag:
125 return "Resumed";
126 case ErrorCode::kDevModeFlag:
127 return "DevMode";
128 case ErrorCode::kTestImageFlag:
129 return "TestImage";
130 case ErrorCode::kTestOmahaUrlFlag:
131 return "TestOmahaUrl";
132 case ErrorCode::kSpecialFlags:
133 return "ErrorCode::kSpecialFlags";
134 case ErrorCode::kPostinstallFirmwareRONotUpdatable:
135 return "ErrorCode::kPostinstallFirmwareRONotUpdatable";
136 case ErrorCode::kUnsupportedMajorPayloadVersion:
137 return "ErrorCode::kUnsupportedMajorPayloadVersion";
138 case ErrorCode::kUnsupportedMinorPayloadVersion:
139 return "ErrorCode::kUnsupportedMinorPayloadVersion";
140 case ErrorCode::kOmahaRequestXMLHasEntityDecl:
141 return "ErrorCode::kOmahaRequestXMLHasEntityDecl";
142 case ErrorCode::kFilesystemVerifierError:
143 return "ErrorCode::kFilesystemVerifierError";
144 case ErrorCode::kUserCanceled:
145 return "ErrorCode::kUserCanceled";
Kevin Cernekee2494e282016-03-29 18:03:53 -0700146 case ErrorCode::kNonCriticalUpdateInOOBE:
147 return "ErrorCode::kNonCriticalUpdateInOOBE";
Weidong Guo421ff332017-04-17 10:08:38 -0700148 case ErrorCode::kOmahaUpdateIgnoredOverCellular:
149 return "ErrorCode::kOmahaUpdateIgnoredOverCellular";
Sen Jiang8e768e92017-06-28 17:13:19 -0700150 case ErrorCode::kPayloadTimestampError:
151 return "ErrorCode::kPayloadTimestampError";
Sen Jiangfe522822017-10-31 15:14:11 -0700152 case ErrorCode::kUpdatedButNotActive:
153 return "ErrorCode::kUpdatedButNotActive";
Sen Jiang89e24c12018-03-22 18:05:44 -0700154 case ErrorCode::kNoUpdate:
155 return "ErrorCode::kNoUpdate";
Marton Hunyady199152d2018-05-07 19:08:48 +0200156 case ErrorCode::kRollbackNotPossible:
157 return "ErrorCode::kRollbackNotPossible";
Amin Hassani80f4d4c2018-05-16 13:34:00 -0700158 case ErrorCode::kFirstActiveOmahaPingSentPersistenceError:
159 return "ErrorCode::kFirstActiveOmahaPingSentPersistenceError";
Sen Jiang57f91802017-11-14 17:42:13 -0800160 case ErrorCode::kVerityCalculationError:
161 return "ErrorCode::kVerityCalculationError";
Amin Hassanid3d84212019-08-17 00:27:44 -0700162 case ErrorCode::kInternalLibCurlError:
163 return "ErrorCode::kInternalLibCurlError";
164 case ErrorCode::kUnresolvedHostError:
165 return "ErrorCode::kUnresolvedHostError";
166 case ErrorCode::kUnresolvedHostRecovered:
167 return "ErrorCode::kUnresolvedHostRecovered";
Yifan Hong46e37d42019-12-13 12:01:42 -0800168 case ErrorCode::kNotEnoughSpace:
169 return "ErrorCode::kNotEnoughSpace";
Yifan Hong77279902019-12-17 16:38:21 -0800170 case ErrorCode::kDeviceCorrupted:
171 return "ErrorCode::kDeviceCorrupted";
Jae Hoon Kim3e69b4c2020-06-16 09:23:39 -0700172 case ErrorCode::kPackageExcludedFromUpdate:
173 return "ErrorCode::kPackageExcludedFromUpdate";
Kelvin Zhang8b1e0dc2020-10-26 12:27:53 -0400174 case ErrorCode::kPostInstallMountError:
175 return "ErrorCode::kPostInstallMountError";
Daniel Zhengeede4c82023-06-13 11:21:06 -0700176 case ErrorCode::kOverlayfsenabledError:
177 return "ErrorCode::kOverlayfsenabledError";
Kelvin Zhangbe0a3492023-12-04 09:18:15 -0800178 case ErrorCode::kUpdateProcessing:
179 return "ErrorCode::kUpdateProcessing";
180 case ErrorCode::kUpdateAlreadyInstalled:
181 return "ErrorCode::kUpdateAlreadyInstalled";
Sen Jiangfe522822017-10-31 15:14:11 -0700182 // Don't add a default case to let the compiler warn about newly added
183 // error codes which should be added here.
Alex Deymoe88e9fe2016-02-03 16:38:00 -0800184 }
185
Kokoa Matsuda1f46f5b2024-10-18 16:00:05 +0900186 return "Unknown error: " + std::format("{}", static_cast<unsigned>(code));
Alex Deymoe88e9fe2016-02-03 16:38:00 -0800187}
188
189} // namespace utils
190} // namespace chromeos_update_engine