// // Copyright (C) 2012 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include "update_engine/common/error_code_utils.h" #include <base/strings/string_number_conversions.h> using std::string; namespace chromeos_update_engine { namespace utils { string ErrorCodeToString(ErrorCode code) { // If the given code has both parts (i.e. the error code part and the flags // part) then strip off the flags part since the switch statement below // has case statements only for the base error code or a single flag but // doesn't support any combinations of those. if ((static_cast<int>(code) & static_cast<int>(ErrorCode::kSpecialFlags)) && (static_cast<int>(code) & ~static_cast<int>(ErrorCode::kSpecialFlags))) code = static_cast<ErrorCode>(static_cast<int>(code) & ~static_cast<int>(ErrorCode::kSpecialFlags)); switch (code) { case ErrorCode::kSuccess: return "ErrorCode::kSuccess"; case ErrorCode::kError: return "ErrorCode::kError"; case ErrorCode::kOmahaRequestError: return "ErrorCode::kOmahaRequestError"; case ErrorCode::kOmahaResponseHandlerError: return "ErrorCode::kOmahaResponseHandlerError"; case ErrorCode::kFilesystemCopierError: return "ErrorCode::kFilesystemCopierError"; case ErrorCode::kPostinstallRunnerError: return "ErrorCode::kPostinstallRunnerError"; case ErrorCode::kPayloadMismatchedType: return "ErrorCode::kPayloadMismatchedType"; case ErrorCode::kInstallDeviceOpenError: return "ErrorCode::kInstallDeviceOpenError"; case ErrorCode::kKernelDeviceOpenError: return "ErrorCode::kKernelDeviceOpenError"; case ErrorCode::kDownloadTransferError: return "ErrorCode::kDownloadTransferError"; case ErrorCode::kPayloadHashMismatchError: return "ErrorCode::kPayloadHashMismatchError"; case ErrorCode::kPayloadSizeMismatchError: return "ErrorCode::kPayloadSizeMismatchError"; case ErrorCode::kDownloadPayloadVerificationError: return "ErrorCode::kDownloadPayloadVerificationError"; case ErrorCode::kDownloadNewPartitionInfoError: return "ErrorCode::kDownloadNewPartitionInfoError"; case ErrorCode::kDownloadWriteError: return "ErrorCode::kDownloadWriteError"; case ErrorCode::kNewRootfsVerificationError: return "ErrorCode::kNewRootfsVerificationError"; case ErrorCode::kNewKernelVerificationError: return "ErrorCode::kNewKernelVerificationError"; case ErrorCode::kSignedDeltaPayloadExpectedError: return "ErrorCode::kSignedDeltaPayloadExpectedError"; case ErrorCode::kDownloadPayloadPubKeyVerificationError: return "ErrorCode::kDownloadPayloadPubKeyVerificationError"; case ErrorCode::kPostinstallBootedFromFirmwareB: return "ErrorCode::kPostinstallBootedFromFirmwareB"; case ErrorCode::kDownloadStateInitializationError: return "ErrorCode::kDownloadStateInitializationError"; case ErrorCode::kDownloadInvalidMetadataMagicString: return "ErrorCode::kDownloadInvalidMetadataMagicString"; case ErrorCode::kDownloadSignatureMissingInManifest: return "ErrorCode::kDownloadSignatureMissingInManifest"; case ErrorCode::kDownloadManifestParseError: return "ErrorCode::kDownloadManifestParseError"; case ErrorCode::kDownloadMetadataSignatureError: return "ErrorCode::kDownloadMetadataSignatureError"; case ErrorCode::kDownloadMetadataSignatureVerificationError: return "ErrorCode::kDownloadMetadataSignatureVerificationError"; case ErrorCode::kDownloadMetadataSignatureMismatch: return "ErrorCode::kDownloadMetadataSignatureMismatch"; case ErrorCode::kDownloadOperationHashVerificationError: return "ErrorCode::kDownloadOperationHashVerificationError"; case ErrorCode::kDownloadOperationExecutionError: return "ErrorCode::kDownloadOperationExecutionError"; case ErrorCode::kDownloadOperationHashMismatch: return "ErrorCode::kDownloadOperationHashMismatch"; case ErrorCode::kOmahaRequestEmptyResponseError: return "ErrorCode::kOmahaRequestEmptyResponseError"; case ErrorCode::kOmahaRequestXMLParseError: return "ErrorCode::kOmahaRequestXMLParseError"; case ErrorCode::kDownloadInvalidMetadataSize: return "ErrorCode::kDownloadInvalidMetadataSize"; case ErrorCode::kDownloadInvalidMetadataSignature: return "ErrorCode::kDownloadInvalidMetadataSignature"; case ErrorCode::kOmahaResponseInvalid: return "ErrorCode::kOmahaResponseInvalid"; case ErrorCode::kOmahaUpdateIgnoredPerPolicy: return "ErrorCode::kOmahaUpdateIgnoredPerPolicy"; case ErrorCode::kOmahaUpdateDeferredPerPolicy: return "ErrorCode::kOmahaUpdateDeferredPerPolicy"; case ErrorCode::kOmahaErrorInHTTPResponse: return "ErrorCode::kOmahaErrorInHTTPResponse"; case ErrorCode::kDownloadOperationHashMissingError: return "ErrorCode::kDownloadOperationHashMissingError"; case ErrorCode::kDownloadMetadataSignatureMissingError: return "ErrorCode::kDownloadMetadataSignatureMissingError"; case ErrorCode::kOmahaUpdateDeferredForBackoff: return "ErrorCode::kOmahaUpdateDeferredForBackoff"; case ErrorCode::kPostinstallPowerwashError: return "ErrorCode::kPostinstallPowerwashError"; case ErrorCode::kUpdateCanceledByChannelChange: return "ErrorCode::kUpdateCanceledByChannelChange"; case ErrorCode::kUmaReportedMax: return "ErrorCode::kUmaReportedMax"; case ErrorCode::kOmahaRequestHTTPResponseBase: return "ErrorCode::kOmahaRequestHTTPResponseBase"; case ErrorCode::kResumedFlag: return "Resumed"; case ErrorCode::kDevModeFlag: return "DevMode"; case ErrorCode::kTestImageFlag: return "TestImage"; case ErrorCode::kTestOmahaUrlFlag: return "TestOmahaUrl"; case ErrorCode::kSpecialFlags: return "ErrorCode::kSpecialFlags"; case ErrorCode::kPostinstallFirmwareRONotUpdatable: return "ErrorCode::kPostinstallFirmwareRONotUpdatable"; case ErrorCode::kUnsupportedMajorPayloadVersion: return "ErrorCode::kUnsupportedMajorPayloadVersion"; case ErrorCode::kUnsupportedMinorPayloadVersion: return "ErrorCode::kUnsupportedMinorPayloadVersion"; case ErrorCode::kOmahaRequestXMLHasEntityDecl: return "ErrorCode::kOmahaRequestXMLHasEntityDecl"; case ErrorCode::kFilesystemVerifierError: return "ErrorCode::kFilesystemVerifierError"; case ErrorCode::kUserCanceled: return "ErrorCode::kUserCanceled"; case ErrorCode::kNonCriticalUpdateInOOBE: return "ErrorCode::kNonCriticalUpdateInOOBE"; case ErrorCode::kOmahaUpdateIgnoredOverCellular: return "ErrorCode::kOmahaUpdateIgnoredOverCellular"; case ErrorCode::kPayloadTimestampError: return "ErrorCode::kPayloadTimestampError"; case ErrorCode::kUpdatedButNotActive: return "ErrorCode::kUpdatedButNotActive"; case ErrorCode::kNoUpdate: return "ErrorCode::kNoUpdate"; case ErrorCode::kRollbackNotPossible: return "ErrorCode::kRollbackNotPossible"; case ErrorCode::kFirstActiveOmahaPingSentPersistenceError: return "ErrorCode::kFirstActiveOmahaPingSentPersistenceError"; case ErrorCode::kVerityCalculationError: return "ErrorCode::kVerityCalculationError"; // Don't add a default case to let the compiler warn about newly added // error codes which should be added here. } return "Unknown error: " + base::UintToString(static_cast<unsigned>(code)); } } // namespace utils } // namespace chromeos_update_engine