1*5a923131SAndroid Build Coastguard Worker // 2*5a923131SAndroid Build Coastguard Worker // Copyright (C) 2013 The Android Open Source Project 3*5a923131SAndroid Build Coastguard Worker // 4*5a923131SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 5*5a923131SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 6*5a923131SAndroid Build Coastguard Worker // You may obtain a copy of the License at 7*5a923131SAndroid Build Coastguard Worker // 8*5a923131SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 9*5a923131SAndroid Build Coastguard Worker // 10*5a923131SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 11*5a923131SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 12*5a923131SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*5a923131SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 14*5a923131SAndroid Build Coastguard Worker // limitations under the License. 15*5a923131SAndroid Build Coastguard Worker // 16*5a923131SAndroid Build Coastguard Worker 17*5a923131SAndroid Build Coastguard Worker #ifndef UPDATE_ENGINE_COMMON_ERROR_CODE_H_ 18*5a923131SAndroid Build Coastguard Worker #define UPDATE_ENGINE_COMMON_ERROR_CODE_H_ 19*5a923131SAndroid Build Coastguard Worker 20*5a923131SAndroid Build Coastguard Worker #include <ostream> // NOLINT(readability/streams) 21*5a923131SAndroid Build Coastguard Worker 22*5a923131SAndroid Build Coastguard Worker namespace chromeos_update_engine { 23*5a923131SAndroid Build Coastguard Worker 24*5a923131SAndroid Build Coastguard Worker // Action exit codes. 25*5a923131SAndroid Build Coastguard Worker enum class ErrorCode : int { 26*5a923131SAndroid Build Coastguard Worker kSuccess = 0, 27*5a923131SAndroid Build Coastguard Worker kError = 1, 28*5a923131SAndroid Build Coastguard Worker kOmahaRequestError = 2, 29*5a923131SAndroid Build Coastguard Worker kOmahaResponseHandlerError = 3, 30*5a923131SAndroid Build Coastguard Worker kFilesystemCopierError = 4, 31*5a923131SAndroid Build Coastguard Worker kPostinstallRunnerError = 5, 32*5a923131SAndroid Build Coastguard Worker kPayloadMismatchedType = 6, 33*5a923131SAndroid Build Coastguard Worker kInstallDeviceOpenError = 7, 34*5a923131SAndroid Build Coastguard Worker kKernelDeviceOpenError = 8, 35*5a923131SAndroid Build Coastguard Worker kDownloadTransferError = 9, 36*5a923131SAndroid Build Coastguard Worker kPayloadHashMismatchError = 10, 37*5a923131SAndroid Build Coastguard Worker kPayloadSizeMismatchError = 11, 38*5a923131SAndroid Build Coastguard Worker kDownloadPayloadVerificationError = 12, 39*5a923131SAndroid Build Coastguard Worker kDownloadNewPartitionInfoError = 13, 40*5a923131SAndroid Build Coastguard Worker kDownloadWriteError = 14, 41*5a923131SAndroid Build Coastguard Worker kNewRootfsVerificationError = 15, 42*5a923131SAndroid Build Coastguard Worker kNewKernelVerificationError = 16, 43*5a923131SAndroid Build Coastguard Worker kSignedDeltaPayloadExpectedError = 17, 44*5a923131SAndroid Build Coastguard Worker kDownloadPayloadPubKeyVerificationError = 18, 45*5a923131SAndroid Build Coastguard Worker kPostinstallBootedFromFirmwareB = 19, 46*5a923131SAndroid Build Coastguard Worker kDownloadStateInitializationError = 20, 47*5a923131SAndroid Build Coastguard Worker kDownloadInvalidMetadataMagicString = 21, 48*5a923131SAndroid Build Coastguard Worker kDownloadSignatureMissingInManifest = 22, 49*5a923131SAndroid Build Coastguard Worker kDownloadManifestParseError = 23, 50*5a923131SAndroid Build Coastguard Worker kDownloadMetadataSignatureError = 24, 51*5a923131SAndroid Build Coastguard Worker kDownloadMetadataSignatureVerificationError = 25, 52*5a923131SAndroid Build Coastguard Worker kDownloadMetadataSignatureMismatch = 26, 53*5a923131SAndroid Build Coastguard Worker kDownloadOperationHashVerificationError = 27, 54*5a923131SAndroid Build Coastguard Worker kDownloadOperationExecutionError = 28, 55*5a923131SAndroid Build Coastguard Worker kDownloadOperationHashMismatch = 29, 56*5a923131SAndroid Build Coastguard Worker kOmahaRequestEmptyResponseError = 30, 57*5a923131SAndroid Build Coastguard Worker kOmahaRequestXMLParseError = 31, 58*5a923131SAndroid Build Coastguard Worker kDownloadInvalidMetadataSize = 32, 59*5a923131SAndroid Build Coastguard Worker kDownloadInvalidMetadataSignature = 33, 60*5a923131SAndroid Build Coastguard Worker kOmahaResponseInvalid = 34, 61*5a923131SAndroid Build Coastguard Worker kOmahaUpdateIgnoredPerPolicy = 35, 62*5a923131SAndroid Build Coastguard Worker kOmahaUpdateDeferredPerPolicy = 36, 63*5a923131SAndroid Build Coastguard Worker kOmahaErrorInHTTPResponse = 37, 64*5a923131SAndroid Build Coastguard Worker kDownloadOperationHashMissingError = 38, 65*5a923131SAndroid Build Coastguard Worker kDownloadMetadataSignatureMissingError = 39, 66*5a923131SAndroid Build Coastguard Worker kOmahaUpdateDeferredForBackoff = 40, 67*5a923131SAndroid Build Coastguard Worker kPostinstallPowerwashError = 41, 68*5a923131SAndroid Build Coastguard Worker kUpdateCanceledByChannelChange = 42, 69*5a923131SAndroid Build Coastguard Worker kPostinstallFirmwareRONotUpdatable = 43, 70*5a923131SAndroid Build Coastguard Worker kUnsupportedMajorPayloadVersion = 44, 71*5a923131SAndroid Build Coastguard Worker kUnsupportedMinorPayloadVersion = 45, 72*5a923131SAndroid Build Coastguard Worker kOmahaRequestXMLHasEntityDecl = 46, 73*5a923131SAndroid Build Coastguard Worker kFilesystemVerifierError = 47, 74*5a923131SAndroid Build Coastguard Worker kUserCanceled = 48, 75*5a923131SAndroid Build Coastguard Worker kNonCriticalUpdateInOOBE = 49, 76*5a923131SAndroid Build Coastguard Worker kOmahaUpdateIgnoredOverCellular = 50, 77*5a923131SAndroid Build Coastguard Worker kPayloadTimestampError = 51, 78*5a923131SAndroid Build Coastguard Worker kUpdatedButNotActive = 52, 79*5a923131SAndroid Build Coastguard Worker kNoUpdate = 53, 80*5a923131SAndroid Build Coastguard Worker kRollbackNotPossible = 54, 81*5a923131SAndroid Build Coastguard Worker kFirstActiveOmahaPingSentPersistenceError = 55, 82*5a923131SAndroid Build Coastguard Worker kVerityCalculationError = 56, 83*5a923131SAndroid Build Coastguard Worker kInternalLibCurlError = 57, 84*5a923131SAndroid Build Coastguard Worker kUnresolvedHostError = 58, 85*5a923131SAndroid Build Coastguard Worker kUnresolvedHostRecovered = 59, 86*5a923131SAndroid Build Coastguard Worker kNotEnoughSpace = 60, 87*5a923131SAndroid Build Coastguard Worker kDeviceCorrupted = 61, 88*5a923131SAndroid Build Coastguard Worker kPackageExcludedFromUpdate = 62, 89*5a923131SAndroid Build Coastguard Worker kPostInstallMountError = 63, 90*5a923131SAndroid Build Coastguard Worker kOverlayfsenabledError = 64, 91*5a923131SAndroid Build Coastguard Worker kUpdateProcessing = 65, 92*5a923131SAndroid Build Coastguard Worker kUpdateAlreadyInstalled = 66, 93*5a923131SAndroid Build Coastguard Worker 94*5a923131SAndroid Build Coastguard Worker // VERY IMPORTANT! When adding new error codes: 95*5a923131SAndroid Build Coastguard Worker // 96*5a923131SAndroid Build Coastguard Worker // 1) Update tools/metrics/histograms/enums.xml in Chrome. 97*5a923131SAndroid Build Coastguard Worker // 98*5a923131SAndroid Build Coastguard Worker // 2) Update the assorted switch statements in update_engine which won't 99*5a923131SAndroid Build Coastguard Worker // build until this case is added. 100*5a923131SAndroid Build Coastguard Worker 101*5a923131SAndroid Build Coastguard Worker // Any code above this is sent to both Omaha and UMA as-is, except 102*5a923131SAndroid Build Coastguard Worker // kOmahaErrorInHTTPResponse (see error code 2000 for more details). 103*5a923131SAndroid Build Coastguard Worker // Codes/flags below this line is sent only to Omaha and not to UMA. 104*5a923131SAndroid Build Coastguard Worker 105*5a923131SAndroid Build Coastguard Worker // kUmaReportedMax is not an error code per se, it's just the count 106*5a923131SAndroid Build Coastguard Worker // of the number of enums above. Add any new errors above this line if you 107*5a923131SAndroid Build Coastguard Worker // want them to show up on UMA. Stuff below this line will not be sent to UMA 108*5a923131SAndroid Build Coastguard Worker // but is used for other errors that are sent to Omaha. We don't assign any 109*5a923131SAndroid Build Coastguard Worker // particular value for this enum so that it's just one more than the last 110*5a923131SAndroid Build Coastguard Worker // one above and thus always represents the correct count of UMA metrics 111*5a923131SAndroid Build Coastguard Worker // buckets, even when new enums are added above this line in future. See 112*5a923131SAndroid Build Coastguard Worker // metrics::ReportUpdateAttemptMetrics() on how this enum is used. 113*5a923131SAndroid Build Coastguard Worker kUmaReportedMax, 114*5a923131SAndroid Build Coastguard Worker 115*5a923131SAndroid Build Coastguard Worker // use the 2xxx range to encode HTTP errors. These errors are available in 116*5a923131SAndroid Build Coastguard Worker // Dremel with the individual granularity. But for UMA purposes, all these 117*5a923131SAndroid Build Coastguard Worker // errors are aggregated into one: kOmahaErrorInHTTPResponse. 118*5a923131SAndroid Build Coastguard Worker kOmahaRequestHTTPResponseBase = 2000, // + HTTP response code 119*5a923131SAndroid Build Coastguard Worker 120*5a923131SAndroid Build Coastguard Worker // TODO(jaysri): Move out all the bit masks into separate constants 121*5a923131SAndroid Build Coastguard Worker // outside the enum as part of fixing bug 34369. 122*5a923131SAndroid Build Coastguard Worker // Bit flags. Remember to update the mask below for new bits. 123*5a923131SAndroid Build Coastguard Worker 124*5a923131SAndroid Build Coastguard Worker // Set if boot mode not normal. 125*5a923131SAndroid Build Coastguard Worker // TODO(garnold) This is very debatable value to use, knowing that the 126*5a923131SAndroid Build Coastguard Worker // underlying type is a signed int (often, 32-bit). However, at this point 127*5a923131SAndroid Build Coastguard Worker // there are parts of the ecosystem that expect this to be a negative value, 128*5a923131SAndroid Build Coastguard Worker // so we preserve this semantics. This should be reconsidered if/when we 129*5a923131SAndroid Build Coastguard Worker // modify the implementation of ErrorCode into a properly encapsulated class. 130*5a923131SAndroid Build Coastguard Worker kDevModeFlag = 1 << 31, 131*5a923131SAndroid Build Coastguard Worker 132*5a923131SAndroid Build Coastguard Worker // Set if resuming an interrupted update. 133*5a923131SAndroid Build Coastguard Worker kResumedFlag = 1 << 30, 134*5a923131SAndroid Build Coastguard Worker 135*5a923131SAndroid Build Coastguard Worker // Set if using a dev/test image as opposed to an MP-signed image. 136*5a923131SAndroid Build Coastguard Worker kTestImageFlag = 1 << 29, 137*5a923131SAndroid Build Coastguard Worker 138*5a923131SAndroid Build Coastguard Worker // Set if using devserver or Omaha sandbox (using crosh autest). 139*5a923131SAndroid Build Coastguard Worker kTestOmahaUrlFlag = 1 << 28, 140*5a923131SAndroid Build Coastguard Worker 141*5a923131SAndroid Build Coastguard Worker // Mask that indicates bit positions that are used to indicate special flags 142*5a923131SAndroid Build Coastguard Worker // that are embedded in the error code to provide additional context about 143*5a923131SAndroid Build Coastguard Worker // the system in which the error was encountered. 144*5a923131SAndroid Build Coastguard Worker kSpecialFlags = 145*5a923131SAndroid Build Coastguard Worker (kDevModeFlag | kResumedFlag | kTestImageFlag | kTestOmahaUrlFlag) 146*5a923131SAndroid Build Coastguard Worker }; 147*5a923131SAndroid Build Coastguard Worker 148*5a923131SAndroid Build Coastguard Worker inline std::ostream& operator<<(std::ostream& os, ErrorCode val) { 149*5a923131SAndroid Build Coastguard Worker return os << static_cast<int>(val); 150*5a923131SAndroid Build Coastguard Worker } 151*5a923131SAndroid Build Coastguard Worker 152*5a923131SAndroid Build Coastguard Worker } // namespace chromeos_update_engine 153*5a923131SAndroid Build Coastguard Worker 154*5a923131SAndroid Build Coastguard Worker #endif // UPDATE_ENGINE_COMMON_ERROR_CODE_H_ 155