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:
Fang Yu
2019-01-03 14:45:58 -08:00
parent ed36938c81
commit f234dd036d
4 changed files with 122 additions and 109 deletions

View File

@@ -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);

View File

@@ -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,

View File

@@ -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,