[ Cherry pick of http://ag/15836995 ] [ Merge of http://go/wvgerrit/133744 ] This changes adds several small classes which contain and manage system and engine information related to OTA keybox provisioning. These classes closely map to the OKP device file messages. Bug: 189232882 Test: Linux unit tests Change-Id: Ia9334c38f9d7ea89b30d9ad05f0595570bb38658 Storing and loading OKP info. [ Merge of http://go/wvgerrit/133763 and http://go/ag/15645333 ] This change extends the DeviceFiles module to be able to store and load OKP info. Mild data validation is performed when storing and loading the information. Bug: 189232882 Test: Android unit tests Change-Id: I077de3234157252f2255a4389bf82a8d5344a355 System OKP fallback policy. [ Merge of http://go/wvgerrit/133783 and http://go/ag/15645334 ] SystemFallbackPolicy provides a thread-safe interface for accessing and modifying OKP info. Bug: 189232882 Test: Android unit tests Change-Id: I4e43e3bc047ed5fb6cb517b53e4094e812b70e1e Engine OKP provisioner. [ Merge of http://go/wvgerrit/133803 and http://go/ag/15645335 ] The OtaKeyboxProvisioner provides a CdmEngine-specific context for performing OTA keybox provisioning. Utilizes the system-wide SystemFallbackPolicy to relay provisioning status between engines. The provisioner will handle message wrapping and unwrapping of the raw OTA keybox request / response into the SignedProvisioningMessage which is sent to/received from the provisioning server. [ Partial merge of http://go/wvgerrit/125844 ] Note: Includes partial CryptoSession changes from various CLs. CryptoSession functionality has been stripped to reduce impact of this CL. Bug: 189232882 Test: Android unit tests Change-Id: I282bf7d1887daefb2250af1bd595c4dc3dfcfb29 Integrated OKP into CDM Engine [ Merge of http://go/wvgerrit/133804 and http://go/ag/15646376 ] Extended the functionality of the CdmEngine to check if the device requires OKP and to initialize OKP resources if required. The functionality of OpenSession() and GetProvisioningRequest() have been the most affected. If OKP is required, these methods will signal to the app that provisioning is required and will return an OKP request. Once a device is provisioned, the OKP data is cleared away and the CdmEngine will resume normal operation. Engines created after a device is provisioned will immediately enter normal operations. The exception is for CdmEngines which failed to perform OKP for some reason and are still running. Those apps will need to restart before gaining access to L1 operations. Bug: 187646550 Test: Android integration tests Change-Id: Ia572a66a7b73479355758aa3d0c682691eaca0fc
631 lines
25 KiB
C++
631 lines
25 KiB
C++
//
|
|
// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine License
|
|
// Agreement.
|
|
//
|
|
|
|
#ifndef WV_MAP_ERRORS_H_
|
|
#define WV_MAP_ERRORS_H_
|
|
|
|
#include "media/stagefright/MediaErrors.h"
|
|
#include "utils/Errors.h"
|
|
#include "wv_cdm_types.h"
|
|
#include "WVErrors.h"
|
|
|
|
namespace wvdrm {
|
|
|
|
static android::status_t mapCdmResponseType(wvcdm::CdmResponseType res) {
|
|
switch (res) {
|
|
// Android return codes.
|
|
// This first group is for "android::OK".
|
|
case wvcdm::NO_ERROR:
|
|
case wvcdm::KEY_ADDED:
|
|
case wvcdm::KEY_MESSAGE:
|
|
case wvcdm::KEY_CANCELED:
|
|
// KEY_ADDED, KEY_MESSAGE, and KEY_CANCELLED are all alternative
|
|
// success messages for certain CDM methods instead of NO_ERROR.
|
|
return android::OK;
|
|
// The remaining android::* are alphabetically ordered based on the first
|
|
// case condition in the group.
|
|
case wvcdm::ANALOG_OUTPUT_ERROR:
|
|
case wvcdm::INSUFFICIENT_OUTPUT_PROTECTION:
|
|
case wvcdm::KEY_PROHIBITED_FOR_SECURITY_LEVEL:
|
|
return android::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION;
|
|
case wvcdm::DECRYPT_ERROR:
|
|
case wvcdm::SECURE_BUFFER_REQUIRED:
|
|
return android::ERROR_DRM_CANNOT_HANDLE;
|
|
case wvcdm::DECRYPT_NOT_READY:
|
|
case wvcdm::KEY_NOT_FOUND_IN_SESSION:
|
|
case wvcdm::NEED_KEY:
|
|
case wvcdm::NO_MATCHING_ENTITLEMENT_KEY:
|
|
case wvcdm::NO_CONTENT_KEY_3:
|
|
return android::ERROR_DRM_NO_LICENSE;
|
|
case wvcdm::DEVICE_REVOKED:
|
|
return android::ERROR_DRM_DEVICE_REVOKED;
|
|
case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES:
|
|
return android::ERROR_DRM_RESOURCE_BUSY;
|
|
case wvcdm::NEED_PROVISIONING:
|
|
return android::ERROR_DRM_NOT_PROVISIONED;
|
|
case wvcdm::RELEASE_USAGE_INFO_FAILED:
|
|
case wvcdm::RELEASE_USAGE_INFO_ERROR:
|
|
return android::ERROR_DRM_TAMPER_DETECTED;
|
|
case wvcdm::SESSION_NOT_FOUND_1:
|
|
case wvcdm::SESSION_NOT_FOUND_2:
|
|
case wvcdm::SESSION_NOT_FOUND_3:
|
|
case wvcdm::SESSION_NOT_FOUND_4:
|
|
case wvcdm::SESSION_NOT_FOUND_5:
|
|
case wvcdm::SESSION_NOT_FOUND_6:
|
|
case wvcdm::SESSION_NOT_FOUND_7:
|
|
case wvcdm::SESSION_NOT_FOUND_8:
|
|
case wvcdm::SESSION_NOT_FOUND_9:
|
|
case wvcdm::SESSION_NOT_FOUND_10:
|
|
case wvcdm::SESSION_NOT_FOUND_18:
|
|
case wvcdm::SESSION_NOT_FOUND_19:
|
|
case wvcdm::SESSION_NOT_FOUND_20:
|
|
case wvcdm::SESSION_NOT_FOUND_21:
|
|
case wvcdm::SESSION_NOT_FOUND_22:
|
|
case wvcdm::SESSION_NOT_FOUND_23:
|
|
case wvcdm::SESSION_NOT_FOUND_FOR_DECRYPT:
|
|
return android::ERROR_DRM_SESSION_NOT_OPENED;
|
|
case wvcdm::UNKNOWN_ERROR:
|
|
return android::ERROR_DRM_UNKNOWN;
|
|
// WV return codes.
|
|
// Alphabetically ordered based on the case condition.
|
|
case wvcdm::ADD_KEY_ERROR:
|
|
return kAddKeyError;
|
|
case wvcdm::CANNOT_DECRYPT_ZERO_SAMPLES:
|
|
return kCannotDecryptZeroSamples;
|
|
case wvcdm::CANNOT_DECRYPT_ZERO_SUBSAMPLES:
|
|
return kCannotDecryptZeroSubsamples;
|
|
case wvcdm::CENC_INIT_DATA_UNAVAILABLE:
|
|
return kCencInitDataUnavailable;
|
|
case wvcdm::CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE:
|
|
return kCertProvisioningEmptyServiceCertificate;
|
|
case wvcdm::CERT_PROVISIONING_GET_KEYBOX_ERROR_1:
|
|
return kCertProvisioningGetKeyboxError1;
|
|
case wvcdm::CERT_PROVISIONING_INVALID_CERT_TYPE:
|
|
return kCertProvisioningInvalidCertType;
|
|
case wvcdm::CERT_PROVISIONING_NONCE_GENERATION_ERROR:
|
|
return kCertProvisioningRequestNonceGenerationError;
|
|
case wvcdm::CERT_PROVISIONING_REQUEST_ERROR_1:
|
|
return kCertProvisioningRequestError1;
|
|
case wvcdm::CERT_PROVISIONING_REQUEST_ERROR_4:
|
|
return kCertProvisioningRequestError4;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_1:
|
|
return kCertProvisioningResponseError1;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_2:
|
|
return kCertProvisioningResponseError2;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_3:
|
|
return kCertProvisioningResponseError3;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_4:
|
|
return kCertProvisioningResponseError4;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_7:
|
|
return kCertProvisioningResponseError7;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_8:
|
|
return kCertProvisioningResponseError8;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_9:
|
|
return kCertProvisioningResponseError9;
|
|
case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_10:
|
|
return kCertProvisioningResponseError10;
|
|
case wvcdm::CLIENT_IDENTIFICATION_TOKEN_ERROR_1:
|
|
return kClientIdentificationTokenError1;
|
|
case wvcdm::CLIENT_ID_AES_ENCRYPT_ERROR:
|
|
return kClientIdAesEncryptError;
|
|
case wvcdm::CLIENT_ID_AES_INIT_ERROR:
|
|
return kClientIdAesInitError;
|
|
case wvcdm::CLIENT_ID_GENERATE_RANDOM_ERROR:
|
|
return kClientIdGenerateRandomError;
|
|
case wvcdm::CLIENT_ID_RSA_ENCRYPT_ERROR:
|
|
return kClientIdRsaEncryptError;
|
|
case wvcdm::CLIENT_ID_RSA_INIT_ERROR:
|
|
return kClientIdRsaInitError;
|
|
case wvcdm::CLIENT_TOKEN_NOT_SET:
|
|
return kClientTokenNotSet;
|
|
case wvcdm::COPY_OLD_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
return kCopyOldUsageEntryUnknownError;
|
|
case wvcdm::CORE_MESSAGE_NOT_FOUND:
|
|
return kCoreMessageNotFound;
|
|
case wvcdm::CREATE_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
return kCreateUsageEntryUnknownError;
|
|
case wvcdm::CREATE_USAGE_TABLE_ERROR:
|
|
return kCreateUsageTableError;
|
|
case wvcdm::DELETE_USAGE_ERROR_1:
|
|
return kDeleteUsageError1;
|
|
case wvcdm::DELETE_USAGE_ERROR_2:
|
|
return kDeleteUsageError2;
|
|
case wvcdm::DELETE_USAGE_ERROR_3:
|
|
return kDeleteUsageError3;
|
|
case wvcdm::DEVICE_CANNOT_REPROVISION:
|
|
return kDeviceCannotReprovision;
|
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_1:
|
|
return kDeviceCertificateError1;
|
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_2:
|
|
return kDeviceCertificateError2;
|
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_3:
|
|
return kDeviceCertificateError3;
|
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_4:
|
|
return kDeviceCertificateError4;
|
|
case wvcdm::DUPLICATE_SESSION_ID_SPECIFIED:
|
|
return kDuplicateSessionIdSpecified;
|
|
case wvcdm::EMPTY_KEYSET_ID:
|
|
return kEmptyKeySetId;
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_1:
|
|
return kEmptyKeySetIdEng1;
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_2:
|
|
return kEmptyKeySetIdEng2;
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_3:
|
|
return kEmptyKeySetIdEng3;
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_4:
|
|
return kEmptyKeySetIdEng4;
|
|
case wvcdm::EMPTY_KEYSET_ID_ENG_5:
|
|
return kEmptyKeySetIdEng5;
|
|
case wvcdm::EMPTY_KEY_DATA_1:
|
|
return kEmptyKeyData1;
|
|
case wvcdm::EMPTY_KEY_DATA_2:
|
|
return kEmptyKeyData2;
|
|
case wvcdm::EMPTY_LICENSE_RENEWAL:
|
|
return kEmptyLicenseRenewal;
|
|
case wvcdm::EMPTY_LICENSE_REQUEST:
|
|
return kEmptyLicenseRequest;
|
|
case wvcdm::EMPTY_LICENSE_REQUEST_2:
|
|
return kEmptyLicenseRequest2;
|
|
case wvcdm::EMPTY_LICENSE_REQUEST_3:
|
|
return kEmptyLicenseRequest3;
|
|
case wvcdm::EMPTY_LICENSE_RESPONSE_1:
|
|
return kEmptyLicenseResponse1;
|
|
case wvcdm::EMPTY_LICENSE_RESPONSE_2:
|
|
return kEmptyLicenseResponse2;
|
|
case wvcdm::EMPTY_LICENSE_RESPONSE_3:
|
|
return kEmptyLicenseResponse3;
|
|
case wvcdm::EMPTY_LICENSE_RESPONSE_4:
|
|
return kEmptyLicenseResponse4;
|
|
case wvcdm::EMPTY_PROVISIONING_CERTIFICATE_1:
|
|
return kEmptyProvisioningCertificate1;
|
|
case wvcdm::EMPTY_PROVISIONING_CERTIFICATE_2:
|
|
return kEmptyProvisioningCertificate2;
|
|
case wvcdm::EMPTY_PROVISIONING_RESPONSE:
|
|
return kEmptyProvisioningResponse;
|
|
case wvcdm::EMPTY_RESPONSE_ERROR_1:
|
|
return kEmptyResponseError1;
|
|
case wvcdm::EMPTY_SESSION_ID:
|
|
return kEmptySessionId;
|
|
case wvcdm::GENERATE_DERIVED_KEYS_ERROR:
|
|
return kGenerateDerivedKeysError;
|
|
case wvcdm::GENERATE_USAGE_REPORT_ERROR:
|
|
return kGenerateUsageReportError;
|
|
case wvcdm::GET_DECRYPT_HASH_ERROR:
|
|
return kGetDecryptHashError;
|
|
case wvcdm::GET_LICENSE_ERROR:
|
|
case wvcdm::KEYSET_ID_NOT_FOUND_4:
|
|
// There is a sub-error code that distinguishes the two.
|
|
return kGetLicenseError;
|
|
case wvcdm::GET_PROVISIONING_METHOD_ERROR:
|
|
return kGetProvisioningError;
|
|
case wvcdm::GET_RELEASED_LICENSE_ERROR:
|
|
return kGetReleasedLicenseError;
|
|
case wvcdm::GET_USAGE_INFO_ERROR_1:
|
|
return kGetUsageInfoError1;
|
|
case wvcdm::GET_USAGE_INFO_ERROR_2:
|
|
return kGetUsageInfoError2;
|
|
case wvcdm::GET_USAGE_INFO_ERROR_3:
|
|
return kGetUsageInfoError3;
|
|
case wvcdm::GET_USAGE_INFO_ERROR_4:
|
|
return kGetUsageInfoError4;
|
|
case wvcdm::INCORRECT_CRYPTO_MODE:
|
|
return kIncorrectCryptoMode;
|
|
case wvcdm::INCORRECT_USAGE_SUPPORT_TYPE_1:
|
|
return kIncorrectUsageSupportType1;
|
|
case wvcdm::INCORRECT_USAGE_SUPPORT_TYPE_2:
|
|
return kIncorrectUsageSupportType2;
|
|
case wvcdm::INIT_DATA_NOT_FOUND:
|
|
return kInitDataNotFound;
|
|
case wvcdm::INVALID_DECRYPT_HASH_FORMAT:
|
|
return kInvalidDecryptHashFormat;
|
|
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_1:
|
|
return kInvalidDecryptParametersEng1;
|
|
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_2:
|
|
return kInvalidDecryptParametersEng2;
|
|
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_3:
|
|
return kInvalidDecryptParametersEng3;
|
|
case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_4:
|
|
return kInvalidDecryptParametersEng4;
|
|
case wvcdm::INVALID_DEVICE_CERTIFICATE_TYPE:
|
|
return kInvalidDeviceCertificateType;
|
|
case wvcdm::INVALID_IV_SIZE:
|
|
return kInvalidIvSize;
|
|
case wvcdm::INVALID_KEY_SYSTEM:
|
|
return kInvalidKeySystem;
|
|
case wvcdm::INVALID_LICENSE_REQUEST_TYPE_1:
|
|
return kInvalidLicenseRequestType1;
|
|
case wvcdm::INVALID_LICENSE_REQUEST_TYPE_2:
|
|
return kInvalidLicenseRequestType2;
|
|
case wvcdm::INVALID_LICENSE_RESPONSE:
|
|
return kInvalidLicenseResponse;
|
|
case wvcdm::INVALID_LICENSE_TYPE:
|
|
return kInvalidLicenseType;
|
|
case wvcdm::INVALID_LICENSE_TYPE_2:
|
|
return kInvalidLicenseType2;
|
|
case wvcdm::INVALID_PARAMETERS_ENG_5:
|
|
return kInvalidParametersEng5;
|
|
case wvcdm::INVALID_PARAMETERS_ENG_13:
|
|
return kInvalidParametersEng13;
|
|
case wvcdm::INVALID_PARAMETERS_ENG_14:
|
|
return kInvalidParametersEng14;
|
|
case wvcdm::INVALID_PARAMETERS_ENG_15:
|
|
return kInvalidParametersEng15;
|
|
case wvcdm::INVALID_PARAMETERS_ENG_16:
|
|
return kInvalidParametersEng16;
|
|
case wvcdm::INVALID_PARAMETERS_ENG_22:
|
|
return kInvalidParametersEng22;
|
|
case wvcdm::INVALID_PARAMETERS_ENG_23:
|
|
return kInvalidParametersEng23;
|
|
case wvcdm::INVALID_PARAMETERS_ENG_24:
|
|
return kInvalidParametersEng24;
|
|
case wvcdm::INVALID_PARAMETERS_LIC_1:
|
|
return kInvalidParametersLic1;
|
|
case wvcdm::INVALID_PARAMETERS_LIC_2:
|
|
return kInvalidParametersLic2;
|
|
case wvcdm::INVALID_PARAMETERS_LIC_3:
|
|
return kInvalidParametersLic3;
|
|
case wvcdm::INVALID_PARAMETERS_LIC_4:
|
|
return kInvalidParametersLic4;
|
|
case wvcdm::INVALID_PARAMETERS_LIC_6:
|
|
return kInvalidParametersLic6;
|
|
case wvcdm::INVALID_PARAMETERS_LIC_7:
|
|
return kInvalidParametersLic7;
|
|
case wvcdm::INVALID_PROVISIONING_PARAMETERS_1:
|
|
return kInvalidProvisioningParam1;
|
|
case wvcdm::INVALID_PROVISIONING_PARAMETERS_2:
|
|
return kInvalidProvisioningParam2;
|
|
case wvcdm::INVALID_PROVISIONING_REQUEST_PARAM_1:
|
|
return kInvalidProvisioningReqParam1;
|
|
case wvcdm::INVALID_PROVISIONING_REQUEST_PARAM_2:
|
|
return kInvalidProvisioningReqParam2;
|
|
case wvcdm::INVALID_QUERY_KEY:
|
|
return kInvalidQueryKey;
|
|
case wvcdm::INVALID_SESSION_1:
|
|
return kInvalidSession1;
|
|
case wvcdm::INVALID_SESSION_2:
|
|
return kInvalidSession2;
|
|
case wvcdm::INVALID_SESSION_ID:
|
|
return kInvalidSessionId;
|
|
case wvcdm::INVALID_USAGE_ENTRY_NUMBER_MODIFICATION:
|
|
return kInvalidUsageEntryNumberModification;
|
|
case wvcdm::KEYSET_ID_NOT_FOUND_1:
|
|
return kKeySetIdNotFound1;
|
|
case wvcdm::KEYSET_ID_NOT_FOUND_2:
|
|
return kKeySetIdNotFound2;
|
|
case wvcdm::KEYSET_ID_NOT_FOUND_3:
|
|
return kKeySetIdNotFound3;
|
|
case wvcdm::KEY_CONFLICT_1:
|
|
return kKeyConflict1;
|
|
case wvcdm::KEY_ERROR:
|
|
// KEY_ERROR is used by the CDM to mean just about any kind of error, not
|
|
// just license errors, so it is mapped to the generic response.
|
|
return kErrorCDMGeneric;
|
|
case wvcdm::KEY_NOT_FOUND_1:
|
|
return kKeyNotFound1;
|
|
case wvcdm::KEY_NOT_FOUND_2:
|
|
return kKeyNotFound2;
|
|
case wvcdm::KEY_NOT_FOUND_3:
|
|
return kKeyNotFound3;
|
|
case wvcdm::KEY_NOT_FOUND_4:
|
|
return kKeyNotFound4;
|
|
case wvcdm::KEY_NOT_FOUND_5:
|
|
return kKeyNotFound5;
|
|
case wvcdm::KEY_NOT_FOUND_6:
|
|
return kKeyNotFound6;
|
|
case wvcdm::KEY_REQUEST_ERROR_1:
|
|
return kKeyRequestError1;
|
|
case wvcdm::KEY_SIZE_ERROR_1:
|
|
return kKeySizeError1;
|
|
case wvcdm::KEY_SIZE_ERROR_2:
|
|
return kKeySizeError2;
|
|
case wvcdm::LICENSE_ID_NOT_FOUND:
|
|
return kLicenseIdNotFound;
|
|
case wvcdm::LICENSE_PARSER_INIT_ERROR:
|
|
return kLicenseParserInitError;
|
|
case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_1:
|
|
return kLicenseParserNotInitialized1;
|
|
case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_2:
|
|
return kLicenseParserNotInitialized2;
|
|
case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_3:
|
|
return kLicenseParserNotInitialized3;
|
|
case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_4:
|
|
return kLicenseParserNotInitialized4;
|
|
case wvcdm::LICENSE_RENEWAL_NONCE_GENERATION_ERROR:
|
|
return kLicenseRenewalNonceGenerationError;
|
|
case wvcdm::LICENSE_RENEWAL_PROHIBITED:
|
|
return kLicenseRenewalProhibited;
|
|
case wvcdm::LICENSE_REQUEST_NONCE_GENERATION_ERROR:
|
|
return kLicenseRequestNonceGenerationError;
|
|
case wvcdm::LICENSE_REQUEST_SERVICE_CERTIFICATE_GENERATION_ERROR:
|
|
return kLicenseRequestServiceCertificateGenerationError;
|
|
case wvcdm::LICENSE_RESPONSE_NOT_SIGNED:
|
|
return kLicenseResponseNotSigned;
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_1:
|
|
return kLicenseResponseParseError1;
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_2:
|
|
return kLicenseResponseParseError2;
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_3:
|
|
return kLicenseResponseParseError3;
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_4:
|
|
return kLicenseResponseParseError4;
|
|
case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_5:
|
|
return kLicenseResponseParseError5;
|
|
case wvcdm::LICENSE_USAGE_ENTRY_MISSING:
|
|
return kLicenseUsageEntryMissing;
|
|
case wvcdm::LIST_LICENSE_ERROR_1:
|
|
return kListLicenseError1;
|
|
case wvcdm::LIST_LICENSE_ERROR_2:
|
|
return kListLicenseError2;
|
|
case wvcdm::LIST_USAGE_ERROR_1:
|
|
return kListUsageError1;
|
|
case wvcdm::LIST_USAGE_ERROR_2:
|
|
return kListUsageError2;
|
|
case wvcdm::LOAD_ENTITLED_CONTENT_KEYS_ERROR:
|
|
return kLoadEntitledContentKeysError;
|
|
case wvcdm::LOAD_KEY_ERROR:
|
|
return kLoadKeyError;
|
|
case wvcdm::LOAD_LICENSE_ERROR:
|
|
return kLoadLicenseError;
|
|
case wvcdm::LOAD_PROVISIONING_ERROR:
|
|
return kLoadProvisioningError;
|
|
case wvcdm::LOAD_RENEWAL_ERROR:
|
|
return kLoadRenewalError;
|
|
case wvcdm::LOAD_SYSTEM_ID_ERROR:
|
|
return kLoadSystemIdError;
|
|
case wvcdm::LOAD_USAGE_ENTRY_GENERATION_SKEW:
|
|
return kLoadUsageEntryGenerationSkew;
|
|
case wvcdm::LOAD_USAGE_ENTRY_INVALID_SESSION:
|
|
return kLoadUsageEntryInvalidSession;
|
|
case wvcdm::LOAD_USAGE_ENTRY_SIGNATURE_FAILURE:
|
|
return kLoadUsageEntrySignatureFailure;
|
|
case wvcdm::LOAD_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
return kLoadUsageEntryUnknownError;
|
|
case wvcdm::LOAD_USAGE_HEADER_BAD_MAGIC:
|
|
return kLoadUsageHeaderBadMagic;
|
|
case wvcdm::LOAD_USAGE_HEADER_GENERATION_SKEW:
|
|
return kLoadUsageHeaderGenerationSkew;
|
|
case wvcdm::LOAD_USAGE_HEADER_SIGNATURE_FAILURE:
|
|
return kLoadUsageHeaderSignatureFailure;
|
|
case wvcdm::LOAD_USAGE_HEADER_UNKNOWN_ERROR:
|
|
return kLoadUsageHeaderUnknownError;
|
|
case wvcdm::LOAD_USAGE_INFO_FILE_ERROR:
|
|
return kLoadUsageInfoFileError;
|
|
case wvcdm::LOAD_USAGE_INFO_MISSING:
|
|
return kLoadUsageInfoMissing;
|
|
case wvcdm::MOVE_USAGE_ENTRY_DESTINATION_IN_USE:
|
|
return kMoveUsageEntryDestinationInUse;
|
|
case wvcdm::MOVE_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
return kMoveUsageEntryUnknownError;
|
|
case wvcdm::NOT_AN_ENTITLEMENT_SESSION:
|
|
return kNotAnEntitlementSession;
|
|
case wvcdm::NOT_INITIALIZED_ERROR:
|
|
return kNotInitializedError;
|
|
case wvcdm::NO_CONTENT_KEY:
|
|
return kNoContentKey;
|
|
case wvcdm::NO_CONTENT_KEY_2:
|
|
return kNoContentKey2;
|
|
case wvcdm::NO_DEVICE_KEY_1:
|
|
return kNoDeviceKey1;
|
|
case wvcdm::NO_SRM_VERSION:
|
|
return kNoSrmVersion;
|
|
case wvcdm::NO_USAGE_ENTRIES:
|
|
return kNoUsageEntries;
|
|
case wvcdm::OFFLINE_LICENSE_PROHIBITED:
|
|
return kOfflineLicenseProhibited;
|
|
case wvcdm::OKP_ALREADY_PROVISIONED:
|
|
return kOkpAlreadyProvisioned;
|
|
case wvcdm::PARAMETER_NULL:
|
|
return kParameterNull;
|
|
case wvcdm::PARSE_OKP_RESPONSE_ERROR:
|
|
return kParseOkpResponseError;
|
|
case wvcdm::PARSE_REQUEST_ERROR_1:
|
|
return kParseRequestError1;
|
|
case wvcdm::PARSE_REQUEST_ERROR_2:
|
|
return kParseRequestError2;
|
|
case wvcdm::PARSE_RESPONSE_ERROR_1:
|
|
return kParseResponseError1;
|
|
case wvcdm::PARSE_RESPONSE_ERROR_2:
|
|
return kParseResponseError2;
|
|
case wvcdm::PARSE_RESPONSE_ERROR_3:
|
|
return kParseResponseError3;
|
|
case wvcdm::PARSE_RESPONSE_ERROR_4:
|
|
return kParseResponseError4;
|
|
case wvcdm::PARSE_SERVICE_CERTIFICATE_ERROR:
|
|
return kParseServiceCertificateError;
|
|
case wvcdm::PREPARE_CENC_CONTENT_ID_FAILED:
|
|
return kPrepareCencContentIdFailed;
|
|
case wvcdm::PREPARE_WEBM_CONTENT_ID_FAILED:
|
|
return kPrepareWebmContentIdFailed;
|
|
case wvcdm::PRIVACY_MODE_ERROR_1:
|
|
return kPrivacyModeError1;
|
|
case wvcdm::PRIVACY_MODE_ERROR_2:
|
|
return kPrivacyModeError2;
|
|
case wvcdm::PRIVACY_MODE_ERROR_3:
|
|
return kPrivacyModeError3;
|
|
case wvcdm::PROVISIONING_NOT_ALLOWED_FOR_ATSC:
|
|
return kProvisioningNotAllowedForAtsc;
|
|
case wvcdm::REFRESH_KEYS_ERROR:
|
|
return kRefreshKeysError;
|
|
case wvcdm::REINIT_ERROR:
|
|
return kReinitError;
|
|
case wvcdm::RELEASE_KEY_ERROR:
|
|
return kReleaseKeyError;
|
|
case wvcdm::RELEASE_KEY_REQUEST_ERROR:
|
|
return kReleaseKeyRequestError;
|
|
case wvcdm::RELEASE_LICENSE_ERROR_1:
|
|
return kReleaseLicenseError1;
|
|
case wvcdm::RELEASE_LICENSE_ERROR_2:
|
|
return kReleaseLicenseError2;
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_1:
|
|
return kRemoveAllUsageInfoError1;
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_2:
|
|
return kRemoveAllUsageInfoError2;
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_5:
|
|
return kRemoveAllUsageInfoError5;
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_6:
|
|
return kRemoveAllUsageInfoError6;
|
|
case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_7:
|
|
return kRemoveAllUsageInfoError7;
|
|
case wvcdm::REMOVE_USAGE_INFO_ERROR_1:
|
|
return kRemoveUsageInfoError1;
|
|
case wvcdm::REMOVE_USAGE_INFO_ERROR_2:
|
|
return kRemoveUsageInfoError2;
|
|
case wvcdm::REMOVE_USAGE_INFO_ERROR_3:
|
|
return kRemoveUsageInfoError3;
|
|
case wvcdm::RENEW_KEY_ERROR_1:
|
|
return kRenewKeyError1;
|
|
case wvcdm::RENEW_KEY_ERROR_2:
|
|
return kRenewKeyError2;
|
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_2:
|
|
return kRestoreOfflineLicenseError2;
|
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_3:
|
|
return kRestoreOfflineLicenseError3;
|
|
case wvcdm::SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH:
|
|
return kSampleAndSubsampleSizeMismatch;
|
|
case wvcdm::SESSION_FILE_HANDLE_INIT_ERROR:
|
|
return kSessionFileHandleInitError;
|
|
case wvcdm::SESSION_KEYS_NOT_FOUND:
|
|
return kSessionKeysNotFound;
|
|
case wvcdm::SESSION_KEYS_NOT_FOUND_2:
|
|
return kSessionKeysNotFound2;
|
|
case wvcdm::SESSION_NOT_FOUND_11:
|
|
return kSessionNotFound11;
|
|
case wvcdm::SESSION_NOT_FOUND_12:
|
|
return kSessionNotFound12;
|
|
case wvcdm::SESSION_NOT_FOUND_13:
|
|
return kSessionNotFound13;
|
|
case wvcdm::SESSION_NOT_FOUND_14:
|
|
return kSessionNotFound14;
|
|
case wvcdm::SESSION_NOT_FOUND_15:
|
|
return kSessionNotFound15;
|
|
case wvcdm::SESSION_NOT_FOUND_16:
|
|
return kSessionNotFound16;
|
|
case wvcdm::SET_DECRYPT_HASH_ERROR:
|
|
return kSetDecryptHashError;
|
|
case wvcdm::SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE:
|
|
return kShrinkUsageTableHeaderEntryInUse;
|
|
case wvcdm::SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR:
|
|
return kShrinkUsageTableHeaderUnknownError;
|
|
case wvcdm::SIGNATURE_NOT_FOUND:
|
|
return kSignatureNotFound;
|
|
case wvcdm::SIGNATURE_NOT_FOUND_2:
|
|
return kSignatureNotFound2;
|
|
case wvcdm::STORAGE_PROHIBITED:
|
|
return kStorageProhibited;
|
|
case wvcdm::STORE_LICENSE_ERROR_1:
|
|
return kStoreLicenseError1;
|
|
case wvcdm::STORE_LICENSE_ERROR_2:
|
|
return kStoreLicenseError2;
|
|
case wvcdm::STORE_USAGE_INFO_ERROR:
|
|
return kStoreUsageInfoError;
|
|
case wvcdm::UNEXPECTED_EMPTY_USAGE_ENTRY:
|
|
return kUnexpectedEmptyUsageEntry;
|
|
case wvcdm::UNKNOWN_SELECT_KEY_ERROR_1:
|
|
return kUnknownSelectKeyError1;
|
|
case wvcdm::UNKNOWN_SELECT_KEY_ERROR_2:
|
|
return kUnknownSelectKeyError2;
|
|
case wvcdm::UNPROVISION_ERROR_1:
|
|
return kUnprovisioningError1;
|
|
case wvcdm::UNPROVISION_ERROR_2:
|
|
return kUnprovisioningError2;
|
|
case wvcdm::UNPROVISION_ERROR_3:
|
|
return kUnprovisioningError3;
|
|
case wvcdm::UNPROVISION_ERROR_4:
|
|
return kUnprovisioningError4;
|
|
case wvcdm::UNSUPPORTED_INIT_DATA:
|
|
return kUnsupportedInitData;
|
|
case wvcdm::UNSUPPORTED_INIT_DATA_FORMAT:
|
|
return kUnsupportedInitDataFormat;
|
|
case wvcdm::UPDATE_USAGE_ENTRY_UNKNOWN_ERROR:
|
|
return kUpdateUsageEntryUnknownError;
|
|
case wvcdm::USAGE_ENTRY_NUMBER_MISMATCH:
|
|
return kUsageEntryNumberMismatch;
|
|
case wvcdm::USAGE_ENTRY_ALREADY_LOADED:
|
|
return kUsageEntryAlreadyLoaded;
|
|
case wvcdm::USAGE_GET_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE:
|
|
return kUsageGetEntryRetrieveInvalidStorageType;
|
|
case wvcdm::USAGE_GET_ENTRY_RETRIEVE_LICENSE_FAILED:
|
|
return kUsageGetEntryRetrieveLicenseFailed;
|
|
case wvcdm::USAGE_GET_ENTRY_RETRIEVE_USAGE_INFO_FAILED:
|
|
return kUsageGetEntryRetrieveUsageInfoFailed;
|
|
case wvcdm::USAGE_INFORMATION_SUPPORT_FAILED:
|
|
return kUsageInformationSupportFailed;
|
|
case wvcdm::USAGE_INFO_NOT_FOUND:
|
|
return kUsageInfoNotFound;
|
|
case wvcdm::USAGE_INVALID_LOAD_ENTRY:
|
|
return kUsageInvalidLoadEntry;
|
|
case wvcdm::USAGE_INVALID_NEW_ENTRY:
|
|
return kUsageInvalidNewEntry;
|
|
case wvcdm::USAGE_INVALID_PARAMETERS_1:
|
|
return kUsageInvalidParameters1;
|
|
case wvcdm::USAGE_INVALID_PARAMETERS_2:
|
|
return kUsageInvalidParameters2;
|
|
case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE:
|
|
return kUsageStoreEntryRetrieveInvalidStorageType;
|
|
case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_LICENSE_FAILED:
|
|
return kUsageStoreEntryRetrieveLicenseFailed;
|
|
case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_USAGE_INFO_FAILED:
|
|
return kUsageStoreEntryRetrieveUsageInfoFailed;
|
|
case wvcdm::USAGE_STORE_LICENSE_FAILED:
|
|
return kUsageStoreLicenseFailed;
|
|
case wvcdm::USAGE_STORE_USAGE_INFO_FAILED:
|
|
return kUsageStoreUsageInfoFailed;
|
|
case wvcdm::USAGE_SUPPORT_GET_API_FAILED:
|
|
return kUsageSupportGetApiFailed;
|
|
case wvcdm::WEBM_INIT_DATA_UNAVAILABLE:
|
|
return kWebmInitDataUnavailable;
|
|
|
|
// This error is only returned in API 29 by the hidl service.
|
|
// It should never be used in the legacy plugin.
|
|
// It is mapped here to clear the compiler warning.
|
|
case wvcdm::GET_OFFLINE_LICENSE_STATE_ERROR_1:
|
|
case wvcdm::GET_OFFLINE_LICENSE_STATE_ERROR_2:
|
|
case wvcdm::REMOVE_OFFLINE_LICENSE_ERROR_1:
|
|
case wvcdm::REMOVE_OFFLINE_LICENSE_ERROR_2:
|
|
case wvcdm::OUTPUT_TOO_LARGE_ERROR:
|
|
case wvcdm::SESSION_LOST_STATE_ERROR:
|
|
case wvcdm::GENERATE_DERIVED_KEYS_ERROR_2:
|
|
case wvcdm::LOAD_DEVICE_RSA_KEY_ERROR:
|
|
case wvcdm::NONCE_GENERATION_ERROR:
|
|
case wvcdm::GENERATE_SIGNATURE_ERROR:
|
|
case wvcdm::UNKNOWN_CLIENT_TOKEN_TYPE:
|
|
case wvcdm::DEACTIVATE_USAGE_ENTRY_ERROR:
|
|
case wvcdm::SYSTEM_INVALIDATED_ERROR:
|
|
case wvcdm::OPEN_CRYPTO_SESSION_ERROR:
|
|
case wvcdm::LOAD_SRM_ERROR:
|
|
case wvcdm::RANDOM_GENERATION_ERROR:
|
|
case wvcdm::CRYPTO_SESSION_NOT_INITIALIZED:
|
|
case wvcdm::GET_DEVICE_ID_ERROR:
|
|
case wvcdm::GET_TOKEN_FROM_OEM_CERT_ERROR:
|
|
case wvcdm::CRYPTO_SESSION_NOT_OPEN:
|
|
case wvcdm::GET_TOKEN_FROM_KEYBOX_ERROR:
|
|
case wvcdm::KEYBOX_TOKEN_TOO_SHORT:
|
|
case wvcdm::EXTRACT_SYSTEM_ID_FROM_OEM_CERT_ERROR:
|
|
case wvcdm::RSA_SIGNATURE_GENERATION_ERROR:
|
|
case wvcdm::GET_HDCP_CAPABILITY_FAILED:
|
|
case wvcdm::GET_NUMBER_OF_OPEN_SESSIONS_ERROR:
|
|
case wvcdm::GET_MAX_NUMBER_OF_OPEN_SESSIONS_ERROR:
|
|
case wvcdm::NOT_IMPLEMENTED_ERROR:
|
|
case wvcdm::GET_SRM_VERSION_ERROR:
|
|
case wvcdm::REWRAP_DEVICE_RSA_KEY_ERROR:
|
|
case wvcdm::SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY:
|
|
case wvcdm::INVALID_SRM_LIST:
|
|
return android::ERROR_DRM_UNKNOWN;
|
|
}
|
|
|
|
// Return here instead of as a default case so that the compiler will warn
|
|
// us if we forget to include an enum member in the switch statement.
|
|
return android::UNKNOWN_ERROR;
|
|
}
|
|
|
|
static inline bool isCdmResponseTypeSuccess(wvcdm::CdmResponseType res) {
|
|
return mapCdmResponseType(res) == android::OK;
|
|
}
|
|
|
|
} // namespace wvdrm
|
|
|
|
#endif // WV_MAP_ERRORS_H_
|