From fe2c777a8e9eb0cd06b97b2cede2991ffacefa4b Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Wed, 14 Feb 2018 12:10:42 -0800 Subject: [PATCH] Disambiguate INSUFFICIENT_CRYPTO_RESOURCES errors [ Merge of http://go/wvgerrit/43281 ] Bug: 73164325 Test: WV unit/integration test, playback tests using Netflix and Play Movies. Change-Id: Ifc3dd8863da1616eb4a7df35ad010f53b6d5e3d2 --- libwvdrmengine/cdm/core/include/wv_cdm_types.h | 2 ++ libwvdrmengine/cdm/core/src/crypto_session.cpp | 4 ++-- libwvdrmengine/cdm/core/test/test_printers.cpp | 6 ++++++ libwvdrmengine/include/WVErrors.h | 4 +++- libwvdrmengine/include/mapErrors-inl.h | 4 ++++ libwvdrmengine/include_hidl/mapErrors-inl.h | 2 ++ 6 files changed, 19 insertions(+), 3 deletions(-) diff --git a/libwvdrmengine/cdm/core/include/wv_cdm_types.h b/libwvdrmengine/cdm/core/include/wv_cdm_types.h index 361500c4..b41d28dd 100644 --- a/libwvdrmengine/cdm/core/include/wv_cdm_types.h +++ b/libwvdrmengine/cdm/core/include/wv_cdm_types.h @@ -319,6 +319,8 @@ enum CdmResponseType { LICENSE_REQUEST_INVALID_SUBLICENSE = 277, CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE = 278, LOAD_SYSTEM_ID_ERROR = 279, + INSUFFICIENT_CRYPTO_RESOURCES_4 = 280, + INSUFFICIENT_CRYPTO_RESOURCES_5 = 281, }; enum CdmKeyStatus { diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index f167a22a..926cb00f 100644 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -821,7 +821,7 @@ CdmResponseType CryptoSession::LoadKeys( result = KEY_ADDED; } else if (OEMCrypto_ERROR_TOO_MANY_KEYS == sts) { LOGE("CryptoSession::LoadKeys: OEMCrypto_LoadKeys error=%d", sts); - result = INSUFFICIENT_CRYPTO_RESOURCES; + result = INSUFFICIENT_CRYPTO_RESOURCES_4; } else if (OEMCrypto_ERROR_USAGE_TABLE_UNRECOVERABLE == sts) { // Handle vendor specific error LOGE("CryptoSession::LoadKeys: OEMCrypto_LoadKeys error=%d", sts); @@ -1128,7 +1128,7 @@ CdmResponseType CryptoSession::Decrypt(const CdmDecryptionParameters& params) { case OEMCrypto_SUCCESS: return NO_ERROR; case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES; + return INSUFFICIENT_CRYPTO_RESOURCES_5; case OEMCrypto_ERROR_KEY_EXPIRED: return NEED_KEY; case OEMCrypto_ERROR_INVALID_SESSION: diff --git a/libwvdrmengine/cdm/core/test/test_printers.cpp b/libwvdrmengine/cdm/core/test/test_printers.cpp index a6442a53..eb6eb372 100644 --- a/libwvdrmengine/cdm/core/test/test_printers.cpp +++ b/libwvdrmengine/cdm/core/test/test_printers.cpp @@ -574,6 +574,12 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) { case LOAD_SYSTEM_ID_ERROR: *os << "LOAD_SYSTEM_ID_ERROR"; break; + case INSUFFICIENT_CRYPTO_RESOURCES_4: + *os << "INSUFFICIENT_CRYPTO_RESOURCES_4"; + break; + case INSUFFICIENT_CRYPTO_RESOURCES_5: + *os << "INSUFFICIENT_CRYPTO_RESOURCES_5"; + break; default: *os << "Unknown CdmResponseType"; break; diff --git a/libwvdrmengine/include/WVErrors.h b/libwvdrmengine/include/WVErrors.h index a4cd8b41..da6dc757 100644 --- a/libwvdrmengine/include/WVErrors.h +++ b/libwvdrmengine/include/WVErrors.h @@ -260,10 +260,12 @@ enum { kLicenseRequestInvalidSublicense = ERROR_DRM_VENDOR_MIN + 269, kCertProvisioningEmptyServiceCertificate = ERROR_DRM_VENDOR_MIN + 270, kLoadSystemIdError = ERROR_DRM_VENDOR_MIN + 271, + kInsufficientCryptoResources4 = ERROR_DRM_VENDOR_MIN + 272, + kInsufficientCryptoResources5 = ERROR_DRM_VENDOR_MIN + 273, // This should always follow the last error code. // The offset value should be updated each time a new error code is added. - kErrorWVDrmMaxErrorUsed = ERROR_DRM_VENDOR_MIN + 271, + kErrorWVDrmMaxErrorUsed = ERROR_DRM_VENDOR_MIN + 273, // Used by crypto test mode kErrorTestMode = ERROR_DRM_VENDOR_MAX, diff --git a/libwvdrmengine/include/mapErrors-inl.h b/libwvdrmengine/include/mapErrors-inl.h index a9ca0e3d..9bc4277b 100644 --- a/libwvdrmengine/include/mapErrors-inl.h +++ b/libwvdrmengine/include/mapErrors-inl.h @@ -501,6 +501,10 @@ static android::status_t mapCdmResponseType(wvcdm::CdmResponseType res) { return kCertProvisioningEmptyServiceCertificate; case wvcdm::LOAD_SYSTEM_ID_ERROR: return kLoadSystemIdError; + case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_4: + return kInsufficientCryptoResources4; + case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_5: + return kInsufficientCryptoResources5; } // Return here instead of as a default case so that the compiler will warn diff --git a/libwvdrmengine/include_hidl/mapErrors-inl.h b/libwvdrmengine/include_hidl/mapErrors-inl.h index 825395a9..7154ac7d 100644 --- a/libwvdrmengine/include_hidl/mapErrors-inl.h +++ b/libwvdrmengine/include_hidl/mapErrors-inl.h @@ -234,6 +234,8 @@ static Status mapCdmResponseType(wvcdm::CdmResponseType res) { case wvcdm::INVALID_PARAMETERS_ENG_17: case wvcdm::INVALID_PARAMETERS_ENG_18: case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_3: + case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_4: + case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES_5: case wvcdm::CREATE_USAGE_ENTRY_UNKNOWN_ERROR: case wvcdm::LOAD_USAGE_ENTRY_GENERATION_SKEW: case wvcdm::LOAD_USAGE_ENTRY_SIGNATURE_FAILURE: