xref: /aosp_15_r20/system/update_engine/common/error_code_utils.cc (revision 5a9231315b4521097b8dc3750bc806fcafe0c72f)
1 //
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 
19 using std::string;
20 
21 namespace chromeos_update_engine {
22 namespace utils {
23 
ErrorCodeToString(ErrorCode code)24 string 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)))
31     code = static_cast<ErrorCode>(static_cast<int>(code) &
32                                   ~static_cast<int>(ErrorCode::kSpecialFlags));
33   switch (code) {
34     case ErrorCode::kSuccess:
35       return "ErrorCode::kSuccess";
36     case ErrorCode::kError:
37       return "ErrorCode::kError";
38     case ErrorCode::kOmahaRequestError:
39       return "ErrorCode::kOmahaRequestError";
40     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";
146     case ErrorCode::kNonCriticalUpdateInOOBE:
147       return "ErrorCode::kNonCriticalUpdateInOOBE";
148     case ErrorCode::kOmahaUpdateIgnoredOverCellular:
149       return "ErrorCode::kOmahaUpdateIgnoredOverCellular";
150     case ErrorCode::kPayloadTimestampError:
151       return "ErrorCode::kPayloadTimestampError";
152     case ErrorCode::kUpdatedButNotActive:
153       return "ErrorCode::kUpdatedButNotActive";
154     case ErrorCode::kNoUpdate:
155       return "ErrorCode::kNoUpdate";
156     case ErrorCode::kRollbackNotPossible:
157       return "ErrorCode::kRollbackNotPossible";
158     case ErrorCode::kFirstActiveOmahaPingSentPersistenceError:
159       return "ErrorCode::kFirstActiveOmahaPingSentPersistenceError";
160     case ErrorCode::kVerityCalculationError:
161       return "ErrorCode::kVerityCalculationError";
162     case ErrorCode::kInternalLibCurlError:
163       return "ErrorCode::kInternalLibCurlError";
164     case ErrorCode::kUnresolvedHostError:
165       return "ErrorCode::kUnresolvedHostError";
166     case ErrorCode::kUnresolvedHostRecovered:
167       return "ErrorCode::kUnresolvedHostRecovered";
168     case ErrorCode::kNotEnoughSpace:
169       return "ErrorCode::kNotEnoughSpace";
170     case ErrorCode::kDeviceCorrupted:
171       return "ErrorCode::kDeviceCorrupted";
172     case ErrorCode::kPackageExcludedFromUpdate:
173       return "ErrorCode::kPackageExcludedFromUpdate";
174     case ErrorCode::kPostInstallMountError:
175       return "ErrorCode::kPostInstallMountError";
176     case ErrorCode::kOverlayfsenabledError:
177       return "ErrorCode::kOverlayfsenabledError";
178     case ErrorCode::kUpdateProcessing:
179       return "ErrorCode::kUpdateProcessing";
180     case ErrorCode::kUpdateAlreadyInstalled:
181       return "ErrorCode::kUpdateAlreadyInstalled";
182       // Don't add a default case to let the compiler warn about newly added
183       // error codes which should be added here.
184   }
185 
186   return "Unknown error: " + std::format("{}", static_cast<unsigned>(code));
187 }
188 
189 }  // namespace utils
190 }  // namespace chromeos_update_engine
191