Introduce UsageTableHeader class

[ Merge of http://go/wvgerrit/23820 ]

The UsageTableHeader class is a singleton that CDM sessions will share.
A separate object will be created for each security level. The class
synchronizes access to usage table header and associated data-structures
and controls when they are read in or written out to non-secure persistent
storage. Upgrades from a fixed size usage table (supported by previous
versions of the OEMCrypto API v9-12) are handled by this class.

b/34327459

Test: Verified by unit/integration tests on angler

Change-Id: Ifc5996985e76bc260c01e55bc12aab1248389a80
This commit is contained in:
Rahul Frias
2017-02-08 14:56:16 -08:00
parent e75d3a6512
commit 0db3a137e9
9 changed files with 786 additions and 1 deletions

View File

@@ -244,10 +244,21 @@ enum {
kInvalidParametersEng23 = ERROR_DRM_VENDOR_MIN + 230,
kUsageInformationSupportFailed = ERROR_DRM_VENDOR_MIN + 231,
kUsageSupportGetApiFailed = ERROR_DRM_VENDOR_MIN + 232,
kUnexpectedEmptyUsageEntry = ERROR_DRM_VENDOR_MIN + 233,
kInvalidUsageEntryNumberModification = ERROR_DRM_VENDOR_MIN + 234,
kUsageInvalidNewEntry = ERROR_DRM_VENDOR_MIN + 235,
kUsageInvalidParameters1 = ERROR_DRM_VENDOR_MIN + 236,
kUsageRetrieveLicenseFailed = ERROR_DRM_VENDOR_MIN + 237,
kUsageRetrieveUsageInfoFailed = ERROR_DRM_VENDOR_MIN + 238,
kUsageRetrieveInvalidStorageType = ERROR_DRM_VENDOR_MIN + 239,
kUsageEntryNumberMismatch = ERROR_DRM_VENDOR_MIN + 240,
kUsageStoreLicenseFailed = ERROR_DRM_VENDOR_MIN + 241,
kUsageStoreUsageInfoFailed = ERROR_DRM_VENDOR_MIN + 242,
kUsageInvalidLoadEntry = ERROR_DRM_VENDOR_MIN + 243,
// 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 + 232,
kErrorWVDrmMaxErrorUsed = ERROR_DRM_VENDOR_MIN + 243,
// Used by crypto test mode
kErrorTestMode = ERROR_DRM_VENDOR_MAX,

View File

@@ -479,6 +479,28 @@ static android::status_t mapCdmResponseType(wvcdm::CdmResponseType res) {
return kUsageInformationSupportFailed;
case wvcdm::USAGE_SUPPORT_GET_API_FAILED:
return kUsageSupportGetApiFailed;
case wvcdm::UNEXPECTED_EMPTY_USAGE_ENTRY:
return kUnexpectedEmptyUsageEntry;
case wvcdm::INVALID_USAGE_ENTRY_NUMBER_MODIFICATION:
return kInvalidUsageEntryNumberModification;
case wvcdm::USAGE_INVALID_NEW_ENTRY:
return kUsageInvalidNewEntry;
case wvcdm::USAGE_INVALID_PARAMETERS_1:
return kUsageInvalidParameters1;
case wvcdm::USAGE_RETRIEVE_LICENSE_FAILED:
return kUsageRetrieveLicenseFailed;
case wvcdm::USAGE_RETRIEVE_USAGE_INFO_FAILED:
return kUsageRetrieveUsageInfoFailed;
case wvcdm::USAGE_RETRIEVE_INVALID_STORAGE_TYPE:
return kUsageRetrieveInvalidStorageType;
case wvcdm::USAGE_ENTRY_NUMBER_MISMATCH:
return kUsageEntryNumberMismatch;
case wvcdm::USAGE_STORE_LICENSE_FAILED:
return kUsageStoreLicenseFailed;
case wvcdm::USAGE_STORE_USAGE_INFO_FAILED:
return kUsageStoreUsageInfoFailed;
case wvcdm::USAGE_INVALID_LOAD_ENTRY:
return kUsageInvalidLoadEntry;
case wvcdm::UNUSED_1:
case wvcdm::UNUSED_2: