// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_ERROR_CODE_H__
#define CHROMEOS_PLATFORM_UPDATE_ENGINE_ERROR_CODE_H__

namespace chromeos_update_engine {

// Action exit codes.
enum ErrorCode {
  kErrorCodeSuccess = 0,
  kErrorCodeError = 1,
  kErrorCodeOmahaRequestError = 2,
  kErrorCodeOmahaResponseHandlerError = 3,
  kErrorCodeFilesystemCopierError = 4,
  kErrorCodePostinstallRunnerError = 5,
  kErrorCodePayloadMismatchedType = 6,
  kErrorCodeInstallDeviceOpenError = 7,
  kErrorCodeKernelDeviceOpenError = 8,
  kErrorCodeDownloadTransferError = 9,
  kErrorCodePayloadHashMismatchError = 10,
  kErrorCodePayloadSizeMismatchError = 11,
  kErrorCodeDownloadPayloadVerificationError = 12,
  kErrorCodeDownloadNewPartitionInfoError = 13,
  kErrorCodeDownloadWriteError = 14,
  kErrorCodeNewRootfsVerificationError = 15,
  kErrorCodeNewKernelVerificationError = 16,
  kErrorCodeSignedDeltaPayloadExpectedError = 17,
  kErrorCodeDownloadPayloadPubKeyVerificationError = 18,
  kErrorCodePostinstallBootedFromFirmwareB = 19,
  kErrorCodeDownloadStateInitializationError = 20,
  kErrorCodeDownloadInvalidMetadataMagicString = 21,
  kErrorCodeDownloadSignatureMissingInManifest = 22,
  kErrorCodeDownloadManifestParseError = 23,
  kErrorCodeDownloadMetadataSignatureError = 24,
  kErrorCodeDownloadMetadataSignatureVerificationError = 25,
  kErrorCodeDownloadMetadataSignatureMismatch = 26,
  kErrorCodeDownloadOperationHashVerificationError = 27,
  kErrorCodeDownloadOperationExecutionError = 28,
  kErrorCodeDownloadOperationHashMismatch = 29,
  kErrorCodeOmahaRequestEmptyResponseError = 30,
  kErrorCodeOmahaRequestXMLParseError = 31,
  kErrorCodeDownloadInvalidMetadataSize = 32,
  kErrorCodeDownloadInvalidMetadataSignature = 33,
  kErrorCodeOmahaResponseInvalid = 34,
  kErrorCodeOmahaUpdateIgnoredPerPolicy = 35,
  kErrorCodeOmahaUpdateDeferredPerPolicy = 36,
  kErrorCodeOmahaErrorInHTTPResponse = 37,
  kErrorCodeDownloadOperationHashMissingError = 38,
  kErrorCodeDownloadMetadataSignatureMissingError = 39,
  kErrorCodeOmahaUpdateDeferredForBackoff = 40,
  kErrorCodePostinstallPowerwashError = 41,
  kErrorCodeUpdateCanceledByChannelChange = 42,
  kErrorCodePostinstallFirmwareRONotUpdatable = 43,

  // Note: When adding new error codes, please remember to add the
  // error into one of the buckets in PayloadState::UpdateFailed method so
  // that the retries across URLs and the payload backoff mechanism work
  // correctly for those new error codes.

  // Any code above this is sent to both Omaha and UMA as-is, except
  // kErrorCodeOmahaErrorInHTTPResponse (see error code 2000 for more details).
  // Codes/flags below this line is sent only to Omaha and not to UMA.

  // kErrorCodeUmaReportedMax is not an error code per se, it's just the count
  // of the number of enums above.  Add any new errors above this line if you
  // want them to show up on UMA. Stuff below this line will not be sent to UMA
  // but is used for other errors that are sent to Omaha. We don't assign any
  // particular value for this enum so that it's just one more than the last
  // one above and thus always represents the correct count of UMA metrics
  // buckets, even when new enums are added above this line in future. See
  // utils::SendErrorCodeToUma on how this enum is used.
  kErrorCodeUmaReportedMax,

  // use the 2xxx range to encode HTTP errors. These errors are available in
  // Dremel with the individual granularity. But for UMA purposes, all these
  // errors are aggregated into one: kErrorCodeOmahaErrorInHTTPResponse.
  kErrorCodeOmahaRequestHTTPResponseBase = 2000,  // + HTTP response code

  // TODO(jaysri): Move out all the bit masks into separate constants
  // outside the enum as part of fixing bug 34369.
  // Bit flags. Remember to update the mask below for new bits.

  // Set if boot mode not normal.
  kErrorCodeDevModeFlag        = 1 << 31,

  // Set if resuming an interruped update.
  kErrorCodeResumedFlag         = 1 << 30,

  // Set if using a dev/test image as opposed to an MP-signed image.
  kErrorCodeTestImageFlag       = 1 << 29,

  // Set if using devserver or Omaha sandbox (using crosh autest).
  kErrorCodeTestOmahaUrlFlag    = 1 << 28,

  // Mask that indicates bit positions that are used to indicate special flags
  // that are embedded in the error code to provide additional context about
  // the system in which the error was encountered.
  kErrorCodeSpecialFlags = (kErrorCodeDevModeFlag |
                            kErrorCodeResumedFlag |
                            kErrorCodeTestImageFlag |
                            kErrorCodeTestOmahaUrlFlag)
};

}  // namespace chromeos_update_engine

#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_ACTION_PROCESSOR_H__
