Add "copts = PUBLIC_COPTS" option
------------- Use forward declaration in wvpl_sdk_session.h ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=227753690
This commit is contained in:
165
sdk/external/common/wvpl/wvpl_sdk_session.cc
vendored
165
sdk/external/common/wvpl/wvpl_sdk_session.cc
vendored
@@ -18,8 +18,10 @@
|
||||
#include "license_server_sdk/internal/parse_content_id.h"
|
||||
#include "sdk/external/common/wvpl/wvpl_sdk_environment.h"
|
||||
#include "sdk/external/common/wvpl/wvpl_types.h"
|
||||
#include "protos/public/client_identification.pb.h"
|
||||
#include "protos/public/errors.pb.h"
|
||||
#include "protos/public/license_protocol.pb.h"
|
||||
#include "protos/public/license_server_sdk.pb.h"
|
||||
#include "protos/public/provisioned_device_info.pb.h"
|
||||
#include "protos/public/widevine_pssh.pb.h"
|
||||
|
||||
@@ -58,6 +60,74 @@ namespace error = widevine::error;
|
||||
|
||||
namespace widevine_server {
|
||||
namespace wv_pl_sdk {
|
||||
namespace {
|
||||
// Copy the |hdcp_value| into the client_capabilities.
|
||||
void CopyHDCPToClientCapabilities(
|
||||
widevine::ClientIdentification::ClientCapabilities::HdcpVersion
|
||||
hdcp_value,
|
||||
WvPLClientCapabilities* client_capabilities) {
|
||||
DCHECK(client_capabilities);
|
||||
if (!client_capabilities) {
|
||||
return;
|
||||
}
|
||||
switch (hdcp_value) {
|
||||
case ClientIdentification::ClientCapabilities::HDCP_NONE:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_NONE);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V1:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V1);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V2:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V2);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V2_1:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V2_1);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V2_2:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V2_2);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V2_3:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V2_3);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_NO_DIGITAL_OUTPUT:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_NO_DIGITAL_OUTPUT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Copy the |analog_output_capabilities| into the client_capabilities.
|
||||
void CopyAnalogOutputCapabilities(
|
||||
widevine::ClientIdentification::ClientCapabilities::
|
||||
AnalogOutputCapabilities analog_output_capabilities,
|
||||
WvPLClientCapabilities* client_capabilities) {
|
||||
DCHECK(client_capabilities);
|
||||
if (!client_capabilities) {
|
||||
return;
|
||||
}
|
||||
switch (analog_output_capabilities) {
|
||||
case ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_UNKNOWN:
|
||||
client_capabilities->set_analog_output_capabilities(
|
||||
ANALOG_OUTPUT_UNKNOWN);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_NONE:
|
||||
client_capabilities->set_analog_output_capabilities(ANALOG_OUTPUT_NONE);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_SUPPORTED:
|
||||
client_capabilities->set_analog_output_capabilities(
|
||||
ANALOG_OUTPUT_SUPPORTED);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::
|
||||
ANALOG_OUTPUT_SUPPORTS_CGMS_A:
|
||||
client_capabilities->set_analog_output_capabilities(
|
||||
ANALOG_OUTPUT_SUPPORTS_CGMS_A);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
WvPLSDKSession::WvPLSDKSession(const DrmRootCertificate* drm_root_certificate)
|
||||
: drm_root_certificate_(drm_root_certificate) {}
|
||||
@@ -244,70 +314,6 @@ void WvPLSDKSession::CopyHDCP(
|
||||
}
|
||||
}
|
||||
|
||||
void WvPLSDKSession::CopyHDCPToClientCapabilities(
|
||||
ClientIdentification::ClientCapabilities::HdcpVersion hdcp_value,
|
||||
WvPLClientCapabilities* client_capabilities) const {
|
||||
DCHECK(client_capabilities);
|
||||
if (!client_capabilities) {
|
||||
return;
|
||||
}
|
||||
switch (hdcp_value) {
|
||||
case ClientIdentification::ClientCapabilities::HDCP_NONE:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_NONE);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V1:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V1);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V2:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V2);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V2_1:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V2_1);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V2_2:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V2_2);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_V2_3:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_V2_3);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::HDCP_NO_DIGITAL_OUTPUT:
|
||||
client_capabilities->set_max_hdcp_version(HDCP_NO_DIGITAL_OUTPUT);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void WvPLSDKSession::CopyAnalogOutputCapabilities(
|
||||
ClientIdentification::ClientCapabilities::AnalogOutputCapabilities
|
||||
analog_output_capabilities,
|
||||
WvPLClientCapabilities* client_capabilities) const {
|
||||
DCHECK(client_capabilities);
|
||||
if (!client_capabilities) {
|
||||
return;
|
||||
}
|
||||
switch (analog_output_capabilities) {
|
||||
case ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_UNKNOWN:
|
||||
client_capabilities->set_analog_output_capabilities(
|
||||
ANALOG_OUTPUT_UNKNOWN);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_NONE:
|
||||
client_capabilities->set_analog_output_capabilities(ANALOG_OUTPUT_NONE);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_SUPPORTED:
|
||||
client_capabilities->set_analog_output_capabilities(
|
||||
ANALOG_OUTPUT_SUPPORTED);
|
||||
break;
|
||||
case ClientIdentification::ClientCapabilities::
|
||||
ANALOG_OUTPUT_SUPPORTS_CGMS_A:
|
||||
client_capabilities->set_analog_output_capabilities(
|
||||
ANALOG_OUTPUT_SUPPORTS_CGMS_A);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void WvPLSDKSession::CopyOutputProtection(
|
||||
const WvPLKey& wvpl_key, License::KeyContainer* sdk_key_container) {
|
||||
DCHECK(sdk_key_container);
|
||||
@@ -477,11 +483,13 @@ WvPLStatus WvPLSDKSession::ParseLicenseRequest() {
|
||||
"are both specified in the license request");
|
||||
}
|
||||
if (sdk_license_request_->has_client_id()) {
|
||||
client_id_ = sdk_license_request_->client_id();
|
||||
client_id_ = absl::make_unique<ClientIdentification>(
|
||||
sdk_license_request_->client_id());
|
||||
has_client_id_ = true;
|
||||
} else if (sdk_license_request_->has_encrypted_client_id()) {
|
||||
client_id_ = absl::make_unique<ClientIdentification>();
|
||||
if (!DrmServiceCertificate::DecryptClientIdentification(
|
||||
sdk_license_request_->encrypted_client_id(), &client_id_)
|
||||
sdk_license_request_->encrypted_client_id(), client_id_.get())
|
||||
.ok()) {
|
||||
return WvPLStatus(
|
||||
error_space,
|
||||
@@ -491,10 +499,10 @@ WvPLStatus WvPLSDKSession::ParseLicenseRequest() {
|
||||
}
|
||||
has_client_id_ = true;
|
||||
}
|
||||
if (client_id_.has_token() &&
|
||||
client_id_.type() == ClientIdentification::KEYBOX) {
|
||||
if (client_id_->has_token() &&
|
||||
client_id_->type() == ClientIdentification::KEYBOX) {
|
||||
// Get system_id from token field in ClientIdentification.
|
||||
SetSystemId(KeyboxClientCert::GetSystemId(client_id_.token()));
|
||||
SetSystemId(KeyboxClientCert::GetSystemId(client_id_->token()));
|
||||
}
|
||||
if (!HasSystemId()) {
|
||||
ClientCert* client_cert_ptr = nullptr;
|
||||
@@ -518,7 +526,8 @@ WvPLStatus WvPLSDKSession::ParseLicenseRequest() {
|
||||
has_pssh_data_ = true;
|
||||
}
|
||||
}
|
||||
request_type_ = sdk_license_request_->type();
|
||||
request_type_ =
|
||||
static_cast<LicenseRequestType>(sdk_license_request_->type());
|
||||
}
|
||||
return OkStatus();
|
||||
}
|
||||
@@ -542,7 +551,7 @@ WvPLStatus WvPLSDKSession::GetClientInfo(WvPLClientInfo* client_info) const {
|
||||
error_space, widevine::MISSING_CLIENT_ID,
|
||||
"ClientIdentification is not found in the license request");
|
||||
}
|
||||
switch (client_id_.client_capabilities().max_hdcp_version()) {
|
||||
switch (client_id_->client_capabilities().max_hdcp_version()) {
|
||||
case ClientIdentification::ClientCapabilities::HDCP_NONE:
|
||||
client_info->set_max_hdcp_version(HDCP_NONE);
|
||||
break;
|
||||
@@ -567,14 +576,14 @@ WvPLStatus WvPLSDKSession::GetClientInfo(WvPLClientInfo* client_info) const {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (client_id_.client_capabilities().has_oem_crypto_api_version()) {
|
||||
if (client_id_->client_capabilities().has_oem_crypto_api_version()) {
|
||||
client_info->set_oem_crypto_api_version(
|
||||
client_id_.client_capabilities().oem_crypto_api_version());
|
||||
client_id_->client_capabilities().oem_crypto_api_version());
|
||||
}
|
||||
if (client_id_.has_provider_client_token()) {
|
||||
client_info->set_provider_client_token(client_id_.provider_client_token());
|
||||
if (client_id_->has_provider_client_token()) {
|
||||
client_info->set_provider_client_token(client_id_->provider_client_token());
|
||||
}
|
||||
for (const auto& name_value : client_id_.client_info()) {
|
||||
for (const auto& name_value : client_id_->client_info()) {
|
||||
client_info->set_name_value(name_value.name(), name_value.value());
|
||||
}
|
||||
WvPLClientCapabilities client_capabilities;
|
||||
@@ -614,7 +623,7 @@ WvPLStatus WvPLSDKSession::GetClientCapabilities(
|
||||
error_space, widevine::MISSING_CLIENT_ID,
|
||||
"ClientIdentification is not found in the license request");
|
||||
}
|
||||
status = GetWvPLClientCapabilities(client_id_, client_capabilities);
|
||||
status = GetWvPLClientCapabilities(*client_id_, client_capabilities);
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -691,7 +700,7 @@ WvPLStatus WvPLSDKSession::GetPsshData(
|
||||
return WvPLStatus(error_space, error::INVALID_ARGUMENT,
|
||||
"sdk_license_request_ is null");
|
||||
}
|
||||
if (request_type() == LicenseRequest::NEW) {
|
||||
if (request_type() == LicenseRequestType::NEW) {
|
||||
ContentInfo content_info;
|
||||
WvPLStatus status = widevine::ParseContentId(
|
||||
sdk_license_request_->content_id(), &content_info);
|
||||
|
||||
51
sdk/external/common/wvpl/wvpl_sdk_session.h
vendored
51
sdk/external/common/wvpl/wvpl_sdk_session.h
vendored
@@ -11,15 +11,18 @@
|
||||
|
||||
#include <memory>
|
||||
#include "sdk/external/common/wvpl/wvpl_types.h"
|
||||
#include "protos/public/client_identification.pb.h"
|
||||
#include "protos/public/device_certificate_status.pb.h"
|
||||
#include "protos/public/license_protocol.pb.h"
|
||||
#include "protos/public/license_server_sdk.pb.h"
|
||||
#include "protos/public/provisioned_device_info.pb.h"
|
||||
|
||||
namespace widevine {
|
||||
class ClientIdentification;
|
||||
class DrmRootCertificate;
|
||||
class LicenseRequest;
|
||||
class License_KeyContainer_OutputProtection;
|
||||
class License_KeyContainer;
|
||||
class License_Policy;
|
||||
class ProvisionedDeviceInfo;
|
||||
class SessionInit;
|
||||
class SessionState;
|
||||
class SignedMessage;
|
||||
} // namespace widevine
|
||||
namespace widevine_server {
|
||||
namespace wv_pl_sdk {
|
||||
@@ -28,7 +31,7 @@ class WvPLSDKSession {
|
||||
public:
|
||||
explicit WvPLSDKSession(
|
||||
const widevine::DrmRootCertificate* drm_root_certificate);
|
||||
virtual ~WvPLSDKSession() = 0;
|
||||
virtual ~WvPLSDKSession();
|
||||
|
||||
public:
|
||||
// Add WvPLKey.
|
||||
@@ -101,9 +104,7 @@ class WvPLSDKSession {
|
||||
|
||||
virtual PlatformVerificationStatus VerifyPlatform() = 0;
|
||||
|
||||
virtual widevine::LicenseRequest::RequestType request_type() const {
|
||||
return request_type_;
|
||||
}
|
||||
virtual LicenseRequestType request_type() const { return request_type_; }
|
||||
|
||||
/**
|
||||
* Returns true if the license type is offline, otherwise return false.
|
||||
@@ -119,7 +120,7 @@ class WvPLSDKSession {
|
||||
WvPLPlaybackPolicy policy_;
|
||||
WvPLSessionInit session_init_;
|
||||
WvPLWidevinePsshData pssh_data_;
|
||||
widevine::ClientIdentification client_id_;
|
||||
std::unique_ptr<widevine::ClientIdentification> client_id_;
|
||||
bool has_pssh_data_ = false;
|
||||
bool has_client_id_ = false;
|
||||
MessageType message_type_ = UNKNOWN;
|
||||
@@ -130,7 +131,7 @@ class WvPLSDKSession {
|
||||
std::string license_request_from_cdm_;
|
||||
std::string remote_attestation_cert_serial_number_;
|
||||
std::unique_ptr<widevine::LicenseRequest> sdk_license_request_;
|
||||
widevine::LicenseRequest::RequestType request_type_;
|
||||
LicenseRequestType request_type_;
|
||||
virtual WvPLStatus VerifyRemoteAttestation();
|
||||
|
||||
// Returns the WvPL Client Capabilities information for the license request
|
||||
@@ -146,35 +147,23 @@ class WvPLSDKSession {
|
||||
widevine::License_KeyContainer* sdk_key_container);
|
||||
virtual void CopySecurityLevel(
|
||||
const WvPLOutputProtection& output_protection, TrackType track_type,
|
||||
widevine::License::KeyContainer* key_container);
|
||||
widevine::License_KeyContainer* key_container);
|
||||
|
||||
// Copies/translates the policy from a WvPL policy into an SDK policy. A
|
||||
// helper function for GenerateLicenseRequestAsJSON.
|
||||
virtual void CopyPlaybackPolicy(const WvPLPlaybackPolicy& wvpl_policy,
|
||||
widevine::License::Policy* sdk_policy);
|
||||
widevine::License_Policy* sdk_policy);
|
||||
|
||||
// Copy the |cgms_value| into the key container. A helper function for
|
||||
// GenerateLicenseRequestAsJSON.
|
||||
virtual void CopyCGMS(CGMS cgms_value,
|
||||
widevine::License::KeyContainer::OutputProtection*
|
||||
output_protection);
|
||||
virtual void CopyCGMS(
|
||||
CGMS cgms_value,
|
||||
widevine::License_KeyContainer_OutputProtection* output_protection);
|
||||
|
||||
// Copy the |hdcp_value| into the key container.
|
||||
virtual void CopyHDCP(HDCP hdcp_value,
|
||||
widevine::License::KeyContainer::OutputProtection*
|
||||
output_protection);
|
||||
|
||||
// Copy the |hdcp_value| into the client_capabilities.
|
||||
virtual void CopyHDCPToClientCapabilities(
|
||||
widevine::ClientIdentification::ClientCapabilities::HdcpVersion
|
||||
hdcp_value,
|
||||
WvPLClientCapabilities* client_capabilities) const;
|
||||
|
||||
// Copy the |analog_output_capabilities| into the client_capabilities.
|
||||
virtual void CopyAnalogOutputCapabilities(
|
||||
widevine::ClientIdentification::ClientCapabilities::
|
||||
AnalogOutputCapabilities analog_output_capabilities,
|
||||
WvPLClientCapabilities* client_capabilities) const;
|
||||
virtual void CopyHDCP(
|
||||
HDCP hdcp_value,
|
||||
widevine::License_KeyContainer_OutputProtection* output_protection);
|
||||
|
||||
// Copy the WvPLSession Init into Session Init.
|
||||
virtual void CopySessionInit(const WvPLSessionInit& wvpl_session_init,
|
||||
|
||||
7
sdk/external/common/wvpl/wvpl_types.h
vendored
7
sdk/external/common/wvpl/wvpl_types.h
vendored
@@ -59,6 +59,13 @@ enum CertificateKeyType {
|
||||
RSA_3072 = 1,
|
||||
};
|
||||
|
||||
enum LicenseRequestType {
|
||||
REQUEST_TYPE_UNSPECIFIED = 0,
|
||||
NEW = 1,
|
||||
RENEWAL = 2,
|
||||
RELEASE = 3,
|
||||
};
|
||||
|
||||
enum PlatformVerificationStatus {
|
||||
PLATFORM_UNVERIFIED = 0,
|
||||
PLATFORM_TAMPERED = 1,
|
||||
|
||||
Reference in New Issue
Block a user