65 lines
2.5 KiB
C++
65 lines
2.5 KiB
C++
////////////////////////////////////////////////////////////////////////////////
|
|
// Copyright 2019 Google LLC.
|
|
//
|
|
// This software is licensed under the terms defined in the Widevine Master
|
|
// License Agreement. For a copy of this agreement, please contact
|
|
// widevine-licensing@google.com.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
#include "common/content_id_util.h"
|
|
|
|
#include "common/error_space.h"
|
|
#include "common/status.h"
|
|
#include "license_server_sdk/internal/parse_content_id.h"
|
|
#include "protos/public/errors.pb.h"
|
|
#include "protos/public/external_license.pb.h"
|
|
#include "protos/public/license_protocol.pb.h"
|
|
#include "protos/public/license_server_sdk.pb.h"
|
|
#include "protos/public/widevine_pssh.pb.h"
|
|
|
|
namespace widevine {
|
|
|
|
// TODO(user): Move the util methods from
|
|
// //license_server_sdk/internal/parse_content_id.h
|
|
// into this file.
|
|
|
|
Status GetContentIdFromExternalLicenseRequest(
|
|
const ExternalLicenseRequest& external_license_request,
|
|
std::string* content_id) {
|
|
LicenseRequest::ContentIdentification content_identification =
|
|
external_license_request.content_id();
|
|
WidevinePsshData widevine_pssh_data;
|
|
if (content_identification.has_widevine_pssh_data()) {
|
|
widevine_pssh_data.ParseFromString(
|
|
content_identification.widevine_pssh_data().pssh_data(0));
|
|
} else if (content_identification.has_webm_key_id()) {
|
|
widevine_pssh_data.ParseFromString(
|
|
content_identification.webm_key_id().header());
|
|
} else if (content_identification.has_init_data()) {
|
|
ContentInfo content_info;
|
|
if (ParseContentId(content_identification, &content_info).ok()) {
|
|
widevine_pssh_data =
|
|
content_info.content_info_entry(0).pssh().widevine_data();
|
|
}
|
|
}
|
|
*content_id = widevine_pssh_data.content_id();
|
|
return OkStatus();
|
|
}
|
|
|
|
Status GetContentIdFromSignedExternalLicenseRequest(
|
|
const SignedMessage& signed_message, std::string* content_id) {
|
|
if (signed_message.type() != SignedMessage::EXTERNAL_LICENSE_REQUEST) {
|
|
return Status(
|
|
error_space, error::INVALID_ARGUMENT,
|
|
"Unexpected SignedMessage Type. EXTERNAL_LICENSE_REQUEST expected");
|
|
}
|
|
ExternalLicenseRequest external_license_request;
|
|
if (!external_license_request.ParseFromString(signed_message.msg())) {
|
|
return Status(error_space, EXTERNAL_LICENSE_REQUEST_PARSE_ERROR,
|
|
"Unable to parse into External License Request");
|
|
}
|
|
return GetContentIdFromExternalLicenseRequest(external_license_request,
|
|
content_id);
|
|
}
|
|
|
|
} // namespace widevine
|