From c70e3deb8bc3b89519273342ca0cfb3ee09141d8 Mon Sep 17 00:00:00 2001 From: Edwin Wong Date: Sun, 16 Oct 2022 20:31:42 +0000 Subject: [PATCH] Output metrics in YAML format Merge from http://go/wvgerrit/158917 Use go/yamllint as reference and obfuscate portion of output to run on an online yaml validator. Sample output: http://go/cl/481370906 Test: Netflix, Play TV and Movies, Youtube Test: adb shell dumpsys android.hardware.drm.IDrmFactory/widevine Test: ./build_and_run_all_unit_tests.sh Bug: 239462891 Change-Id: I1abf1aa50aa25b97b1f6c10995c324d6de04d056 --- libwvdrmengine/Android.bp | 1 + .../cdm/core/include/wv_cdm_types.h | 1 + libwvdrmengine/cdm/core/src/wv_cdm_types.cpp | 664 +++++++++ .../cdm/core/test/test_printers.cpp | 1224 +---------------- .../cdm/util/include/error_string_util.h | 11 + .../cdm/util/src/error_string_util.cpp | 171 +++ libwvdrmengine/src/WVDrmFactory.cpp | 18 +- libwvdrmengine/src/wv_metrics.cpp | 249 +++- 8 files changed, 1036 insertions(+), 1303 deletions(-) create mode 100644 libwvdrmengine/cdm/util/include/error_string_util.h create mode 100644 libwvdrmengine/cdm/util/src/error_string_util.cpp diff --git a/libwvdrmengine/Android.bp b/libwvdrmengine/Android.bp index 20e7e440..41107add 100644 --- a/libwvdrmengine/Android.bp +++ b/libwvdrmengine/Android.bp @@ -302,6 +302,7 @@ cdm_util_src_files = [ "cdm/src/timer.cpp", "cdm/util/src/cdm_random.cpp", "cdm/util/src/clock.cpp", + "cdm/util/src/error_string_util.cpp", "cdm/util/src/file_store.cpp", "cdm/util/src/file_utils.cpp", "cdm/util/src/log.cpp", diff --git a/libwvdrmengine/cdm/core/include/wv_cdm_types.h b/libwvdrmengine/cdm/core/include/wv_cdm_types.h index fa9e15a7..d1111d79 100644 --- a/libwvdrmengine/cdm/core/include/wv_cdm_types.h +++ b/libwvdrmengine/cdm/core/include/wv_cdm_types.h @@ -844,6 +844,7 @@ const char* CdmClientTokenTypeToString(CdmClientTokenType type); const char* CdmLicenseTypeToString(CdmLicenseType license_type); const char* CdmOfflineLicenseStateToString( CdmOfflineLicenseState license_state); +const std::string CdmResponseTypeToString(int cdm_response_type); const char* CdmSecurityLevelToString(CdmSecurityLevel security_level); const char* CdmUsageEntryStorageTypeToString(CdmUsageEntryStorageType type); const char* RequestedSecurityLevelToString( diff --git a/libwvdrmengine/cdm/core/src/wv_cdm_types.cpp b/libwvdrmengine/cdm/core/src/wv_cdm_types.cpp index 3ba2d4b4..ccf57b36 100644 --- a/libwvdrmengine/cdm/core/src/wv_cdm_types.cpp +++ b/libwvdrmengine/cdm/core/src/wv_cdm_types.cpp @@ -143,6 +143,670 @@ const char* CdmProductionReadinessToString(CdmProductionReadiness readiness) { return UnknownValueRep(readiness); } +const std::string CdmResponseTypeToString(int cdm_response_type) { + switch (cdm_response_type) { + case wvcdm::NO_ERROR: + return "NO_ERROR"; + case wvcdm::UNKNOWN_ERROR: + return "UNKNOWN_ERROR"; + // Remaining codes are order alphabetically. + case wvcdm::ADD_KEY_ERROR: + return "ADD_KEY_ERROR"; + case wvcdm::ANALOG_OUTPUT_ERROR: + return "ANALOG_OUTPUT_ERROR"; + case wvcdm::CANNOT_DECRYPT_ZERO_SAMPLES: + return "CANNOT_DECRYPT_ZERO_SAMPLES"; + case wvcdm::CANNOT_DECRYPT_ZERO_SUBSAMPLES: + return "CANNOT_DECRYPT_ZERO_SUBSAMPLES"; + case wvcdm::CENC_INIT_DATA_UNAVAILABLE: + return "CENC_INIT_DATA_UNAVAILABLE"; + case wvcdm::CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE: + return "CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE"; + case wvcdm::CERT_PROVISIONING_GET_KEYBOX_ERROR_1: + return "CERT_PROVISIONING_GET_KEYBOX_ERROR_1"; + case wvcdm::CERT_PROVISIONING_INVALID_CERT_TYPE: + return "CERT_PROVISIONING_INVALID_CERT_TYPE"; + case wvcdm::CERT_PROVISIONING_NONCE_GENERATION_ERROR: + return "CERT_PROVISIONING_NONCE_GENERATION_ERROR"; + case wvcdm::CERT_PROVISIONING_REQUEST_ERROR_1: + return "CERT_PROVISIONING_REQUEST_ERROR_1"; + case wvcdm::CERT_PROVISIONING_REQUEST_ERROR_4: + return "CERT_PROVISIONING_REQUEST_ERROR_4"; + case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_1: + return "CERT_PROVISIONING_RESPONSE_ERROR_1"; + case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_2: + return "CERT_PROVISIONING_RESPONSE_ERROR_2"; + case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_3: + return "CERT_PROVISIONING_RESPONSE_ERROR_3"; + case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_4: + return "CERT_PROVISIONING_RESPONSE_ERROR_4"; + case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_7: + return "CERT_PROVISIONING_RESPONSE_ERROR_7"; + case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_8: + return "CERT_PROVISIONING_RESPONSE_ERROR_8"; + case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_9: + return "CERT_PROVISIONING_RESPONSE_ERROR_9"; + case wvcdm::CERT_PROVISIONING_RESPONSE_ERROR_10: + return "CERT_PROVISIONING_RESPONSE_ERROR_10"; + case wvcdm::CLIENT_ID_AES_ENCRYPT_ERROR: + return "CLIENT_ID_AES_ENCRYPT_ERROR"; + case wvcdm::CLIENT_ID_AES_INIT_ERROR: + return "CLIENT_ID_AES_INIT_ERROR"; + case wvcdm::CLIENT_IDENTIFICATION_TOKEN_ERROR_1: + return "CLIENT_IDENTIFICATION_TOKEN_ERROR_1"; + case wvcdm::CLIENT_ID_GENERATE_RANDOM_ERROR: + return "CLIENT_ID_GENERATE_RANDOM_ERROR"; + case wvcdm::CLIENT_ID_RSA_ENCRYPT_ERROR: + return "CLIENT_ID_RSA_ENCRYPT_ERROR"; + case wvcdm::CLIENT_ID_RSA_INIT_ERROR: + return "CLIENT_ID_RSA_INIT_ERROR"; + case wvcdm::CLIENT_TOKEN_NOT_SET: + return "CLIENT_TOKEN_NOT_SET"; + case wvcdm::COPY_OLD_USAGE_ENTRY_UNKNOWN_ERROR: + return "COPY_OLD_USAGE_ENTRY_UNKNOWN_ERROR"; + case wvcdm::CORE_MESSAGE_NOT_FOUND: + return "CORE_MESSAGE_NOT_FOUND"; + case wvcdm::CREATE_USAGE_ENTRY_UNKNOWN_ERROR: + return "CREATE_USAGE_ENTRY_UNKNOWN_ERROR"; + case wvcdm::CREATE_USAGE_TABLE_ERROR: + return "CREATE_USAGE_TABLE_ERROR"; + case wvcdm::CRYPTO_SESSION_NOT_INITIALIZED: + return "CRYPTO_SESSION_NOT_INITIALIZED"; + case wvcdm::CRYPTO_SESSION_NOT_OPEN: + return "CRYPTO_SESSION_NOT_OPEN"; + case wvcdm::DEACTIVATE_USAGE_ENTRY_ERROR: + return "DEACTIVATE_USAGE_ENTRY_ERROR"; + case wvcdm::DECRYPT_ERROR: + return "DECRYPT_ERROR"; + case wvcdm::DECRYPT_NOT_READY: + return "DECRYPT_NOT_READY"; + case wvcdm::DELETE_USAGE_ERROR_1: + return "DELETE_USAGE_ERROR_1"; + case wvcdm::DELETE_USAGE_ERROR_2: + return "DELETE_USAGE_ERROR_2"; + case wvcdm::DELETE_USAGE_ERROR_3: + return "DELETE_USAGE_ERROR_3"; + case wvcdm::DEVICE_CANNOT_REPROVISION: + return "DEVICE_CANNOT_REPROVISION"; + case wvcdm::DEVICE_CERTIFICATE_ERROR_1: + return "DEVICE_CERTIFICATE_ERROR_1"; + case wvcdm::DEVICE_CERTIFICATE_ERROR_2: + return "DEVICE_CERTIFICATE_ERROR_2"; + case wvcdm::DEVICE_CERTIFICATE_ERROR_3: + return "DEVICE_CERTIFICATE_ERROR_3"; + case wvcdm::DEVICE_CERTIFICATE_ERROR_4: + return "DEVICE_CERTIFICATE_ERROR_4"; + case wvcdm::DEVICE_REVOKED: + return "DEVICE_REVOKED"; + case wvcdm::DUPLICATE_SESSION_ID_SPECIFIED: + return "DUPLICATE_SESSION_ID_SPECIFIED"; + case wvcdm::EMPTY_KEY_DATA_1: + return "EMPTY_KEY_DATA_1"; + case wvcdm::EMPTY_KEY_DATA_2: + return "EMPTY_KEY_DATA_2"; + case wvcdm::EMPTY_KEYSET_ID: + return "EMPTY_KEYSET_ID"; + case wvcdm::EMPTY_KEYSET_ID_ENG_1: + return "EMPTY_KEYSET_ID_ENG_1"; + case wvcdm::EMPTY_KEYSET_ID_ENG_2: + return "EMPTY_KEYSET_ID_ENG_2"; + case wvcdm::EMPTY_KEYSET_ID_ENG_3: + return "EMPTY_KEYSET_ID_ENG_3"; + case wvcdm::EMPTY_KEYSET_ID_ENG_4: + return "EMPTY_KEYSET_ID_ENG_4"; + case wvcdm::EMPTY_LICENSE_RENEWAL: + return "EMPTY_LICENSE_RENEWAL"; + case wvcdm::EMPTY_LICENSE_REQUEST: + return "EMPTY_LICENSE_REQUEST"; + case wvcdm::EMPTY_LICENSE_REQUEST_2: + return "EMPTY_LICENSE_REQUEST_2"; + case wvcdm::EMPTY_LICENSE_REQUEST_3: + return "EMPTY_LICENSE_REQUEST_3"; + case wvcdm::EMPTY_LICENSE_RESPONSE_1: + return "EMPTY_LICENSE_RESPONSE_1"; + case wvcdm::EMPTY_LICENSE_RESPONSE_2: + return "EMPTY_LICENSE_RESPONSE_2"; + case wvcdm::EMPTY_LICENSE_RESPONSE_3: + return "EMPTY_LICENSE_RESPONSE_3"; + case wvcdm::EMPTY_LICENSE_RESPONSE_4: + return "EMPTY_LICENSE_RESPONSE_4"; + case wvcdm::EMPTY_PROVISIONING_CERTIFICATE_1: + return "EMPTY_PROVISIONING_CERTIFICATE_1"; + case wvcdm::EMPTY_PROVISIONING_CERTIFICATE_2: + return "EMPTY_PROVISIONING_CERTIFICATE_2"; + case wvcdm::EMPTY_PROVISIONING_RESPONSE: + return "EMPTY_PROVISIONING_RESPONSE"; + case wvcdm::EMPTY_RESPONSE_ERROR_1: + return "EMPTY_RESPONSE_ERROR_1"; + case wvcdm::EMPTY_SESSION_ID: + return "EMPTY_SESSION_ID"; + case wvcdm::EXTRACT_SYSTEM_ID_FROM_OEM_CERT_ERROR: + return "EXTRACT_SYSTEM_ID_FROM_OEM_CERT_ERROR"; + case wvcdm::GENERATE_DERIVED_KEYS_ERROR: + return "GENERATE_DERIVED_KEYS_ERROR"; + case wvcdm::GENERATE_DERIVED_KEYS_ERROR_2: + return "GENERATE_DERIVED_KEYS_ERROR_2"; + case wvcdm::GENERATE_SIGNATURE_ERROR: + return "GENERATE_SIGNATURE_ERROR"; + case wvcdm::GENERATE_USAGE_REPORT_ERROR: + return "GENERATE_USAGE_REPORT_ERROR"; + case wvcdm::GET_DECRYPT_HASH_ERROR: + return "GET_DECRYPT_HASH_ERROR"; + case wvcdm::GET_DEVICE_ID_ERROR: + return "GET_DEVICE_ID_ERROR"; + case wvcdm::GET_HDCP_CAPABILITY_FAILED: + return "GET_HDCP_CAPABILITY_FAILED"; + case wvcdm::GET_LICENSE_ERROR: + return "GET_LICENSE_ERROR"; + case wvcdm::GET_MAX_NUMBER_OF_OPEN_SESSIONS_ERROR: + return "GET_MAX_NUMBER_OF_OPEN_SESSIONS_ERROR"; + case wvcdm::GET_NUMBER_OF_OPEN_SESSIONS_ERROR: + return "GET_NUMBER_OF_OPEN_SESSIONS_ERROR"; + case wvcdm::GET_OFFLINE_LICENSE_STATE_ERROR_1: + return "GET_OFFLINE_LICENSE_STATE_ERROR_1"; + case wvcdm::GET_OFFLINE_LICENSE_STATE_ERROR_2: + return "GET_OFFLINE_LICENSE_STATE_ERROR_2"; + case wvcdm::GET_PROVISIONING_METHOD_ERROR: + return "GET_PROVISIONING_METHOD_ERROR"; + case wvcdm::GET_RELEASED_LICENSE_ERROR: + return "GET_RELEASED_LICENSE_ERROR"; + case wvcdm::GET_SRM_VERSION_ERROR: + return "GET_SRM_VERSION_ERROR"; + case wvcdm::GET_TOKEN_FROM_KEYBOX_ERROR: + return "GET_TOKEN_FROM_KEYBOX_ERROR"; + case wvcdm::GET_TOKEN_FROM_OEM_CERT_ERROR: + return "GET_TOKEN_FROM_OEM_CERT_ERROR"; + case wvcdm::GET_USAGE_INFO_ERROR_1: + return "GET_USAGE_INFO_ERROR_1"; + case wvcdm::GET_USAGE_INFO_ERROR_2: + return "GET_USAGE_INFO_ERROR_2"; + case wvcdm::GET_USAGE_INFO_ERROR_3: + return "GET_USAGE_INFO_ERROR_3"; + case wvcdm::GET_USAGE_INFO_ERROR_4: + return "GET_USAGE_INFO_ERROR_4"; + case wvcdm::INCORRECT_CRYPTO_MODE: + return "INCORRECT_CRYPTO_MODE"; + case wvcdm::INCORRECT_USAGE_SUPPORT_TYPE_1: + return "INCORRECT_USAGE_SUPPORT_TYPE_1"; + case wvcdm::INCORRECT_USAGE_SUPPORT_TYPE_2: + return "INCORRECT_USAGE_SUPPORT_TYPE_2"; + case wvcdm::INIT_DATA_NOT_FOUND: + return "INIT_DATA_NOT_FOUND"; + case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES: + return "INSUFFICIENT_CRYPTO_RESOURCES"; + case wvcdm::INSUFFICIENT_OUTPUT_PROTECTION: + return "INSUFFICIENT_OUTPUT_PROTECTION"; + case wvcdm::INVALID_DECRYPT_HASH_FORMAT: + return "INVALID_DECRYPT_HASH_FORMAT"; + case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_1: + return "INVALID_DECRYPT_PARAMETERS_ENG_1"; + case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_2: + return "INVALID_DECRYPT_PARAMETERS_ENG_2"; + case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_3: + return "INVALID_DECRYPT_PARAMETERS_ENG_3"; + case wvcdm::INVALID_DECRYPT_PARAMETERS_ENG_4: + return "INVALID_DECRYPT_PARAMETERS_ENG_4"; + case wvcdm::INVALID_DEVICE_CERTIFICATE_TYPE: + return "INVALID_DEVICE_CERTIFICATE_TYPE"; + case wvcdm::INVALID_IV_SIZE: + return "INVALID_IV_SIZE"; + case wvcdm::INVALID_KEY_SYSTEM: + return "INVALID_KEY_SYSTEM"; + case wvcdm::INVALID_LICENSE_REQUEST_TYPE_1: + return "INVALID_LICENSE_REQUEST_TYPE_1"; + case wvcdm::INVALID_LICENSE_REQUEST_TYPE_2: + return "INVALID_LICENSE_REQUEST_TYPE_2"; + case wvcdm::INVALID_LICENSE_RESPONSE: + return "INVALID_LICENSE_RESPONSE"; + case wvcdm::INVALID_LICENSE_TYPE: + return "INVALID_LICENSE_TYPE"; + case wvcdm::INVALID_LICENSE_TYPE_2: + return "INVALID_LICENSE_TYPE_2"; + case wvcdm::INVALID_PARAMETERS_ENG_5: + return "INVALID_PARAMETERS_ENG_5"; + case wvcdm::INVALID_PARAMETERS_ENG_13: + return "INVALID_PARAMETERS_ENG_13"; + case wvcdm::INVALID_PARAMETERS_ENG_14: + return "INVALID_PARAMETERS_ENG_14"; + case wvcdm::INVALID_PARAMETERS_ENG_15: + return "INVALID_PARAMETERS_ENG_15"; + case wvcdm::INVALID_PARAMETERS_ENG_16: + return "INVALID_PARAMETERS_ENG_16"; + case wvcdm::INVALID_PARAMETERS_ENG_22: + return "INVALID_PARAMETERS_ENG_22"; + case wvcdm::INVALID_PARAMETERS_ENG_23: + return "INVALID_PARAMETERS_ENG_23"; + case wvcdm::INVALID_PARAMETERS_ENG_24: + return "INVALID_PARAMETERS_ENG_24"; + case wvcdm::INVALID_PARAMETERS_LIC_1: + return "INVALID_PARAMETERS_LIC_1"; + case wvcdm::INVALID_PARAMETERS_LIC_2: + return "INVALID_PARAMETERS_LIC_2"; + case wvcdm::INVALID_PARAMETERS_LIC_3: + return "INVALID_PARAMETERS_LIC_3"; + case wvcdm::INVALID_PARAMETERS_LIC_4: + return "INVALID_PARAMETERS_LIC_4"; + case wvcdm::INVALID_PARAMETERS_LIC_6: + return "INVALID_PARAMETERS_LIC_6"; + case wvcdm::INVALID_PARAMETERS_LIC_7: + return "INVALID_PARAMETERS_LIC_7"; + case wvcdm::INVALID_PROVISIONING_PARAMETERS_1: + return "INVALID_PROVISIONING_PARAMETERS_1"; + case wvcdm::INVALID_PROVISIONING_PARAMETERS_2: + return "INVALID_PROVISIONING_PARAMETERS_2"; + case wvcdm::INVALID_PROVISIONING_REQUEST_PARAM_1: + return "INVALID_PROVISIONING_REQUEST_PARAM_1"; + case wvcdm::INVALID_PROVISIONING_REQUEST_PARAM_2: + return "INVALID_PROVISIONING_REQUEST_PARAM_2"; + case wvcdm::INVALID_QUERY_KEY: + return "INVALID_QUERY_KEY"; + case wvcdm::INVALID_SESSION_1: + return "INVALID_SESSION_1"; + case wvcdm::INVALID_SESSION_2: + return "INVALID_SESSION_2"; + case wvcdm::INVALID_SESSION_ID: + return "INVALID_SESSION_ID"; + case wvcdm::INVALID_SRM_LIST: + return "INVALID_SRM_LIST"; + case wvcdm::INVALID_USAGE_ENTRY_NUMBER_MODIFICATION: + return "INVALID_USAGE_ENTRY_NUMBER_MODIFICATION"; + case wvcdm::KEY_ADDED: + return "KEY_ADDED"; + case wvcdm::KEYBOX_TOKEN_TOO_SHORT: + return "KEYBOX_TOKEN_TOO_SHORT"; + case wvcdm::KEY_CANCELED: + return "KEY_CANCELED"; + case wvcdm::KEY_CONFLICT_1: + return "KEY_CONFLICT_1"; + case wvcdm::KEY_ERROR: + return "KEY_ERROR"; + case wvcdm::KEY_MESSAGE: + return "KEY_MESSAGE"; + case wvcdm::KEY_NOT_FOUND_1: + return "KEY_NOT_FOUND_1"; + case wvcdm::KEY_NOT_FOUND_2: + return "KEY_NOT_FOUND_2"; + case wvcdm::KEY_NOT_FOUND_3: + return "KEY_NOT_FOUND_3"; + case wvcdm::KEY_NOT_FOUND_4: + return "KEY_NOT_FOUND_4"; + case wvcdm::KEY_NOT_FOUND_5: + return "KEY_NOT_FOUND_5"; + case wvcdm::KEY_NOT_FOUND_6: + return "KEY_NOT_FOUND_6"; + case wvcdm::KEY_NOT_FOUND_IN_SESSION: + return "KEY_NOT_FOUND_IN_SESSION"; + case wvcdm::KEY_PROHIBITED_FOR_SECURITY_LEVEL: + return "KEY_PROHIBITED_FOR_SECURITY_LEVEL"; + case wvcdm::KEY_REQUEST_ERROR_1: + return "KEY_REQUEST_ERROR_1"; + case wvcdm::KEYSET_ID_NOT_FOUND_1: + return "KEYSET_ID_NOT_FOUND_1"; + case wvcdm::KEYSET_ID_NOT_FOUND_2: + return "KEYSET_ID_NOT_FOUND_2"; + case wvcdm::KEYSET_ID_NOT_FOUND_3: + return "KEYSET_ID_NOT_FOUND_3"; + case wvcdm::KEYSET_ID_NOT_FOUND_4: + return "KEYSET_ID_NOT_FOUND_4"; + case wvcdm::KEY_SIZE_ERROR_1: + return "KEY_SIZE_ERROR_1"; + case wvcdm::KEY_SIZE_ERROR_2: + return "KEY_SIZE_ERROR_2"; + case wvcdm::LICENSE_ID_NOT_FOUND: + return "LICENSE_ID_NOT_FOUND"; + case wvcdm::LICENSE_PARSER_INIT_ERROR: + return "LICENSE_PARSER_INIT_ERROR"; + case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_1: + return "LICENSE_PARSER_NOT_INITIALIZED_1"; + case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_2: + return "LICENSE_PARSER_NOT_INITIALIZED_2"; + case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_3: + return "LICENSE_PARSER_NOT_INITIALIZED_3"; + case wvcdm::LICENSE_PARSER_NOT_INITIALIZED_4: + return "LICENSE_PARSER_NOT_INITIALIZED_4"; + case wvcdm::LICENSE_RENEWAL_NONCE_GENERATION_ERROR: + return "LICENSE_RENEWAL_NONCE_GENERATION_ERROR"; + case wvcdm::LICENSE_RENEWAL_PROHIBITED: + return "LICENSE_RENEWAL_PROHIBITED"; + case wvcdm::LICENSE_REQUEST_NONCE_GENERATION_ERROR: + return "LICENSE_REQUEST_NONCE_GENERATION_ERROR"; + case wvcdm::LICENSE_RESPONSE_NOT_SIGNED: + return "LICENSE_RESPONSE_NOT_SIGNED"; + case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_1: + return "LICENSE_RESPONSE_PARSE_ERROR_1"; + case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_2: + return "LICENSE_RESPONSE_PARSE_ERROR_2"; + case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_3: + return "LICENSE_RESPONSE_PARSE_ERROR_3"; + case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_4: + return "LICENSE_RESPONSE_PARSE_ERROR_4"; + case wvcdm::LICENSE_RESPONSE_PARSE_ERROR_5: + return "LICENSE_RESPONSE_PARSE_ERROR_5"; + case wvcdm::LICENSE_USAGE_ENTRY_MISSING: + return "LICENSE_USAGE_ENTRY_MISSING"; + case wvcdm::LIST_LICENSE_ERROR_1: + return "LIST_LICENSE_ERROR_1"; + case wvcdm::LIST_LICENSE_ERROR_2: + return "LIST_LICENSE_ERROR_2"; + case wvcdm::LIST_USAGE_ERROR_1: + return "LIST_USAGE_ERROR_1"; + case wvcdm::LIST_USAGE_ERROR_2: + return "LIST_USAGE_ERROR_2"; + case wvcdm::LOAD_DEVICE_RSA_KEY_ERROR: + return "LOAD_DEVICE_RSA_KEY_ERROR"; + case wvcdm::LOAD_ENTITLED_CONTENT_KEYS_ERROR: + return "LOAD_ENTITLED_CONTENT_KEYS_ERROR"; + case wvcdm::LOAD_KEY_ERROR: + return "LOAD_KEY_ERROR"; + case wvcdm::LOAD_LICENSE_ERROR: + return "LOAD_LICENSE_ERROR"; + case wvcdm::LOAD_PROVISIONING_ERROR: + return "LOAD_PROVISIONING_ERROR"; + case wvcdm::LOAD_RENEWAL_ERROR: + return "LOAD_RENEWAL_ERROR"; + case wvcdm::LOAD_SRM_ERROR: + return "LOAD_SRM_ERROR"; + case wvcdm::LOAD_SYSTEM_ID_ERROR: + return "LOAD_SYSTEM_ID_ERROR"; + case wvcdm::LOAD_USAGE_ENTRY_GENERATION_SKEW: + return "LOAD_USAGE_ENTRY_GENERATION_SKEW"; + case wvcdm::LOAD_USAGE_ENTRY_INVALID_SESSION: + return "LOAD_USAGE_ENTRY_INVALID_SESSION"; + case wvcdm::LOAD_USAGE_ENTRY_SIGNATURE_FAILURE: + return "LOAD_USAGE_ENTRY_SIGNATURE_FAILURE"; + case wvcdm::LOAD_USAGE_ENTRY_UNKNOWN_ERROR: + return "LOAD_USAGE_ENTRY_UNKNOWN_ERROR"; + case wvcdm::LOAD_USAGE_HEADER_BAD_MAGIC: + return "LOAD_USAGE_HEADER_BAD_MAGIC"; + case wvcdm::LOAD_USAGE_HEADER_GENERATION_SKEW: + return "LOAD_USAGE_HEADER_GENERATION_SKEW"; + case wvcdm::LOAD_USAGE_HEADER_SIGNATURE_FAILURE: + return "LOAD_USAGE_HEADER_SIGNATURE_FAILURE"; + case wvcdm::LOAD_USAGE_HEADER_UNKNOWN_ERROR: + return "LOAD_USAGE_HEADER_UNKNOWN_ERROR"; + case wvcdm::MOVE_USAGE_ENTRY_DESTINATION_IN_USE: + return "MOVE_USAGE_ENTRY_DESTINATION_IN_USE"; + case wvcdm::MOVE_USAGE_ENTRY_UNKNOWN_ERROR: + return "MOVE_USAGE_ENTRY_UNKNOWN_ERROR"; + case wvcdm::NEED_KEY: + return "NEED_KEY"; + case wvcdm::NEED_PROVISIONING: + return "NEED_PROVISIONING"; + case wvcdm::NO_CONTENT_KEY: + return "NO_CONTENT_KEY"; + case wvcdm::NO_CONTENT_KEY_2: + return "NO_CONTENT_KEY_2"; + case wvcdm::NO_CONTENT_KEY_3: + return "NO_CONTENT_KEY_3"; + case wvcdm::NO_DEVICE_KEY_1: + return "NO_DEVICE_KEY_1"; + case wvcdm::NO_MATCHING_ENTITLEMENT_KEY: + return "NO_MATCHING_ENTITLEMENT_KEY"; + case wvcdm::NO_SRM_VERSION: + return "NO_SRM_VERSION"; + case wvcdm::NONCE_GENERATION_ERROR: + return "NONCE_GENERATION_ERROR"; + case wvcdm::NOT_AN_ENTITLEMENT_SESSION: + return "NOT_AN_ENTITLEMENT_SESSION"; + case wvcdm::NOT_IMPLEMENTED_ERROR: + return "NOT_IMPLEMENTED_ERROR"; + case wvcdm::NOT_INITIALIZED_ERROR: + return "NOT_INITIALIZED_ERROR"; + case wvcdm::NO_USAGE_ENTRIES: + return "NO_USAGE_ENTRIES"; + case wvcdm::OKP_ALREADY_PROVISIONED: + return "OKP_ALREADY_PROVISIONED"; + case wvcdm::OPEN_CRYPTO_SESSION_ERROR: + return "OPEN_CRYPTO_SESSION_ERROR"; + case wvcdm::OUTPUT_TOO_LARGE_ERROR: + return "OUTPUT_TOO_LARGE_ERROR"; + case wvcdm::PARAMETER_NULL: + return "PARAMETER_NULL"; + case wvcdm::PARSE_OKP_RESPONSE_ERROR: + return "PARSE_OKP_RESPONSE_ERROR"; + case wvcdm::PARSE_REQUEST_ERROR_1: + return "PARSE_REQUEST_ERROR_1"; + case wvcdm::PARSE_REQUEST_ERROR_2: + return "PARSE_REQUEST_ERROR_2"; + case wvcdm::PARSE_RESPONSE_ERROR_1: + return "PARSE_RESPONSE_ERROR_1"; + case wvcdm::PARSE_RESPONSE_ERROR_2: + return "PARSE_RESPONSE_ERROR_2"; + case wvcdm::PARSE_RESPONSE_ERROR_3: + return "PARSE_RESPONSE_ERROR_3"; + case wvcdm::PARSE_RESPONSE_ERROR_4: + return "PARSE_RESPONSE_ERROR_4"; + case wvcdm::PARSE_SERVICE_CERTIFICATE_ERROR: + return "PARSE_SERVICE_CERTIFICATE_ERROR"; + case wvcdm::PREPARE_CENC_CONTENT_ID_FAILED: + return "PREPARE_CENC_CONTENT_ID_FAILED"; + case wvcdm::PREPARE_WEBM_CONTENT_ID_FAILED: + return "PREPARE_WEBM_CONTENT_ID_FAILED"; + case wvcdm::PRIVACY_MODE_ERROR_1: + return "PRIVACY_MODE_ERROR_1"; + case wvcdm::PRIVACY_MODE_ERROR_2: + return "PRIVACY_MODE_ERROR_2"; + case wvcdm::PRIVACY_MODE_ERROR_3: + return "PRIVACY_MODE_ERROR_3"; + case wvcdm::RANDOM_GENERATION_ERROR: + return "RANDOM_GENERATION_ERROR"; + case wvcdm::REFRESH_KEYS_ERROR: + return "REFRESH_KEYS_ERROR"; + case wvcdm::REINIT_ERROR: + return "REINIT_ERROR"; + case wvcdm::RELEASE_KEY_ERROR: + return "RELEASE_KEY_ERROR"; + case wvcdm::RELEASE_KEY_REQUEST_ERROR: + return "RELEASE_KEY_REQUEST_ERROR"; + case wvcdm::RELEASE_LICENSE_ERROR_1: + return "RELEASE_LICENSE_ERROR_1"; + case wvcdm::RELEASE_LICENSE_ERROR_2: + return "RELEASE_LICENSE_ERROR_2"; + case wvcdm::RELEASE_USAGE_INFO_ERROR: + return "RELEASE_USAGE_INFO_ERROR"; + case wvcdm::RELEASE_USAGE_INFO_FAILED: + return "RELEASE_USAGE_INFO_FAILED"; + case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_1: + return "REMOVE_ALL_USAGE_INFO_ERROR_1"; + case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_2: + return "REMOVE_ALL_USAGE_INFO_ERROR_2"; + case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_5: + return "REMOVE_ALL_USAGE_INFO_ERROR_5"; + case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_6: + return "REMOVE_ALL_USAGE_INFO_ERROR_6"; + case wvcdm::REMOVE_ALL_USAGE_INFO_ERROR_7: + return "REMOVE_ALL_USAGE_INFO_ERROR_7"; + case wvcdm::REMOVE_OFFLINE_LICENSE_ERROR_1: + return "REMOVE_OFFLINE_LICENSE_ERROR_1"; + case wvcdm::REMOVE_OFFLINE_LICENSE_ERROR_2: + return "REMOVE_OFFLINE_LICENSE_ERROR_2"; + case wvcdm::REMOVE_USAGE_INFO_ERROR_1: + return "REMOVE_USAGE_INFO_ERROR_1"; + case wvcdm::REMOVE_USAGE_INFO_ERROR_2: + return "REMOVE_USAGE_INFO_ERROR_2"; + case wvcdm::REMOVE_USAGE_INFO_ERROR_3: + return "REMOVE_USAGE_INFO_ERROR_3"; + case wvcdm::RENEW_KEY_ERROR_1: + return "RENEW_KEY_ERROR_1"; + case wvcdm::RENEW_KEY_ERROR_2: + return "RENEW_KEY_ERROR_2"; + case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_2: + return "RESTORE_OFFLINE_LICENSE_ERROR_2"; + case wvcdm::REWRAP_DEVICE_RSA_KEY_ERROR: + return "REWRAP_DEVICE_RSA_KEY_ERROR"; + case wvcdm::RSA_SIGNATURE_GENERATION_ERROR: + return "RSA_SIGNATURE_GENERATION_ERROR"; + case wvcdm::SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH: + return "SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH"; + case wvcdm::SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY: + return "SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY"; + case wvcdm::SESSION_FILE_HANDLE_INIT_ERROR: + return "SESSION_FILE_HANDLE_INIT_ERROR"; + case wvcdm::SESSION_KEYS_NOT_FOUND: + return "SESSION_KEYS_NOT_FOUND"; + case wvcdm::SESSION_KEYS_NOT_FOUND_2: + return "SESSION_KEYS_NOT_FOUND_2"; + case wvcdm::SESSION_LOST_STATE_ERROR: + return "SESSION_LOST_STATE_ERROR"; + case wvcdm::SESSION_NOT_FOUND_1: + return "SESSION_NOT_FOUND_1"; + case wvcdm::SESSION_NOT_FOUND_2: + return "SESSION_NOT_FOUND_2"; + case wvcdm::SESSION_NOT_FOUND_3: + return "SESSION_NOT_FOUND_3"; + case wvcdm::SESSION_NOT_FOUND_4: + return "SESSION_NOT_FOUND_4"; + case wvcdm::SESSION_NOT_FOUND_5: + return "SESSION_NOT_FOUND_5"; + case wvcdm::SESSION_NOT_FOUND_6: + return "SESSION_NOT_FOUND_6"; + case wvcdm::SESSION_NOT_FOUND_7: + return "SESSION_NOT_FOUND_7"; + case wvcdm::SESSION_NOT_FOUND_8: + return "SESSION_NOT_FOUND_8"; + case wvcdm::SESSION_NOT_FOUND_9: + return "SESSION_NOT_FOUND_9"; + case wvcdm::SESSION_NOT_FOUND_10: + return "SESSION_NOT_FOUND_10"; + case wvcdm::SESSION_NOT_FOUND_12: + return "SESSION_NOT_FOUND_12"; + case wvcdm::SESSION_NOT_FOUND_13: + return "SESSION_NOT_FOUND_13"; + case wvcdm::SESSION_NOT_FOUND_14: + return "SESSION_NOT_FOUND_14"; + case wvcdm::SESSION_NOT_FOUND_15: + return "SESSION_NOT_FOUND_15"; + case wvcdm::SESSION_NOT_FOUND_16: + return "SESSION_NOT_FOUND_16"; + case wvcdm::SESSION_NOT_FOUND_18: + return "SESSION_NOT_FOUND_18"; + case wvcdm::SESSION_NOT_FOUND_19: + return "SESSION_NOT_FOUND_19"; + case wvcdm::SESSION_NOT_FOUND_20: + return "SESSION_NOT_FOUND_20"; + case wvcdm::SESSION_NOT_FOUND_21: + return "SESSION_NOT_FOUND_21"; + case wvcdm::SESSION_NOT_FOUND_22: + return "SESSION_NOT_FOUND_22"; + case wvcdm::SESSION_NOT_FOUND_23: + return "SESSION_NOT_FOUND_23"; + case wvcdm::SESSION_NOT_FOUND_FOR_DECRYPT: + return "SESSION_NOT_FOUND_FOR_DECRYPT"; + case wvcdm::SET_DECRYPT_HASH_ERROR: + return "SET_DECRYPT_HASH_ERROR"; + case wvcdm::SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE: + return "SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE"; + case wvcdm::SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR: + return "SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR"; + case wvcdm::SIGNATURE_NOT_FOUND: + return "SIGNATURE_NOT_FOUND"; + case wvcdm::SIGNATURE_NOT_FOUND_2: + return "SIGNATURE_NOT_FOUND_2"; + case wvcdm::STORE_LICENSE_ERROR_1: + return "STORE_LICENSE_ERROR_1"; + case wvcdm::STORE_LICENSE_ERROR_2: + return "STORE_LICENSE_ERROR_2"; + case wvcdm::STORE_USAGE_INFO_ERROR: + return "STORE_USAGE_INFO_ERROR"; + case wvcdm::SYSTEM_INVALIDATED_ERROR: + return "SYSTEM_INVALIDATED_ERROR"; + case wvcdm::UNEXPECTED_EMPTY_USAGE_ENTRY: + return "UNEXPECTED_EMPTY_USAGE_ENTRY"; + case wvcdm::UNKNOWN_CLIENT_TOKEN_TYPE: + return "UNKNOWN_CLIENT_TOKEN_TYPE"; + case wvcdm::UNKNOWN_SELECT_KEY_ERROR_1: + return "UNKNOWN_SELECT_KEY_ERROR_1"; + case wvcdm::UNKNOWN_SELECT_KEY_ERROR_2: + return "UNKNOWN_SELECT_KEY_ERROR_2"; + case wvcdm::UNPROVISION_ERROR_1: + return "UNPROVISION_ERROR_1"; + case wvcdm::UNPROVISION_ERROR_2: + return "UNPROVISION_ERROR_2"; + case wvcdm::UNPROVISION_ERROR_3: + return "UNPROVISION_ERROR_3"; + case wvcdm::UNPROVISION_ERROR_4: + return "UNPROVISION_ERROR_4"; + case wvcdm::UNSUPPORTED_INIT_DATA: + return "UNSUPPORTED_INIT_DATA"; + case wvcdm::UNSUPPORTED_INIT_DATA_FORMAT: + return "UNSUPPORTED_INIT_DATA_FORMAT"; + case wvcdm::UPDATE_USAGE_ENTRY_UNKNOWN_ERROR: + return "UPDATE_USAGE_ENTRY_UNKNOWN_ERROR"; + case wvcdm::USAGE_ENTRY_NUMBER_MISMATCH: + return "USAGE_ENTRY_NUMBER_MISMATCH"; + case wvcdm::USAGE_ENTRY_ALREADY_LOADED: + return "USAGE_ENTRY_ALREADY_LOADED"; + case wvcdm::USAGE_GET_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE: + return "USAGE_GET_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE"; + case wvcdm::USAGE_GET_ENTRY_RETRIEVE_LICENSE_FAILED: + return "USAGE_GET_ENTRY_RETRIEVE_LICENSE_FAILED"; + case wvcdm::USAGE_GET_ENTRY_RETRIEVE_USAGE_INFO_FAILED: + return "USAGE_GET_ENTRY_RETRIEVE_USAGE_INFO_FAILED"; + case wvcdm::USAGE_INFO_NOT_FOUND: + return "USAGE_INFO_NOT_FOUND"; + case wvcdm::USAGE_INFORMATION_SUPPORT_FAILED: + return "USAGE_INFORMATION_SUPPORT_FAILED"; + case wvcdm::USAGE_INVALID_LOAD_ENTRY: + return "USAGE_INVALID_LOAD_ENTRY"; + case wvcdm::USAGE_INVALID_NEW_ENTRY: + return "USAGE_INVALID_NEW_ENTRY"; + case wvcdm::USAGE_INVALID_PARAMETERS_1: + return "USAGE_INVALID_PARAMETERS_1"; + case wvcdm::USAGE_INVALID_PARAMETERS_2: + return "USAGE_INVALID_PARAMETERS_2"; + case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE: + return "USAGE_STORE_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE"; + case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_LICENSE_FAILED: + return "USAGE_STORE_ENTRY_RETRIEVE_LICENSE_FAILED"; + case wvcdm::USAGE_STORE_ENTRY_RETRIEVE_USAGE_INFO_FAILED: + return "USAGE_STORE_ENTRY_RETRIEVE_USAGE_INFO_FAILED"; + case wvcdm::USAGE_STORE_LICENSE_FAILED: + return "USAGE_STORE_LICENSE_FAILED"; + case wvcdm::USAGE_STORE_USAGE_INFO_FAILED: + return "USAGE_STORE_USAGE_INFO_FAILED"; + case wvcdm::USAGE_SUPPORT_GET_API_FAILED: + return "USAGE_SUPPORT_GET_API_FAILED"; + case wvcdm::WEBM_INIT_DATA_UNAVAILABLE: + return "WEBM_INIT_DATA_UNAVAILABLE"; + case wvcdm::PROVISIONING_NOT_ALLOWED_FOR_ATSC: + return "PROVISIONING_NOT_ALLOWED_FOR_ATSC"; + case wvcdm::PROVISIONING_TYPE_IS_NOT_BOOT_CERTIFICATE_CHAIN_ERROR: + return "PROVISIONING_TYPE_IS_NOT_BOOT_CERTIFICATE_CHAIN_ERROR"; + case wvcdm::GET_BOOT_CERTIFICATE_CHAIN_ERROR: + return "GET_BOOT_CERTIFICATE_CHAIN_ERROR"; + case wvcdm::GENERATE_CERTIFICATE_KEY_PAIR_ERROR: + return "GENERATE_CERTIFICATE_KEY_PAIR_ERROR"; + case wvcdm::GENERATE_CERTIFICATE_KEY_PAIR_UNKNOWN_TYPE_ERROR: + return "GENERATE_CERTIFICATE_KEY_PAIR_ERROR"; + case wvcdm::LOAD_OEM_CERTIFICATE_PRIVATE_KEY_ERROR: + return "GENERATE_CERTIFICATE_KEY_PAIR_ERROR"; + case wvcdm::PROVISIONING_4_CRYPTO_SESSION_NOT_OPEN: + return "PROVISIONING_4_CRYPTO_SESSION_NOT_OPEN"; + case wvcdm::PROVISIONING_4_FILE_SYSTEM_IS_NULL: + return "PROVISIONING_4_FILE_SYSTEM_IS_NULL"; + case wvcdm::PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES: + return "PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES"; + case wvcdm::PROVISIONING_4_RESPONSE_FAILED_TO_PARSE_MESSAGE: + return "PROVISIONING_4_RESPONSE_FAILED_TO_PARSE_MESSAGE"; + case wvcdm::PROVISIONING_4_RESPONSE_HAS_ERROR_STATUS: + return "PROVISIONING_4_RESPONSE_HAS_ERROR_STATUS"; + case wvcdm::PROVISIONING_4_RESPONSE_HAS_NO_CERTIFICATE: + return "PROVISIONING_4_RESPONSE_HAS_NO_CERTIFICATE"; + case wvcdm::PROVISIONING_4_NO_PRIVATE_KEY: + return "PROVISIONING_4_NO_PRIVATE_KEY"; + case wvcdm::PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_2: + return "PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_2"; + case wvcdm::PROVISIONING_4_FAILED_TO_STORE_OEM_CERTIFICATE: + return "PROVISIONING_4_FAILED_TO_STORE_OEM_CERTIFICATE"; + case wvcdm::PROVISIONING_4_FAILED_TO_STORE_DRM_CERTIFICATE: + return "PROVISIONING_4_FAILED_TO_STORE_DRM_CERTIFICATE"; + case wvcdm::PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_3: + return "PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_3"; + default: + return "Invalid Cdm error."; + } +} + const char* UnknownEnumValueToString(int value) { snprintf(tl_unknown_rep_buf, sizeof(tl_unknown_rep_buf), "", value); diff --git a/libwvdrmengine/cdm/core/test/test_printers.cpp b/libwvdrmengine/cdm/core/test/test_printers.cpp index 1386bc06..9a71f74b 100644 --- a/libwvdrmengine/cdm/core/test/test_printers.cpp +++ b/libwvdrmengine/cdm/core/test/test_printers.cpp @@ -6,998 +6,11 @@ #include "test_printers.h" +#include "error_string_util.h" + namespace wvcdm { void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) { - switch (value) { - case NO_ERROR: - *os << "NO_ERROR"; - break; - case UNKNOWN_ERROR: - *os << "UNKNOWN_ERROR"; - break; - // Remaining codes are order alphabetically. - case ADD_KEY_ERROR: - *os << "ADD_KEY_ERROR"; - break; - case ANALOG_OUTPUT_ERROR: - *os << "ANALOG_OUTPUT_ERROR"; - break; - case CANNOT_DECRYPT_ZERO_SAMPLES: - *os << "CANNOT_DECRYPT_ZERO_SAMPLES"; - break; - case CANNOT_DECRYPT_ZERO_SUBSAMPLES: - *os << "CANNOT_DECRYPT_ZERO_SUBSAMPLES"; - break; - case CENC_INIT_DATA_UNAVAILABLE: - *os << "CENC_INIT_DATA_UNAVAILABLE"; - break; - case CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE: - *os << "CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE"; - break; - case CERT_PROVISIONING_GET_KEYBOX_ERROR_1: - *os << "CERT_PROVISIONING_GET_KEYBOX_ERROR_1"; - break; - case CERT_PROVISIONING_INVALID_CERT_TYPE: - *os << "CERT_PROVISIONING_INVALID_CERT_TYPE"; - break; - case CERT_PROVISIONING_NONCE_GENERATION_ERROR: - *os << "CERT_PROVISIONING_NONCE_GENERATION_ERROR"; - break; - case CERT_PROVISIONING_REQUEST_ERROR_1: - *os << "CERT_PROVISIONING_REQUEST_ERROR_1"; - break; - case CERT_PROVISIONING_REQUEST_ERROR_4: - *os << "CERT_PROVISIONING_REQUEST_ERROR_4"; - break; - case CERT_PROVISIONING_RESPONSE_ERROR_1: - *os << "CERT_PROVISIONING_RESPONSE_ERROR_1"; - break; - case CERT_PROVISIONING_RESPONSE_ERROR_2: - *os << "CERT_PROVISIONING_RESPONSE_ERROR_2"; - break; - case CERT_PROVISIONING_RESPONSE_ERROR_3: - *os << "CERT_PROVISIONING_RESPONSE_ERROR_3"; - break; - case CERT_PROVISIONING_RESPONSE_ERROR_4: - *os << "CERT_PROVISIONING_RESPONSE_ERROR_4"; - break; - case CERT_PROVISIONING_RESPONSE_ERROR_7: - *os << "CERT_PROVISIONING_RESPONSE_ERROR_7"; - break; - case CERT_PROVISIONING_RESPONSE_ERROR_8: - *os << "CERT_PROVISIONING_RESPONSE_ERROR_8"; - break; - case CERT_PROVISIONING_RESPONSE_ERROR_9: - *os << "CERT_PROVISIONING_RESPONSE_ERROR_9"; - break; - case CERT_PROVISIONING_RESPONSE_ERROR_10: - *os << "CERT_PROVISIONING_RESPONSE_ERROR_10"; - break; - case CLIENT_ID_AES_ENCRYPT_ERROR: - *os << "CLIENT_ID_AES_ENCRYPT_ERROR"; - break; - case CLIENT_ID_AES_INIT_ERROR: - *os << "CLIENT_ID_AES_INIT_ERROR"; - break; - case CLIENT_IDENTIFICATION_TOKEN_ERROR_1: - *os << "CLIENT_IDENTIFICATION_TOKEN_ERROR_1"; - break; - case CLIENT_ID_GENERATE_RANDOM_ERROR: - *os << "CLIENT_ID_GENERATE_RANDOM_ERROR"; - break; - case CLIENT_ID_RSA_ENCRYPT_ERROR: - *os << "CLIENT_ID_RSA_ENCRYPT_ERROR"; - break; - case CLIENT_ID_RSA_INIT_ERROR: - *os << "CLIENT_ID_RSA_INIT_ERROR"; - break; - case CLIENT_TOKEN_NOT_SET: - *os << "CLIENT_TOKEN_NOT_SET"; - break; - case COPY_OLD_USAGE_ENTRY_UNKNOWN_ERROR: - *os << "COPY_OLD_USAGE_ENTRY_UNKNOWN_ERROR"; - break; - case CORE_MESSAGE_NOT_FOUND: - *os << "CORE_MESSAGE_NOT_FOUND"; - break; - case CREATE_USAGE_ENTRY_UNKNOWN_ERROR: - *os << "CREATE_USAGE_ENTRY_UNKNOWN_ERROR"; - break; - case CREATE_USAGE_TABLE_ERROR: - *os << "CREATE_USAGE_TABLE_ERROR"; - break; - case CRYPTO_SESSION_NOT_INITIALIZED: - *os << "CRYPTO_SESSION_NOT_INITIALIZED"; - break; - case CRYPTO_SESSION_NOT_OPEN: - *os << "CRYPTO_SESSION_NOT_OPEN"; - break; - case DEACTIVATE_USAGE_ENTRY_ERROR: - *os << "DEACTIVATE_USAGE_ENTRY_ERROR"; - break; - case DECRYPT_ERROR: - *os << "DECRYPT_ERROR"; - break; - case DECRYPT_NOT_READY: - *os << "DECRYPT_NOT_READY"; - break; - case DELETE_USAGE_ERROR_1: - *os << "DELETE_USAGE_ERROR_1"; - break; - case DELETE_USAGE_ERROR_2: - *os << "DELETE_USAGE_ERROR_2"; - break; - case DELETE_USAGE_ERROR_3: - *os << "DELETE_USAGE_ERROR_3"; - break; - case DEVICE_CANNOT_REPROVISION: - *os << "DEVICE_CANNOT_REPROVISION"; - break; - case DEVICE_CERTIFICATE_ERROR_1: - *os << "DEVICE_CERTIFICATE_ERROR_1"; - break; - case DEVICE_CERTIFICATE_ERROR_2: - *os << "DEVICE_CERTIFICATE_ERROR_2"; - break; - case DEVICE_CERTIFICATE_ERROR_3: - *os << "DEVICE_CERTIFICATE_ERROR_3"; - break; - case DEVICE_CERTIFICATE_ERROR_4: - *os << "DEVICE_CERTIFICATE_ERROR_4"; - break; - case DEVICE_REVOKED: - *os << "DEVICE_REVOKED"; - break; - case DUPLICATE_SESSION_ID_SPECIFIED: - *os << "DUPLICATE_SESSION_ID_SPECIFIED"; - break; - case EMPTY_KEY_DATA_1: - *os << "EMPTY_KEY_DATA_1"; - break; - case EMPTY_KEY_DATA_2: - *os << "EMPTY_KEY_DATA_2"; - break; - case EMPTY_KEYSET_ID: - *os << "EMPTY_KEYSET_ID"; - break; - case EMPTY_KEYSET_ID_ENG_1: - *os << "EMPTY_KEYSET_ID_ENG_1"; - break; - case EMPTY_KEYSET_ID_ENG_2: - *os << "EMPTY_KEYSET_ID_ENG_2"; - break; - case EMPTY_KEYSET_ID_ENG_3: - *os << "EMPTY_KEYSET_ID_ENG_3"; - break; - case EMPTY_KEYSET_ID_ENG_4: - *os << "EMPTY_KEYSET_ID_ENG_4"; - break; - case EMPTY_LICENSE_RENEWAL: - *os << "EMPTY_LICENSE_RENEWAL"; - break; - case EMPTY_LICENSE_REQUEST: - *os << "EMPTY_LICENSE_REQUEST"; - break; - case EMPTY_LICENSE_REQUEST_2: - *os << "EMPTY_LICENSE_REQUEST_2"; - break; - case EMPTY_LICENSE_REQUEST_3: - *os << "EMPTY_LICENSE_REQUEST_3"; - break; - case EMPTY_LICENSE_RESPONSE_1: - *os << "EMPTY_LICENSE_RESPONSE_1"; - break; - case EMPTY_LICENSE_RESPONSE_2: - *os << "EMPTY_LICENSE_RESPONSE_2"; - break; - case EMPTY_LICENSE_RESPONSE_3: - *os << "EMPTY_LICENSE_RESPONSE_3"; - break; - case EMPTY_LICENSE_RESPONSE_4: - *os << "EMPTY_LICENSE_RESPONSE_4"; - break; - case EMPTY_PROVISIONING_CERTIFICATE_1: - *os << "EMPTY_PROVISIONING_CERTIFICATE_1"; - break; - case EMPTY_PROVISIONING_CERTIFICATE_2: - *os << "EMPTY_PROVISIONING_CERTIFICATE_2"; - break; - case EMPTY_PROVISIONING_RESPONSE: - *os << "EMPTY_PROVISIONING_RESPONSE"; - break; - case EMPTY_RESPONSE_ERROR_1: - *os << "EMPTY_RESPONSE_ERROR_1"; - break; - case EMPTY_SESSION_ID: - *os << "EMPTY_SESSION_ID"; - break; - case EXTRACT_SYSTEM_ID_FROM_OEM_CERT_ERROR: - *os << "EXTRACT_SYSTEM_ID_FROM_OEM_CERT_ERROR"; - break; - case GENERATE_DERIVED_KEYS_ERROR: - *os << "GENERATE_DERIVED_KEYS_ERROR"; - break; - case GENERATE_DERIVED_KEYS_ERROR_2: - *os << "GENERATE_DERIVED_KEYS_ERROR_2"; - break; - case GENERATE_SIGNATURE_ERROR: - *os << "GENERATE_SIGNATURE_ERROR"; - break; - case GENERATE_USAGE_REPORT_ERROR: - *os << "GENERATE_USAGE_REPORT_ERROR"; - break; - case GET_DECRYPT_HASH_ERROR: - *os << "GET_DECRYPT_HASH_ERROR"; - break; - case GET_DEVICE_ID_ERROR: - *os << "GET_DEVICE_ID_ERROR"; - break; - case GET_HDCP_CAPABILITY_FAILED: - *os << "GET_HDCP_CAPABILITY_FAILED"; - break; - case GET_LICENSE_ERROR: - *os << "GET_LICENSE_ERROR"; - break; - case GET_MAX_NUMBER_OF_OPEN_SESSIONS_ERROR: - *os << "GET_MAX_NUMBER_OF_OPEN_SESSIONS_ERROR"; - break; - case GET_NUMBER_OF_OPEN_SESSIONS_ERROR: - *os << "GET_NUMBER_OF_OPEN_SESSIONS_ERROR"; - break; - case GET_OFFLINE_LICENSE_STATE_ERROR_1: - *os << "GET_OFFLINE_LICENSE_STATE_ERROR_1"; - break; - case GET_OFFLINE_LICENSE_STATE_ERROR_2: - *os << "GET_OFFLINE_LICENSE_STATE_ERROR_2"; - break; - case GET_PROVISIONING_METHOD_ERROR: - *os << "GET_PROVISIONING_METHOD_ERROR"; - break; - case GET_RELEASED_LICENSE_ERROR: - *os << "GET_RELEASED_LICENSE_ERROR"; - break; - case GET_SRM_VERSION_ERROR: - *os << "GET_SRM_VERSION_ERROR"; - break; - case GET_TOKEN_FROM_KEYBOX_ERROR: - *os << "GET_TOKEN_FROM_KEYBOX_ERROR"; - break; - case GET_TOKEN_FROM_OEM_CERT_ERROR: - *os << "GET_TOKEN_FROM_OEM_CERT_ERROR"; - break; - case GET_USAGE_INFO_ERROR_1: - *os << "GET_USAGE_INFO_ERROR_1"; - break; - case GET_USAGE_INFO_ERROR_2: - *os << "GET_USAGE_INFO_ERROR_2"; - break; - case GET_USAGE_INFO_ERROR_3: - *os << "GET_USAGE_INFO_ERROR_3"; - break; - case GET_USAGE_INFO_ERROR_4: - *os << "GET_USAGE_INFO_ERROR_4"; - break; - case INCORRECT_CRYPTO_MODE: - *os << "INCORRECT_CRYPTO_MODE"; - break; - case INCORRECT_USAGE_SUPPORT_TYPE_1: - *os << "INCORRECT_USAGE_SUPPORT_TYPE_1"; - break; - case INCORRECT_USAGE_SUPPORT_TYPE_2: - *os << "INCORRECT_USAGE_SUPPORT_TYPE_2"; - break; - case INIT_DATA_NOT_FOUND: - *os << "INIT_DATA_NOT_FOUND"; - break; - case INSUFFICIENT_CRYPTO_RESOURCES: - *os << "INSUFFICIENT_CRYPTO_RESOURCES"; - break; - case INSUFFICIENT_OUTPUT_PROTECTION: - *os << "INSUFFICIENT_OUTPUT_PROTECTION"; - break; - case INVALID_DECRYPT_HASH_FORMAT: - *os << "INVALID_DECRYPT_HASH_FORMAT"; - break; - case INVALID_DECRYPT_PARAMETERS_ENG_1: - *os << "INVALID_DECRYPT_PARAMETERS_ENG_1"; - break; - case INVALID_DECRYPT_PARAMETERS_ENG_2: - *os << "INVALID_DECRYPT_PARAMETERS_ENG_2"; - break; - case INVALID_DECRYPT_PARAMETERS_ENG_3: - *os << "INVALID_DECRYPT_PARAMETERS_ENG_3"; - break; - case INVALID_DECRYPT_PARAMETERS_ENG_4: - *os << "INVALID_DECRYPT_PARAMETERS_ENG_4"; - break; - case INVALID_DEVICE_CERTIFICATE_TYPE: - *os << "INVALID_DEVICE_CERTIFICATE_TYPE"; - break; - case INVALID_IV_SIZE: - *os << "INVALID_IV_SIZE"; - break; - case INVALID_KEY_SYSTEM: - *os << "INVALID_KEY_SYSTEM"; - break; - case INVALID_LICENSE_REQUEST_TYPE_1: - *os << "INVALID_LICENSE_REQUEST_TYPE_1"; - break; - case INVALID_LICENSE_REQUEST_TYPE_2: - *os << "INVALID_LICENSE_REQUEST_TYPE_2"; - break; - case INVALID_LICENSE_RESPONSE: - *os << "INVALID_LICENSE_RESPONSE"; - break; - case INVALID_LICENSE_TYPE: - *os << "INVALID_LICENSE_TYPE"; - break; - case INVALID_LICENSE_TYPE_2: - *os << "INVALID_LICENSE_TYPE_2"; - break; - case INVALID_PARAMETERS_ENG_5: - *os << "INVALID_PARAMETERS_ENG_5"; - break; - case INVALID_PARAMETERS_ENG_13: - *os << "INVALID_PARAMETERS_ENG_13"; - break; - case INVALID_PARAMETERS_ENG_14: - *os << "INVALID_PARAMETERS_ENG_14"; - break; - case INVALID_PARAMETERS_ENG_15: - *os << "INVALID_PARAMETERS_ENG_15"; - break; - case INVALID_PARAMETERS_ENG_16: - *os << "INVALID_PARAMETERS_ENG_16"; - break; - case INVALID_PARAMETERS_ENG_22: - *os << "INVALID_PARAMETERS_ENG_22"; - break; - case INVALID_PARAMETERS_ENG_23: - *os << "INVALID_PARAMETERS_ENG_23"; - break; - case INVALID_PARAMETERS_ENG_24: - *os << "INVALID_PARAMETERS_ENG_24"; - break; - case INVALID_PARAMETERS_LIC_1: - *os << "INVALID_PARAMETERS_LIC_1"; - break; - case INVALID_PARAMETERS_LIC_2: - *os << "INVALID_PARAMETERS_LIC_2"; - break; - case INVALID_PARAMETERS_LIC_3: - *os << "INVALID_PARAMETERS_LIC_3"; - break; - case INVALID_PARAMETERS_LIC_4: - *os << "INVALID_PARAMETERS_LIC_4"; - break; - case INVALID_PARAMETERS_LIC_6: - *os << "INVALID_PARAMETERS_LIC_6"; - break; - case INVALID_PARAMETERS_LIC_7: - *os << "INVALID_PARAMETERS_LIC_7"; - break; - case INVALID_PROVISIONING_PARAMETERS_1: - *os << "INVALID_PROVISIONING_PARAMETERS_1"; - break; - case INVALID_PROVISIONING_PARAMETERS_2: - *os << "INVALID_PROVISIONING_PARAMETERS_2"; - break; - case INVALID_PROVISIONING_REQUEST_PARAM_1: - *os << "INVALID_PROVISIONING_REQUEST_PARAM_1"; - break; - case INVALID_PROVISIONING_REQUEST_PARAM_2: - *os << "INVALID_PROVISIONING_REQUEST_PARAM_2"; - break; - case INVALID_QUERY_KEY: - *os << "INVALID_QUERY_KEY"; - break; - case INVALID_SESSION_1: - *os << "INVALID_SESSION_1"; - break; - case INVALID_SESSION_2: - *os << "INVALID_SESSION_2"; - break; - case INVALID_SESSION_ID: - *os << "INVALID_SESSION_ID"; - break; - case INVALID_SRM_LIST: - *os << "INVALID_SRM_LIST"; - break; - case INVALID_USAGE_ENTRY_NUMBER_MODIFICATION: - *os << "INVALID_USAGE_ENTRY_NUMBER_MODIFICATION"; - break; - case KEY_ADDED: - *os << "KEY_ADDED"; - break; - case KEYBOX_TOKEN_TOO_SHORT: - *os << "KEYBOX_TOKEN_TOO_SHORT"; - break; - case KEY_CANCELED: - *os << "KEY_CANCELED"; - break; - case KEY_CONFLICT_1: - *os << "KEY_CONFLICT_1"; - break; - case KEY_ERROR: - *os << "KEY_ERROR"; - break; - case KEY_MESSAGE: - *os << "KEY_MESSAGE"; - break; - case KEY_NOT_FOUND_1: - *os << "KEY_NOT_FOUND_1"; - break; - case KEY_NOT_FOUND_2: - *os << "KEY_NOT_FOUND_2"; - break; - case KEY_NOT_FOUND_3: - *os << "KEY_NOT_FOUND_3"; - break; - case KEY_NOT_FOUND_4: - *os << "KEY_NOT_FOUND_4"; - break; - case KEY_NOT_FOUND_5: - *os << "KEY_NOT_FOUND_5"; - break; - case KEY_NOT_FOUND_6: - *os << "KEY_NOT_FOUND_6"; - break; - case KEY_NOT_FOUND_IN_SESSION: - *os << "KEY_NOT_FOUND_IN_SESSION"; - break; - case KEY_PROHIBITED_FOR_SECURITY_LEVEL: - *os << "KEY_PROHIBITED_FOR_SECURITY_LEVEL"; - break; - case KEY_REQUEST_ERROR_1: - *os << "KEY_REQUEST_ERROR_1"; - break; - case KEYSET_ID_NOT_FOUND_1: - *os << "KEYSET_ID_NOT_FOUND_1"; - break; - case KEYSET_ID_NOT_FOUND_2: - *os << "KEYSET_ID_NOT_FOUND_2"; - break; - case KEYSET_ID_NOT_FOUND_3: - *os << "KEYSET_ID_NOT_FOUND_3"; - break; - case KEYSET_ID_NOT_FOUND_4: - *os << "KEYSET_ID_NOT_FOUND_4"; - break; - case KEY_SIZE_ERROR_1: - *os << "KEY_SIZE_ERROR_1"; - break; - case KEY_SIZE_ERROR_2: - *os << "KEY_SIZE_ERROR_2"; - break; - case LICENSE_ID_NOT_FOUND: - *os << "LICENSE_ID_NOT_FOUND"; - break; - case LICENSE_PARSER_INIT_ERROR: - *os << "LICENSE_PARSER_INIT_ERROR"; - break; - case LICENSE_PARSER_NOT_INITIALIZED_1: - *os << "LICENSE_PARSER_NOT_INITIALIZED_1"; - break; - case LICENSE_PARSER_NOT_INITIALIZED_2: - *os << "LICENSE_PARSER_NOT_INITIALIZED_2"; - break; - case LICENSE_PARSER_NOT_INITIALIZED_3: - *os << "LICENSE_PARSER_NOT_INITIALIZED_3"; - break; - case LICENSE_PARSER_NOT_INITIALIZED_4: - *os << "LICENSE_PARSER_NOT_INITIALIZED_4"; - break; - case LICENSE_RENEWAL_NONCE_GENERATION_ERROR: - *os << "LICENSE_RENEWAL_NONCE_GENERATION_ERROR"; - break; - case LICENSE_RENEWAL_PROHIBITED: - *os << "LICENSE_RENEWAL_PROHIBITED"; - break; - case LICENSE_REQUEST_NONCE_GENERATION_ERROR: - *os << "LICENSE_REQUEST_NONCE_GENERATION_ERROR"; - break; - case LICENSE_RESPONSE_NOT_SIGNED: - *os << "LICENSE_RESPONSE_NOT_SIGNED"; - break; - case LICENSE_RESPONSE_PARSE_ERROR_1: - *os << "LICENSE_RESPONSE_PARSE_ERROR_1"; - break; - case LICENSE_RESPONSE_PARSE_ERROR_2: - *os << "LICENSE_RESPONSE_PARSE_ERROR_2"; - break; - case LICENSE_RESPONSE_PARSE_ERROR_3: - *os << "LICENSE_RESPONSE_PARSE_ERROR_3"; - break; - case LICENSE_RESPONSE_PARSE_ERROR_4: - *os << "LICENSE_RESPONSE_PARSE_ERROR_4"; - break; - case LICENSE_RESPONSE_PARSE_ERROR_5: - *os << "LICENSE_RESPONSE_PARSE_ERROR_5"; - break; - case LICENSE_USAGE_ENTRY_MISSING: - *os << "LICENSE_USAGE_ENTRY_MISSING"; - break; - case LIST_LICENSE_ERROR_1: - *os << "LIST_LICENSE_ERROR_1"; - break; - case LIST_LICENSE_ERROR_2: - *os << "LIST_LICENSE_ERROR_2"; - break; - case LIST_USAGE_ERROR_1: - *os << "LIST_USAGE_ERROR_1"; - break; - case LIST_USAGE_ERROR_2: - *os << "LIST_USAGE_ERROR_2"; - break; - case LOAD_DEVICE_RSA_KEY_ERROR: - *os << "LOAD_DEVICE_RSA_KEY_ERROR"; - break; - case LOAD_ENTITLED_CONTENT_KEYS_ERROR: - *os << "LOAD_ENTITLED_CONTENT_KEYS_ERROR"; - break; - case LOAD_KEY_ERROR: - *os << "LOAD_KEY_ERROR"; - break; - case LOAD_LICENSE_ERROR: - *os << "LOAD_LICENSE_ERROR"; - break; - case LOAD_PROVISIONING_ERROR: - *os << "LOAD_PROVISIONING_ERROR"; - break; - case LOAD_RENEWAL_ERROR: - *os << "LOAD_RENEWAL_ERROR"; - break; - case LOAD_SRM_ERROR: - *os << "LOAD_SRM_ERROR"; - break; - case LOAD_SYSTEM_ID_ERROR: - *os << "LOAD_SYSTEM_ID_ERROR"; - break; - case LOAD_USAGE_ENTRY_GENERATION_SKEW: - *os << "LOAD_USAGE_ENTRY_GENERATION_SKEW"; - break; - case LOAD_USAGE_ENTRY_INVALID_SESSION: - *os << "LOAD_USAGE_ENTRY_INVALID_SESSION"; - break; - case LOAD_USAGE_ENTRY_SIGNATURE_FAILURE: - *os << "LOAD_USAGE_ENTRY_SIGNATURE_FAILURE"; - break; - case LOAD_USAGE_ENTRY_UNKNOWN_ERROR: - *os << "LOAD_USAGE_ENTRY_UNKNOWN_ERROR"; - break; - case LOAD_USAGE_HEADER_BAD_MAGIC: - *os << "LOAD_USAGE_HEADER_BAD_MAGIC"; - break; - case LOAD_USAGE_HEADER_GENERATION_SKEW: - *os << "LOAD_USAGE_HEADER_GENERATION_SKEW"; - break; - case LOAD_USAGE_HEADER_SIGNATURE_FAILURE: - *os << "LOAD_USAGE_HEADER_SIGNATURE_FAILURE"; - break; - case LOAD_USAGE_HEADER_UNKNOWN_ERROR: - *os << "LOAD_USAGE_HEADER_UNKNOWN_ERROR"; - break; - case MOVE_USAGE_ENTRY_DESTINATION_IN_USE: - *os << "MOVE_USAGE_ENTRY_DESTINATION_IN_USE"; - break; - case MOVE_USAGE_ENTRY_UNKNOWN_ERROR: - *os << "MOVE_USAGE_ENTRY_UNKNOWN_ERROR"; - break; - case NEED_KEY: - *os << "NEED_KEY"; - break; - case NEED_PROVISIONING: - *os << "NEED_PROVISIONING"; - break; - case NO_CONTENT_KEY: - *os << "NO_CONTENT_KEY"; - break; - case NO_CONTENT_KEY_2: - *os << "NO_CONTENT_KEY_2"; - break; - case NO_CONTENT_KEY_3: - *os << "NO_CONTENT_KEY_3"; - break; - case NO_DEVICE_KEY_1: - *os << "NO_DEVICE_KEY_1"; - break; - case NO_MATCHING_ENTITLEMENT_KEY: - *os << "NO_MATCHING_ENTITLEMENT_KEY"; - break; - case NO_SRM_VERSION: - *os << "NO_SRM_VERSION"; - break; - case NONCE_GENERATION_ERROR: - *os << "NONCE_GENERATION_ERROR"; - break; - case NOT_AN_ENTITLEMENT_SESSION: - *os << "NOT_AN_ENTITLEMENT_SESSION"; - break; - case NOT_IMPLEMENTED_ERROR: - *os << "NOT_IMPLEMENTED_ERROR"; - break; - case NOT_INITIALIZED_ERROR: - *os << "NOT_INITIALIZED_ERROR"; - break; - case NO_USAGE_ENTRIES: - *os << "NO_USAGE_ENTRIES"; - break; - case OKP_ALREADY_PROVISIONED: - *os << "OKP_ALREADY_PROVISIONED"; - break; - case OPEN_CRYPTO_SESSION_ERROR: - *os << "OPEN_CRYPTO_SESSION_ERROR"; - break; - case OUTPUT_TOO_LARGE_ERROR: - *os << "OUTPUT_TOO_LARGE_ERROR"; - break; - case PARAMETER_NULL: - *os << "PARAMETER_NULL"; - break; - case PARSE_OKP_RESPONSE_ERROR: - *os << "PARSE_OKP_RESPONSE_ERROR"; - break; - case PARSE_REQUEST_ERROR_1: - *os << "PARSE_REQUEST_ERROR_1"; - break; - case PARSE_REQUEST_ERROR_2: - *os << "PARSE_REQUEST_ERROR_2"; - break; - case PARSE_RESPONSE_ERROR_1: - *os << "PARSE_RESPONSE_ERROR_1"; - break; - case PARSE_RESPONSE_ERROR_2: - *os << "PARSE_RESPONSE_ERROR_2"; - break; - case PARSE_RESPONSE_ERROR_3: - *os << "PARSE_RESPONSE_ERROR_3"; - break; - case PARSE_RESPONSE_ERROR_4: - *os << "PARSE_RESPONSE_ERROR_4"; - break; - case PARSE_SERVICE_CERTIFICATE_ERROR: - *os << "PARSE_SERVICE_CERTIFICATE_ERROR"; - break; - case PREPARE_CENC_CONTENT_ID_FAILED: - *os << "PREPARE_CENC_CONTENT_ID_FAILED"; - break; - case PREPARE_WEBM_CONTENT_ID_FAILED: - *os << "PREPARE_WEBM_CONTENT_ID_FAILED"; - break; - case PRIVACY_MODE_ERROR_1: - *os << "PRIVACY_MODE_ERROR_1"; - break; - case PRIVACY_MODE_ERROR_2: - *os << "PRIVACY_MODE_ERROR_2"; - break; - case PRIVACY_MODE_ERROR_3: - *os << "PRIVACY_MODE_ERROR_3"; - break; - case RANDOM_GENERATION_ERROR: - *os << "RANDOM_GENERATION_ERROR"; - break; - case REFRESH_KEYS_ERROR: - *os << "REFRESH_KEYS_ERROR"; - break; - case REINIT_ERROR: - *os << "REINIT_ERROR"; - break; - case RELEASE_KEY_ERROR: - *os << "RELEASE_KEY_ERROR"; - break; - case RELEASE_KEY_REQUEST_ERROR: - *os << "RELEASE_KEY_REQUEST_ERROR"; - break; - case RELEASE_LICENSE_ERROR_1: - *os << "RELEASE_LICENSE_ERROR_1"; - break; - case RELEASE_LICENSE_ERROR_2: - *os << "RELEASE_LICENSE_ERROR_2"; - break; - case RELEASE_USAGE_INFO_ERROR: - *os << "RELEASE_USAGE_INFO_ERROR"; - break; - case RELEASE_USAGE_INFO_FAILED: - *os << "RELEASE_USAGE_INFO_FAILED"; - break; - case REMOVE_ALL_USAGE_INFO_ERROR_1: - *os << "REMOVE_ALL_USAGE_INFO_ERROR_1"; - break; - case REMOVE_ALL_USAGE_INFO_ERROR_2: - *os << "REMOVE_ALL_USAGE_INFO_ERROR_2"; - break; - case REMOVE_ALL_USAGE_INFO_ERROR_5: - *os << "REMOVE_ALL_USAGE_INFO_ERROR_5"; - break; - case REMOVE_ALL_USAGE_INFO_ERROR_6: - *os << "REMOVE_ALL_USAGE_INFO_ERROR_6"; - break; - case REMOVE_ALL_USAGE_INFO_ERROR_7: - *os << "REMOVE_ALL_USAGE_INFO_ERROR_7"; - break; - case REMOVE_OFFLINE_LICENSE_ERROR_1: - *os << "REMOVE_OFFLINE_LICENSE_ERROR_1"; - break; - case REMOVE_OFFLINE_LICENSE_ERROR_2: - *os << "REMOVE_OFFLINE_LICENSE_ERROR_2"; - break; - case REMOVE_USAGE_INFO_ERROR_1: - *os << "REMOVE_USAGE_INFO_ERROR_1"; - break; - case REMOVE_USAGE_INFO_ERROR_2: - *os << "REMOVE_USAGE_INFO_ERROR_2"; - break; - case REMOVE_USAGE_INFO_ERROR_3: - *os << "REMOVE_USAGE_INFO_ERROR_3"; - break; - case RENEW_KEY_ERROR_1: - *os << "RENEW_KEY_ERROR_1"; - break; - case RENEW_KEY_ERROR_2: - *os << "RENEW_KEY_ERROR_2"; - break; - case RESTORE_OFFLINE_LICENSE_ERROR_2: - *os << "RESTORE_OFFLINE_LICENSE_ERROR_2"; - break; - case REWRAP_DEVICE_RSA_KEY_ERROR: - *os << "REWRAP_DEVICE_RSA_KEY_ERROR"; - break; - case RSA_SIGNATURE_GENERATION_ERROR: - *os << "RSA_SIGNATURE_GENERATION_ERROR"; - break; - case SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH: - *os << "SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH"; - break; - case SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY: - *os << "SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY"; - break; - case SESSION_FILE_HANDLE_INIT_ERROR: - *os << "SESSION_FILE_HANDLE_INIT_ERROR"; - break; - case SESSION_KEYS_NOT_FOUND: - *os << "SESSION_KEYS_NOT_FOUND"; - break; - case SESSION_KEYS_NOT_FOUND_2: - *os << "SESSION_KEYS_NOT_FOUND_2"; - break; - case SESSION_LOST_STATE_ERROR: - *os << "SESSION_LOST_STATE_ERROR"; - break; - case SESSION_NOT_FOUND_1: - *os << "SESSION_NOT_FOUND_1"; - break; - case SESSION_NOT_FOUND_2: - *os << "SESSION_NOT_FOUND_2"; - break; - case SESSION_NOT_FOUND_3: - *os << "SESSION_NOT_FOUND_3"; - break; - case SESSION_NOT_FOUND_4: - *os << "SESSION_NOT_FOUND_4"; - break; - case SESSION_NOT_FOUND_5: - *os << "SESSION_NOT_FOUND_5"; - break; - case SESSION_NOT_FOUND_6: - *os << "SESSION_NOT_FOUND_6"; - break; - case SESSION_NOT_FOUND_7: - *os << "SESSION_NOT_FOUND_7"; - break; - case SESSION_NOT_FOUND_8: - *os << "SESSION_NOT_FOUND_8"; - break; - case SESSION_NOT_FOUND_9: - *os << "SESSION_NOT_FOUND_9"; - break; - case SESSION_NOT_FOUND_10: - *os << "SESSION_NOT_FOUND_10"; - break; - case SESSION_NOT_FOUND_12: - *os << "SESSION_NOT_FOUND_12"; - break; - case SESSION_NOT_FOUND_13: - *os << "SESSION_NOT_FOUND_13"; - break; - case SESSION_NOT_FOUND_14: - *os << "SESSION_NOT_FOUND_14"; - break; - case SESSION_NOT_FOUND_15: - *os << "SESSION_NOT_FOUND_15"; - break; - case SESSION_NOT_FOUND_16: - *os << "SESSION_NOT_FOUND_16"; - break; - case SESSION_NOT_FOUND_18: - *os << "SESSION_NOT_FOUND_18"; - break; - case SESSION_NOT_FOUND_19: - *os << "SESSION_NOT_FOUND_19"; - break; - case SESSION_NOT_FOUND_20: - *os << "SESSION_NOT_FOUND_20"; - break; - case SESSION_NOT_FOUND_21: - *os << "SESSION_NOT_FOUND_21"; - break; - case SESSION_NOT_FOUND_22: - *os << "SESSION_NOT_FOUND_22"; - break; - case SESSION_NOT_FOUND_23: - *os << "SESSION_NOT_FOUND_23"; - break; - case SESSION_NOT_FOUND_FOR_DECRYPT: - *os << "SESSION_NOT_FOUND_FOR_DECRYPT"; - break; - case SET_DECRYPT_HASH_ERROR: - *os << "SET_DECRYPT_HASH_ERROR"; - break; - case SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE: - *os << "SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE"; - break; - case SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR: - *os << "SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR"; - break; - case SIGNATURE_NOT_FOUND: - *os << "SIGNATURE_NOT_FOUND"; - break; - case SIGNATURE_NOT_FOUND_2: - *os << "SIGNATURE_NOT_FOUND_2"; - break; - case STORE_LICENSE_ERROR_1: - *os << "STORE_LICENSE_ERROR_1"; - break; - case STORE_LICENSE_ERROR_2: - *os << "STORE_LICENSE_ERROR_2"; - break; - case STORE_USAGE_INFO_ERROR: - *os << "STORE_USAGE_INFO_ERROR"; - break; - case SYSTEM_INVALIDATED_ERROR: - *os << "SYSTEM_INVALIDATED_ERROR"; - break; - case UNEXPECTED_EMPTY_USAGE_ENTRY: - *os << "UNEXPECTED_EMPTY_USAGE_ENTRY"; - break; - case UNKNOWN_CLIENT_TOKEN_TYPE: - *os << "UNKNOWN_CLIENT_TOKEN_TYPE"; - break; - case UNKNOWN_SELECT_KEY_ERROR_1: - *os << "UNKNOWN_SELECT_KEY_ERROR_1"; - break; - case UNKNOWN_SELECT_KEY_ERROR_2: - *os << "UNKNOWN_SELECT_KEY_ERROR_2"; - break; - case UNPROVISION_ERROR_1: - *os << "UNPROVISION_ERROR_1"; - break; - case UNPROVISION_ERROR_2: - *os << "UNPROVISION_ERROR_2"; - break; - case UNPROVISION_ERROR_3: - *os << "UNPROVISION_ERROR_3"; - break; - case UNPROVISION_ERROR_4: - *os << "UNPROVISION_ERROR_4"; - break; - case UNSUPPORTED_INIT_DATA: - *os << "UNSUPPORTED_INIT_DATA"; - break; - case UNSUPPORTED_INIT_DATA_FORMAT: - *os << "UNSUPPORTED_INIT_DATA_FORMAT"; - break; - case UPDATE_USAGE_ENTRY_UNKNOWN_ERROR: - *os << "UPDATE_USAGE_ENTRY_UNKNOWN_ERROR"; - break; - case USAGE_ENTRY_NUMBER_MISMATCH: - *os << "USAGE_ENTRY_NUMBER_MISMATCH"; - break; - case USAGE_ENTRY_ALREADY_LOADED: - *os << "USAGE_ENTRY_ALREADY_LOADED"; - break; - case USAGE_GET_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE: - *os << "USAGE_GET_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE"; - break; - case USAGE_GET_ENTRY_RETRIEVE_LICENSE_FAILED: - *os << "USAGE_GET_ENTRY_RETRIEVE_LICENSE_FAILED"; - break; - case USAGE_GET_ENTRY_RETRIEVE_USAGE_INFO_FAILED: - *os << "USAGE_GET_ENTRY_RETRIEVE_USAGE_INFO_FAILED"; - break; - case USAGE_INFO_NOT_FOUND: - *os << "USAGE_INFO_NOT_FOUND"; - break; - case USAGE_INFORMATION_SUPPORT_FAILED: - *os << "USAGE_INFORMATION_SUPPORT_FAILED"; - break; - case USAGE_INVALID_LOAD_ENTRY: - *os << "USAGE_INVALID_LOAD_ENTRY"; - break; - case USAGE_INVALID_NEW_ENTRY: - *os << "USAGE_INVALID_NEW_ENTRY"; - break; - case USAGE_INVALID_PARAMETERS_1: - *os << "USAGE_INVALID_PARAMETERS_1"; - break; - case USAGE_INVALID_PARAMETERS_2: - *os << "USAGE_INVALID_PARAMETERS_2"; - break; - case USAGE_STORE_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE: - *os << "USAGE_STORE_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE"; - break; - case USAGE_STORE_ENTRY_RETRIEVE_LICENSE_FAILED: - *os << "USAGE_STORE_ENTRY_RETRIEVE_LICENSE_FAILED"; - break; - case USAGE_STORE_ENTRY_RETRIEVE_USAGE_INFO_FAILED: - *os << "USAGE_STORE_ENTRY_RETRIEVE_USAGE_INFO_FAILED"; - break; - case USAGE_STORE_LICENSE_FAILED: - *os << "USAGE_STORE_LICENSE_FAILED"; - break; - case USAGE_STORE_USAGE_INFO_FAILED: - *os << "USAGE_STORE_USAGE_INFO_FAILED"; - break; - case USAGE_SUPPORT_GET_API_FAILED: - *os << "USAGE_SUPPORT_GET_API_FAILED"; - break; - case WEBM_INIT_DATA_UNAVAILABLE: - *os << "WEBM_INIT_DATA_UNAVAILABLE"; - break; - case PROVISIONING_NOT_ALLOWED_FOR_ATSC: - *os << "PROVISIONING_NOT_ALLOWED_FOR_ATSC"; - break; - case PROVISIONING_TYPE_IS_NOT_BOOT_CERTIFICATE_CHAIN_ERROR: - *os << "PROVISIONING_TYPE_IS_NOT_BOOT_CERTIFICATE_CHAIN_ERROR"; - break; - case GET_BOOT_CERTIFICATE_CHAIN_ERROR: - *os << "GET_BOOT_CERTIFICATE_CHAIN_ERROR"; - break; - case GENERATE_CERTIFICATE_KEY_PAIR_ERROR: - *os << "GENERATE_CERTIFICATE_KEY_PAIR_ERROR"; - break; - case GENERATE_CERTIFICATE_KEY_PAIR_UNKNOWN_TYPE_ERROR: - *os << "GENERATE_CERTIFICATE_KEY_PAIR_ERROR"; - break; - case LOAD_OEM_CERTIFICATE_PRIVATE_KEY_ERROR: - *os << "GENERATE_CERTIFICATE_KEY_PAIR_ERROR"; - break; - case PROVISIONING_4_CRYPTO_SESSION_NOT_OPEN: - *os << "PROVISIONING_4_CRYPTO_SESSION_NOT_OPEN"; - break; - case PROVISIONING_4_FILE_SYSTEM_IS_NULL: - *os << "PROVISIONING_4_FILE_SYSTEM_IS_NULL"; - break; - case PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES: - *os << "PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES"; - break; - case PROVISIONING_4_RESPONSE_FAILED_TO_PARSE_MESSAGE: - *os << "PROVISIONING_4_RESPONSE_FAILED_TO_PARSE_MESSAGE"; - break; - case PROVISIONING_4_RESPONSE_HAS_ERROR_STATUS: - *os << "PROVISIONING_4_RESPONSE_HAS_ERROR_STATUS"; - break; - case PROVISIONING_4_RESPONSE_HAS_NO_CERTIFICATE: - *os << "PROVISIONING_4_RESPONSE_HAS_NO_CERTIFICATE"; - break; - case PROVISIONING_4_NO_PRIVATE_KEY: - *os << "PROVISIONING_4_NO_PRIVATE_KEY"; - break; - case PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_2: - *os << "PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_2"; - break; - case PROVISIONING_4_FAILED_TO_STORE_OEM_CERTIFICATE: - *os << "PROVISIONING_4_FAILED_TO_STORE_OEM_CERTIFICATE"; - break; - case PROVISIONING_4_FAILED_TO_STORE_DRM_CERTIFICATE: - *os << "PROVISIONING_4_FAILED_TO_STORE_DRM_CERTIFICATE"; - break; - case PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_3: - *os << "PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_3"; - break; - default: - *os << "Unknown CdmResponseType"; - break; - } + *os << CdmResponseTypeToString(value); } void PrintTo(const enum CdmLicenseType& value, ::std::ostream* os) { @@ -1055,236 +68,9 @@ void PrintTo(const enum CdmCertificateType& value, ::std::ostream* os) { } void PrintTo(const enum OEMCryptoResult& value, ::std::ostream* os) { - switch (value) { - case OEMCrypto_SUCCESS: - *os << "SUCCESS"; - break; - case OEMCrypto_ERROR_INIT_FAILED: - *os << "INIT_FAILED"; - break; - case OEMCrypto_ERROR_TERMINATE_FAILED: - *os << "TERMINATE_FAILED"; - break; - case OEMCrypto_ERROR_OPEN_FAILURE: - *os << "OPEN_FAILURE"; - break; - case OEMCrypto_ERROR_CLOSE_FAILURE: - *os << "CLOSE_FAILURE"; - break; - case OEMCrypto_ERROR_ENTER_SECURE_PLAYBACK_FAILED: - *os << "ENTER_SECURE_PLAYBACK_FAILED"; - break; - case OEMCrypto_ERROR_EXIT_SECURE_PLAYBACK_FAILED: - *os << "EXIT_SECURE_PLAYBACK_FAILED"; - break; - case OEMCrypto_ERROR_SHORT_BUFFER: - *os << "SHORT_BUFFER"; - break; - case OEMCrypto_ERROR_NO_DEVICE_KEY: - *os << "NO_DEVICE_KEY"; - break; - case OEMCrypto_ERROR_NO_ASSET_KEY: - *os << "NO_ASSET_KEY"; - break; - case OEMCrypto_ERROR_KEYBOX_INVALID: - *os << "KEYBOX_INVALID"; - break; - case OEMCrypto_ERROR_NO_KEYDATA: - *os << "NO_KEYDATA"; - break; - case OEMCrypto_ERROR_NO_CW: - *os << "NO_CW"; - break; - case OEMCrypto_ERROR_DECRYPT_FAILED: - *os << "DECRYPT_FAILED"; - break; - case OEMCrypto_ERROR_WRITE_KEYBOX: - *os << "WRITE_KEYBOX"; - break; - case OEMCrypto_ERROR_WRAP_KEYBOX: - *os << "WRAP_KEYBOX"; - break; - case OEMCrypto_ERROR_BAD_MAGIC: - *os << "BAD_MAGIC"; - break; - case OEMCrypto_ERROR_BAD_CRC: - *os << "BAD_CRC"; - break; - case OEMCrypto_ERROR_NO_DEVICEID: - *os << "NO_DEVICEID"; - break; - case OEMCrypto_ERROR_RNG_FAILED: - *os << "RNG_FAILED"; - break; - case OEMCrypto_ERROR_RNG_NOT_SUPPORTED: - *os << "RNG_NOT_SUPPORTED"; - break; - case OEMCrypto_ERROR_SETUP: - *os << "SETUP"; - break; - case OEMCrypto_ERROR_OPEN_SESSION_FAILED: - *os << "OPEN_SESSION_FAILED"; - break; - case OEMCrypto_ERROR_CLOSE_SESSION_FAILED: - *os << "CLOSE_SESSION_FAILED"; - break; - case OEMCrypto_ERROR_INVALID_SESSION: - *os << "INVALID_SESSION"; - break; - case OEMCrypto_ERROR_NOT_IMPLEMENTED: - *os << "NOT_IMPLEMENTED"; - break; - case OEMCrypto_ERROR_NO_CONTENT_KEY: - *os << "NO_CONTENT_KEY"; - break; - case OEMCrypto_ERROR_CONTROL_INVALID: - *os << "CONTROL_INVALID"; - break; - case OEMCrypto_ERROR_UNKNOWN_FAILURE: - *os << "UNKNOWN_FAILURE"; - break; - case OEMCrypto_ERROR_INVALID_CONTEXT: - *os << "INVALID_CONTEXT"; - break; - case OEMCrypto_ERROR_SIGNATURE_FAILURE: - *os << "SIGNATURE_FAILURE"; - break; - case OEMCrypto_ERROR_TOO_MANY_SESSIONS: - *os << "TOO_MANY_SESSIONS"; - break; - case OEMCrypto_ERROR_INVALID_NONCE: - *os << "INVALID_NONCE"; - break; - case OEMCrypto_ERROR_TOO_MANY_KEYS: - *os << "TOO_MANY_KEYS"; - break; - case OEMCrypto_ERROR_DEVICE_NOT_RSA_PROVISIONED: - *os << "DEVICE_NOT_RSA_PROVISIONED"; - break; - case OEMCrypto_ERROR_INVALID_RSA_KEY: - *os << "INVALID_RSA_KEY"; - break; - case OEMCrypto_ERROR_KEY_EXPIRED: - *os << "KEY_EXPIRED"; - break; - case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - *os << "INSUFFICIENT_RESOURCES"; - break; - case OEMCrypto_ERROR_INSUFFICIENT_HDCP: - *os << "INSUFFICIENT_HDCP"; - break; - case OEMCrypto_ERROR_BUFFER_TOO_LARGE: - *os << "BUFFER_TOO_LARGE"; - break; - case OEMCrypto_WARNING_GENERATION_SKEW: - *os << "OEMCrypto_WARNING_GENERATION_SKEW"; - break; - case OEMCrypto_ERROR_GENERATION_SKEW: - *os << "GENERATION_SKEW"; - break; - case OEMCrypto_LOCAL_DISPLAY_ONLY: - *os << "OEMCrypto_LOCAL_DISPLAY_ONLY"; - break; - case OEMCrypto_ERROR_ANALOG_OUTPUT: - *os << "ANALOG_OUTPUT"; - break; - case OEMCrypto_ERROR_WRONG_PST: - *os << "WRONG_PST"; - break; - case OEMCrypto_ERROR_WRONG_KEYS: - *os << "WRONG_KEYS"; - break; - case OEMCrypto_ERROR_MISSING_MASTER: - *os << "MISSING_MASTER"; - break; - case OEMCrypto_ERROR_LICENSE_INACTIVE: - *os << "LICENSE_INACTIVE"; - break; - case OEMCrypto_ERROR_ENTRY_NEEDS_UPDATE: - *os << "ENTRY_NEEDS_UPDATE"; - break; - case OEMCrypto_ERROR_ENTRY_IN_USE: - *os << "ENTRY_IN_USE"; - break; - case OEMCrypto_ERROR_USAGE_TABLE_UNRECOVERABLE: - *os << "USAGE_TABLE_UNRECOVERABLE"; - break; - case OEMCrypto_KEY_NOT_LOADED: - *os << "OEMCrypto_KEY_NOT_LOADED"; - break; - case OEMCrypto_KEY_NOT_ENTITLED: - *os << "OEMCrypto_KEY_NOT_ENTITLED"; - break; - case OEMCrypto_ERROR_BAD_HASH: - *os << "BAD_HASH"; - break; - case OEMCrypto_ERROR_OUTPUT_TOO_LARGE: - *os << "OUTPUT_TOO_LARGE"; - break; - case OEMCrypto_ERROR_SESSION_LOST_STATE: - *os << "SESSION_LOST_STATE"; - break; - case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - *os << "SYSTEM_INVALIDATED"; - break; - case OEMCrypto_ERROR_LICENSE_RELOAD: - *os << "LICENSE_RELOAD"; - break; - case OEMCrypto_ERROR_MULTIPLE_USAGE_ENTRIES: - *os << "MULTIPLE_USAGE_ENTRIES"; - break; - case OEMCrypto_WARNING_MIXED_OUTPUT_PROTECTION: - *os << "MIXED_OUTPUT_PROTECTION"; - break; - case OEMCrypto_ERROR_INVALID_ENTITLED_KEY_SESSION: - *os << "INVALID_ENTITLED_KEY_SESSION"; - break; - case OEMCrypto_ERROR_NEEDS_KEYBOX_PROVISIONING: - *os << "NEEDS_KEYBOX_PROVISIONING"; - break; - case OEMCrypto_ERROR_UNSUPPORTED_CIPHER: - *os << "OEMCrypto_ERROR_UNSUPPORTED_CIPHER"; - break; - case OEMCrypto_ERROR_DVR_FORBIDDEN: - *os << "OEMCrypto_ERROR_DVR_FORBIDDEN"; - break; - case OEMCrypto_ERROR_INSUFFICIENT_PRIVILEGE: - *os << "OEMCrypto_ERROR_INSUFFICIENT_PRIVILEGE"; - break; - case OEMCrypto_ERROR_INVALID_KEY: - *os << "INVALID_KEY"; - break; - // ODK Values. - case ODK_ERROR_CORE_MESSAGE: - *os << "CORE_MESSAGE"; - break; - case ODK_SET_TIMER: - *os << "SET_TIMER"; - break; - case ODK_DISABLE_TIMER: - *os << "DISABLE_TIMER"; - break; - case ODK_TIMER_EXPIRED: - *os << "TIMER_EXPIRED"; - break; - case ODK_UNSUPPORTED_API: - *os << "UNSUPPORTED_API"; - break; - case ODK_STALE_RENEWAL: - *os << "STALE_RENEWAL"; - break; - // OPK Values. - case OPK_ERROR_INCOMPATIBLE_VERSION: - *os << "INCOMPATIBLE_VERSION"; - break; - case OPK_ERROR_REMOTE_CALL: - *os << "REMOTE_CALL"; - break; - case OPK_ERROR_NO_PERSISTENT_DATA: - *os << "NO_PERSISTENT_DATA"; - break; - } + *os << wvutil::OEMCryptoResultToString(value); } + namespace okp { void PrintTo(const SystemState& state, std::ostream* os) { *os << SystemStateToString(state); diff --git a/libwvdrmengine/cdm/util/include/error_string_util.h b/libwvdrmengine/cdm/util/include/error_string_util.h new file mode 100644 index 00000000..8be4eaa9 --- /dev/null +++ b/libwvdrmengine/cdm/util/include/error_string_util.h @@ -0,0 +1,11 @@ +#ifndef ERROR_STRING_UTIL_H_ +#define ERROR_STRING_UTIL_H_ + +#include + +namespace wvutil { + +const std::string OEMCryptoResultToString(int oemcrypto_result); + +} // namespace wvutil +#endif // ERROR_STRING_UTIL_H_ diff --git a/libwvdrmengine/cdm/util/src/error_string_util.cpp b/libwvdrmengine/cdm/util/src/error_string_util.cpp new file mode 100644 index 00000000..d70a6a8e --- /dev/null +++ b/libwvdrmengine/cdm/util/src/error_string_util.cpp @@ -0,0 +1,171 @@ +// Copyright 2022 Google LLC. All Rights Reserved. This file and proprietary +// source code may only be used and distributed under the Widevine License +// Agreement. +// + +#include "error_string_util.h" + +#include "OEMCryptoCENC.h" +#include "wv_cdm_types.h" + +namespace wvutil { +const std::string OEMCryptoResultToString(int oemcrypto_result) { + switch (oemcrypto_result) { + case OEMCrypto_SUCCESS: + return "SUCCESS"; + case OEMCrypto_ERROR_INIT_FAILED: + return "INIT_FAILED"; + case OEMCrypto_ERROR_TERMINATE_FAILED: + return "TERMINATE_FAILED"; + case OEMCrypto_ERROR_OPEN_FAILURE: + return "OPEN_FAILURE"; + case OEMCrypto_ERROR_CLOSE_FAILURE: + return "CLOSE_FAILURE"; + case OEMCrypto_ERROR_ENTER_SECURE_PLAYBACK_FAILED: + return "ENTER_SECURE_PLAYBACK_FAILED"; + case OEMCrypto_ERROR_EXIT_SECURE_PLAYBACK_FAILED: + return "EXIT_SECURE_PLAYBACK_FAILED"; + case OEMCrypto_ERROR_SHORT_BUFFER: + return "SHORT_BUFFER"; + case OEMCrypto_ERROR_NO_DEVICE_KEY: + return "NO_DEVICE_KEY"; + case OEMCrypto_ERROR_NO_ASSET_KEY: + return "NO_ASSET_KEY"; + case OEMCrypto_ERROR_KEYBOX_INVALID: + return "KEYBOX_INVALID"; + case OEMCrypto_ERROR_NO_KEYDATA: + return "NO_KEYDATA"; + case OEMCrypto_ERROR_NO_CW: + return "NO_CW"; + case OEMCrypto_ERROR_DECRYPT_FAILED: + return "DECRYPT_FAILED"; + case OEMCrypto_ERROR_WRITE_KEYBOX: + return "WRITE_KEYBOX"; + case OEMCrypto_ERROR_WRAP_KEYBOX: + return "WRAP_KEYBOX"; + case OEMCrypto_ERROR_BAD_MAGIC: + return "BAD_MAGIC"; + case OEMCrypto_ERROR_BAD_CRC: + return "BAD_CRC"; + case OEMCrypto_ERROR_NO_DEVICEID: + return "NO_DEVICEID"; + case OEMCrypto_ERROR_RNG_FAILED: + return "RNG_FAILED"; + case OEMCrypto_ERROR_RNG_NOT_SUPPORTED: + return "RNG_NOT_SUPPORTED"; + case OEMCrypto_ERROR_SETUP: + return "SETUP"; + case OEMCrypto_ERROR_OPEN_SESSION_FAILED: + return "OPEN_SESSION_FAILED"; + case OEMCrypto_ERROR_CLOSE_SESSION_FAILED: + return "CLOSE_SESSION_FAILED"; + case OEMCrypto_ERROR_INVALID_SESSION: + return "INVALID_SESSION"; + case OEMCrypto_ERROR_NOT_IMPLEMENTED: + return "NOT_IMPLEMENTED"; + case OEMCrypto_ERROR_NO_CONTENT_KEY: + return "NO_CONTENT_KEY"; + case OEMCrypto_ERROR_CONTROL_INVALID: + return "CONTROL_INVALID"; + case OEMCrypto_ERROR_UNKNOWN_FAILURE: + return "UNKNOWN_FAILURE"; + case OEMCrypto_ERROR_INVALID_CONTEXT: + return "INVALID_CONTEXT"; + case OEMCrypto_ERROR_SIGNATURE_FAILURE: + return "SIGNATURE_FAILURE"; + case OEMCrypto_ERROR_TOO_MANY_SESSIONS: + return "TOO_MANY_SESSIONS"; + case OEMCrypto_ERROR_INVALID_NONCE: + return "INVALID_NONCE"; + case OEMCrypto_ERROR_TOO_MANY_KEYS: + return "TOO_MANY_KEYS"; + case OEMCrypto_ERROR_DEVICE_NOT_RSA_PROVISIONED: + return "DEVICE_NOT_RSA_PROVISIONED"; + case OEMCrypto_ERROR_INVALID_RSA_KEY: + return "INVALID_RSA_KEY"; + case OEMCrypto_ERROR_KEY_EXPIRED: + return "KEY_EXPIRED"; + case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: + return "INSUFFICIENT_RESOURCES"; + case OEMCrypto_ERROR_INSUFFICIENT_HDCP: + return "INSUFFICIENT_HDCP"; + case OEMCrypto_ERROR_BUFFER_TOO_LARGE: + return "BUFFER_TOO_LARGE"; + case OEMCrypto_WARNING_GENERATION_SKEW: + return "OEMCrypto_WARNING_GENERATION_SKEW"; + case OEMCrypto_ERROR_GENERATION_SKEW: + return "GENERATION_SKEW"; + case OEMCrypto_LOCAL_DISPLAY_ONLY: + return "OEMCrypto_LOCAL_DISPLAY_ONLY"; + case OEMCrypto_ERROR_ANALOG_OUTPUT: + return "ANALOG_OUTPUT"; + case OEMCrypto_ERROR_WRONG_PST: + return "WRONG_PST"; + case OEMCrypto_ERROR_WRONG_KEYS: + return "WRONG_KEYS"; + case OEMCrypto_ERROR_MISSING_MASTER: + return "MISSING_MASTER"; + case OEMCrypto_ERROR_LICENSE_INACTIVE: + return "LICENSE_INACTIVE"; + case OEMCrypto_ERROR_ENTRY_NEEDS_UPDATE: + return "ENTRY_NEEDS_UPDATE"; + case OEMCrypto_ERROR_ENTRY_IN_USE: + return "ENTRY_IN_USE"; + case OEMCrypto_ERROR_USAGE_TABLE_UNRECOVERABLE: + return "USAGE_TABLE_UNRECOVERABLE"; + case OEMCrypto_KEY_NOT_LOADED: + return "OEMCrypto_KEY_NOT_LOADED"; + case OEMCrypto_KEY_NOT_ENTITLED: + return "OEMCrypto_KEY_NOT_ENTITLED"; + case OEMCrypto_ERROR_BAD_HASH: + return "BAD_HASH"; + case OEMCrypto_ERROR_OUTPUT_TOO_LARGE: + return "OUTPUT_TOO_LARGE"; + case OEMCrypto_ERROR_SESSION_LOST_STATE: + return "SESSION_LOST_STATE"; + case OEMCrypto_ERROR_SYSTEM_INVALIDATED: + return "SYSTEM_INVALIDATED"; + case OEMCrypto_ERROR_LICENSE_RELOAD: + return "LICENSE_RELOAD"; + case OEMCrypto_ERROR_MULTIPLE_USAGE_ENTRIES: + return "MULTIPLE_USAGE_ENTRIES"; + case OEMCrypto_WARNING_MIXED_OUTPUT_PROTECTION: + return "MIXED_OUTPUT_PROTECTION"; + case OEMCrypto_ERROR_INVALID_ENTITLED_KEY_SESSION: + return "INVALID_ENTITLED_KEY_SESSION"; + case OEMCrypto_ERROR_NEEDS_KEYBOX_PROVISIONING: + return "NEEDS_KEYBOX_PROVISIONING"; + case OEMCrypto_ERROR_UNSUPPORTED_CIPHER: + return "OEMCrypto_ERROR_UNSUPPORTED_CIPHER"; + case OEMCrypto_ERROR_DVR_FORBIDDEN: + return "OEMCrypto_ERROR_DVR_FORBIDDEN"; + case OEMCrypto_ERROR_INSUFFICIENT_PRIVILEGE: + return "OEMCrypto_ERROR_INSUFFICIENT_PRIVILEGE"; + case OEMCrypto_ERROR_INVALID_KEY: + return "INVALID_KEY"; + // ODK Values. + case ODK_ERROR_CORE_MESSAGE: + return "CORE_MESSAGE"; + case ODK_SET_TIMER: + return "SET_TIMER"; + case ODK_DISABLE_TIMER: + return "DISABLE_TIMER"; + case ODK_TIMER_EXPIRED: + return "TIMER_EXPIRED"; + case ODK_UNSUPPORTED_API: + return "UNSUPPORTED_API"; + case ODK_STALE_RENEWAL: + return "STALE_RENEWAL"; + // OPK Values. + case OPK_ERROR_INCOMPATIBLE_VERSION: + return "INCOMPATIBLE_VERSION"; + case OPK_ERROR_REMOTE_CALL: + return "REMOTE_CALL"; + case OPK_ERROR_NO_PERSISTENT_DATA: + return "NO_PERSISTENT_DATA"; + default: + return "Invalid OEMCrypto error."; + } +} + +} // namespace wvutil diff --git a/libwvdrmengine/src/WVDrmFactory.cpp b/libwvdrmengine/src/WVDrmFactory.cpp index f81e748f..73814679 100644 --- a/libwvdrmengine/src/WVDrmFactory.cpp +++ b/libwvdrmengine/src/WVDrmFactory.cpp @@ -22,6 +22,7 @@ #include "WVUUID.h" #include "android-base/properties.h" #include "cutils/properties.h" +#include "error_string_util.h" #include "wv_cdm_constants.h" #include "wv_content_decryption_module.h" #include "wv_metrics.h" @@ -176,7 +177,7 @@ string WVDrmFactory::stringToHex(const string& s) { } void WVDrmFactory::printCdmMetrics(int fd) { - dprintf(fd, "\n**** Widevine Cdm Metrics ****\n"); + dprintf(fd, "widevine_cdm_metrics:\n"); // Verify that the version of the library that we linked against is // compatible with the version of the headers we compiled against. @@ -190,32 +191,33 @@ void WVDrmFactory::printCdmMetrics(int fd) { cdm->GetMetrics(&metrics, &full_list_returned); if (metrics.empty()) { dprintf(fd, - "Metrics not available, please retry while streaming a video\n"); + " error_message: Metrics not available, please retry while streaming a video.\n"); } else if (!full_list_returned) { dprintf(fd, - "Not all metrics are returned due to some GetMetric error, " + " error_message: Not all metrics are returned due to some GetMetric error, " "please check logcat for possible GetMetric errors.\n"); } if (result == wvcdm::NO_ERROR) { for (auto& metric : metrics) { - dprintf(fd, "*** Metric size=%zu\n", metric.DebugString().size()); + dprintf(fd, " - serialized_proto_bytes: %zu\n", metric.ByteSizeLong()); string formatted; wv_metrics::FormatWvCdmMetrics(metric, formatted); dprintf(fd, "%s\n", formatted.c_str()); } } else { - dprintf(fd, "GetMetrics failed, error=%d\n", result); + dprintf(fd, " error_message: %s\n", ::wvcdm::CdmResponseTypeToString(result).c_str()); + dprintf(fd, " error_code: %d\n", result); } } void WVDrmFactory::printCdmProperties(int fd) { - dprintf(fd, "\nwidevine_cdm_properties:\n"); + dprintf(fd, " - widevine_cdm_properties:\n"); android::sp cdm(getCDM()); const bool isLevel1 = cdm->IsSecurityLevelSupported(wvcdm::CdmSecurityLevel::kSecurityLevelL1); - dprintf(fd, " default_security_level: '%s'\n", isLevel1 ? "L1" : "L3"); + dprintf(fd, " default_security_level: \"%s\"\n", isLevel1 ? "L1" : "L3"); const std::map cdmProperties = { {"version_widevine_cdm", wvcdm::QUERY_KEY_WVCDM_VERSION}, @@ -251,7 +253,7 @@ void WVDrmFactory::printCdmProperties(int fd) { cdm->QueryStatus(wvcdm::RequestedSecurityLevel::kLevelDefault, property.second, &value); string outString = stringToHex(value); - dprintf(fd, " %s: '%s'\n", property.first.c_str(), outString.c_str()); + dprintf(fd, " %s: \"%s\"\n", property.first.c_str(), outString.c_str()); value.clear(); } } diff --git a/libwvdrmengine/src/wv_metrics.cpp b/libwvdrmengine/src/wv_metrics.cpp index f8ca443d..8bbf240d 100644 --- a/libwvdrmengine/src/wv_metrics.cpp +++ b/libwvdrmengine/src/wv_metrics.cpp @@ -12,26 +12,104 @@ #include #include +#include #include "OEMCryptoCENC.h" +#include "error_string_util.h" #include "wv_cdm_types.h" using namespace drm_metrics; +using ::aidl::android::hardware::drm::Status; using std::string; using std::to_string; namespace { -const string kIndentPerLine = " "; +const string kIndentSpaces = " "; -string FormatCdmErrorTranslation(int error_code) { - std::stringstream os; - os << static_cast(error_code); - return " " + os.str(); -} - -string FormatOEMCryptoResult(int oemcrypto_result) { - std::stringstream os; - os << static_cast(oemcrypto_result); - return " " + os.str(); +const string DrmHalStatusToString(Status hal_status) { + switch (hal_status) { + case Status::OK: + return "OK"; + case Status::ERROR_DRM_NO_LICENSE: + return "ERROR_DRM_NO_LICENSE"; + case Status::ERROR_DRM_LICENSE_EXPIRED: + return "ERROR_DRM_LICENSE_EXPIRED"; + case Status::ERROR_DRM_SESSION_NOT_OPENED: + return "ERROR_DRM_SESSION_NOT_OPENED"; + case Status::ERROR_DRM_CANNOT_HANDLE: + return "ERROR_DRM_CANNOT_HANDLE"; + case Status::ERROR_DRM_INVALID_STATE: + return "ERROR_DRM_INVALID_STATE,"; + case Status::BAD_VALUE: + return "BAD_VALUE"; + case Status::ERROR_DRM_NOT_PROVISIONED: + return "ERROR_DRM_NOT_PROVISIONED"; + case Status::ERROR_DRM_RESOURCE_BUSY: + return "ERROR_DRM_RESOURCE_BUSY"; + case Status::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION: + return "ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION"; + case Status::ERROR_DRM_DEVICE_REVOKED: + return "ERROR_DRM_DEVICE_REVOKED"; + case Status::ERROR_DRM_DECRYPT: + return "ERROR_DRM_DECRYPT"; + case Status::ERROR_DRM_UNKNOWN: + return "ERROR_DRM_UNKNOWN"; + case Status::ERROR_DRM_INSUFFICIENT_SECURITY: + return "ERROR_DRM_INSUFFICIENT_SECURITY"; + case Status::ERROR_DRM_FRAME_TOO_LARGE: + return "ERROR_DRM_FRAME_TOO_LARGE"; + case Status::ERROR_DRM_SESSION_LOST_STATE: + return "ERROR_DRM_SESSION_LOST_STATE"; + case Status::ERROR_DRM_RESOURCE_CONTENTION: + return "ERROR_DRM_RESOURCE_CONTENTION"; + case Status::CANNOT_DECRYPT_ZERO_SUBSAMPLES: + return "CANNOT_DECRYPT_ZERO_SUBSAMPLES"; + case Status::CRYPTO_LIBRARY_ERROR: + return "CRYPTO_LIBRARY_ERROR"; + case Status::GENERAL_OEM_ERROR: + return "GENERAL_OEM_ERROR"; + case Status::GENERAL_PLUGIN_ERROR: + return "GENERAL_PLUGIN_ERROR"; + case Status::INIT_DATA_INVALID: + return "INIT_DATA_INVALID"; + case Status::KEY_NOT_LOADED: + return "KEY_NOT_LOADED"; + case Status::LICENSE_PARSE_ERROR: + return "LICENSE_PARSE_ERROR"; + case Status::LICENSE_POLICY_ERROR: + return "LICENSE_POLICY_ERROR"; + case Status::LICENSE_RELEASE_ERROR: + return "LICENSE_RELEASE_ERROR"; + case Status::LICENSE_REQUEST_REJECTED: + return "LICENSE_REQUEST_REJECTED"; + case Status::LICENSE_RESTORE_ERROR: + return "LICENSE_RESTORE_ERROR"; + case Status::LICENSE_STATE_ERROR: + return "LICENSE_STATE_ERROR"; + case Status::MALFORMED_CERTIFICATE: + return "MALFORMED_CERTIFICATE"; + case Status::MEDIA_FRAMEWORK_ERROR: + return "MEDIA_FRAMEWORK_ERROR"; + case Status::MISSING_CERTIFICATE: + return "MISSING_CERTIFICATE"; + case Status::PROVISIONING_CERTIFICATE_ERROR: + return "PROVISIONING_CERTIFICATE_ERROR"; + case Status::PROVISIONING_CONFIGURATION_ERROR: + return "PROVISIONING_CONFIGURATION_ERROR"; + case Status::PROVISIONING_PARSE_ERROR: + return "PROVISIONING_PARSE_ERROR"; + case Status::PROVISIONING_REQUEST_REJECTED: + return "PROVISIONING_REQUEST_REJECTED"; + case Status::RETRYABLE_PROVISIONING_ERROR: + return "RETRYABLE_PROVISIONING_ERROR"; + case Status::SECURE_STOP_RELEASE_ERROR: + return "SECURE_STOP_RELEASE_ERROR"; + case Status::STORAGE_READ_FAILURE: + return "STORAGE_READ_FAILURE"; + case Status::STORAGE_WRITE_FAILURE: + return "STORAGE_WRITE_FAILURE"; + default: + return "Invalid Drm HAL status."; + } } string FormatOEMCryptoInitializeMode(const ValueMetric& vm) { @@ -76,118 +154,129 @@ string FormatOEMCryptoProvisioningMethod(const ValueMetric& vm) { return translations[vm.int_value()]; } -string FormatAttributes(const Attributes& attributes) { +string FormatAttributes(const string& indent, const Attributes& attributes) { string result; + if (attributes.has_error_code()) { - result.append("error_code:"); + result.assign(indent); + result.append("error_code:\n"); + string next_indent = indent + kIndentSpaces; + result.append(next_indent + "name: "); + result.append(DrmHalStatusToString(static_cast(attributes.error_code()))); + result.append("\n" + next_indent + "value: "); result.append(to_string(attributes.error_code())); - result.append(FormatCdmErrorTranslation(attributes.error_code())); } if (attributes.has_error_code_bool()) { - if (result.size()) result.append(","); - result.append("success:"); + result.assign(indent); + result.append("success: "); result.append(attributes.error_code_bool() ? "true" : "false"); } if (attributes.has_cdm_security_level()) { - if (result.size()) result.append(","); - result.append("cdm_security_level:"); + result.assign(indent); + result.append("cdm_security_level: "); result.append(to_string(attributes.cdm_security_level())); } if (attributes.has_security_level()) { - if (result.size()) result.append(","); - result.append("security_level:"); + result.assign(indent); + result.append("security_level: "); result.append(to_string(attributes.security_level())); } if (attributes.has_length()) { - if (result.size()) result.append(","); - result.append("length:"); + result.assign(indent); + result.append("length: "); result.append(to_string(attributes.length())); } if (attributes.has_encryption_algorithm()) { - if (result.size()) result.append(","); - result.append("encryption_algorithm:"); + result.assign(indent); + result.append("encryption_algorithm: "); result.append(to_string(attributes.encryption_algorithm())); } if (attributes.has_signing_algorithm()) { - if (result.size()) result.append(","); - result.append("signing_algorithm:"); + result.assign(indent); + result.append("signing_algorithm: "); result.append(to_string(attributes.signing_algorithm())); } if (attributes.has_oem_crypto_result()) { - if (result.size()) result.append(","); - result.append("oemcrypto_result:"); + result.assign(indent); + result.append("oemcrypto_result:\n"); + string next_indent = indent + kIndentSpaces; + result.append(next_indent + "name: "); + result.append(::wvutil::OEMCryptoResultToString(attributes.oem_crypto_result())); + result.append("\n" + next_indent + "value: "); result.append(to_string(attributes.oem_crypto_result())); - result.append(FormatOEMCryptoResult(attributes.oem_crypto_result())); } if (attributes.has_key_status_type()) { - if (result.size()) result.append(","); - result.append("key_status_type:"); + result.assign(indent); + result.append("key_status_type: "); result.append(to_string(attributes.key_status_type())); } if (attributes.has_event_type()) { - if (result.size()) result.append(","); - result.append("event_type:"); + result.assign(indent); + result.append("event_type: "); result.append(to_string(attributes.event_type())); } if (attributes.has_key_request_type()) { - if (result.size()) result.append(","); - result.append("key_request_type:"); + result.assign(indent); + result.append("key_request_type: "); result.append(to_string(attributes.key_request_type())); } if (attributes.has_license_type()) { - if (result.size()) result.append(","); - result.append("license_type:"); + result.assign(indent); + result.append("license_type: "); result.append(to_string(attributes.license_type())); } if (result.size()) { - return string(" {") + result + "}"; + return result; } else { - return ""; + return " null"; } } -string FormatCounterMetric(const CounterMetric& cm) { - string result; +string FormatCounterMetric(const string& indent, const CounterMetric& cm) { + string result(indent + kIndentSpaces); if (cm.has_count()) { - result = string("count=") + to_string(cm.count()); + result.append(string("count: ") + to_string(cm.count()) + "\n"); if (cm.has_attributes()) { - result.append(FormatAttributes(cm.attributes())); + string newIndent(indent + kIndentSpaces); + result.append(FormatAttributes(newIndent, cm.attributes())); } } return result; } -string FormatDistributionMetric(const DistributionMetric& dm) { +string FormatDistributionMetric(const string& indent, const DistributionMetric& dm) { string result; if (dm.has_min()) { std::ostringstream buffer; buffer << dm.min(); - result = string("min=") + buffer.str(); + result.append(indent + kIndentSpaces); + result.append(string("min: ") + buffer.str() + "\n"); } if (dm.has_max()) { std::ostringstream buffer; buffer << dm.max(); - if (result.size()) result.append(" "); - result += string("max=") + buffer.str(); + result.append(indent + kIndentSpaces); + result.append(string("max: ") + buffer.str() + "\n"); } if (dm.has_mean()) { std::ostringstream buffer; buffer << dm.mean(); - if (result.size()) result.append(" "); - result += string("mean=") + buffer.str(); + result.append(indent + kIndentSpaces); + result.append(string("mean: ") + buffer.str() + "\n"); } if (dm.has_variance()) { std::ostringstream buffer; buffer << dm.variance(); - if (result.size()) result.append(" "); - result += string("variance=") + buffer.str(); + result.append(indent + kIndentSpaces); + result.append(string("variance: ") + buffer.str() + "\n"); } if (dm.has_operation_count()) { - if (result.size()) result.append(" "); - result += string("count=") + to_string(dm.operation_count()); + result.append(indent + kIndentSpaces); + result.append(string("count: ") + to_string(dm.operation_count()) + "\n"); } if (dm.has_attributes()) { - result.append(FormatAttributes(dm.attributes())); + string newIndent(indent + kIndentSpaces); + result.append(FormatAttributes(newIndent, dm.attributes())); } return result; } @@ -195,9 +284,11 @@ string FormatDistributionMetric(const DistributionMetric& dm) { string FormatValueMetric(const ValueMetric& vm) { string result; if (vm.has_error_code()) { - result.append("error(" + to_string(vm.error_code())); - result.append(FormatCdmErrorTranslation(vm.error_code())); - result.append(")"); + result.append("error_code:\n"); + result.append(kIndentSpaces + "name: "); + result.append(DrmHalStatusToString(static_cast(vm.error_code()))); + result.append("\n" + kIndentSpaces + "value: "); + result.append(to_string(vm.error_code())); } if (vm.has_int_value()) { result.append(to_string(vm.int_value())); @@ -208,32 +299,31 @@ string FormatValueMetric(const ValueMetric& vm) { result.append(buffer.str()); } if (vm.has_string_value()) { - result.append("\""); - result.append(vm.string_value()); - result.append("\""); + result.append("\"" + vm.string_value() + "\""); } return result; } #define FORMAT_REPEATED_DISTRIBUTION(NAME, INDENT) \ if (metrics.NAME##_size() == 1) { \ - result.append(INDENT + #NAME + ": "); \ - result.append(FormatDistributionMetric(metrics.NAME(0)) + "\n"); \ + result.append(INDENT + #NAME + ":\n"); \ + result.append(FormatDistributionMetric(INDENT, metrics.NAME(0)) + "\n"); \ } else { \ for (int i = 0; i < metrics.NAME##_size(); i++) { \ - result.append(INDENT + #NAME "[" + to_string(i) + "]: "); \ - result.append(FormatDistributionMetric(metrics.NAME(i)) + "\n"); \ + result.append(INDENT + #NAME "[" + to_string(i) + "]:\n"); \ + result.append(FormatDistributionMetric(INDENT, metrics.NAME(i)) + "\n"); \ } \ } #define FORMAT_REPEATED_COUNTER(NAME, INDENT) \ if (metrics.NAME##_size() == 1) { \ - result.append(INDENT + #NAME ": "); \ - result.append(FormatCounterMetric(metrics.NAME(0)) + "\n"); \ + result.append(INDENT + #NAME ":\n"); \ + result.append(FormatCounterMetric(INDENT, metrics.NAME(0)) + "\n"); \ } else { \ for (int i = 0; i < metrics.NAME##_size(); i++) { \ - result.append(INDENT + #NAME "[" + to_string(i) + "]: "); \ - result.append(FormatCounterMetric(metrics.NAME(i)) + "\n"); \ + result.append(INDENT + #NAME "[" + to_string(i) + "]: [\n"); \ + result.append(FormatCounterMetric(INDENT, metrics.NAME(i)) + "\n"); \ + result.append("]\n"); \ } \ } @@ -263,7 +353,7 @@ string FormatValueMetric(const ValueMetric& vm) { #define FORMAT_OPTIONAL_CRYPTO_METRICS(NAME, INDENT) \ if (metrics.has_##NAME()) { \ - FormatCryptoMetrics(metrics.NAME(), INDENT + kIndentPerLine, result); \ + FormatCryptoMetrics(metrics.NAME(), INDENT, result); \ } void FormatCryptoMetrics(const WvCdmMetrics_CryptoMetrics metrics, @@ -435,17 +525,24 @@ void FormatEngineMetrics(const WvCdmMetrics_EngineMetrics& metrics, namespace wv_metrics { void FormatWvCdmMetrics(const WvCdmMetrics& metrics, string& result) { - string indent = kIndentPerLine; - string next_indent = indent + kIndentPerLine; + string indent = kIndentSpaces + kIndentSpaces + kIndentSpaces; + string next_indent = indent + kIndentSpaces; - result.append("engine_metrics\n"); + result.append(kIndentSpaces + " engine_metrics:"); if (metrics.has_engine_metrics()) { + result.append("\n"); FormatEngineMetrics(metrics.engine_metrics(), indent, result); + } else { + result.append(" null\n"); } - result.append("session_metrics\n"); - for (int i = 0; i < metrics.session_metrics_size(); i++) { - result.append(indent + "session[" + to_string(i) + "]\n"); - FormatSessionMetrics(metrics.session_metrics(i), next_indent, result); + result.append(kIndentSpaces + " session_metrics:"); + if (metrics.session_metrics_size()) { + for (int i = 0; i < metrics.session_metrics_size(); i++) { + result.append("\n" + indent + "session[" + to_string(i) + "]:\n"); + FormatSessionMetrics(metrics.session_metrics(i), next_indent, result); + } + } else { + result.append(" null\n"); } } } // namespace wv_metrics