This CL merges the following changes from the Widevine repository: Avoid CdmSession reinitialization https://widevine-internal-review.googlesource.com/#/c/10530/ Fix timer-related unit tests. https://widevine-internal-review.googlesource.com/#/c/10510/ Correct return statement bug: 15590802 https://widevine-internal-review.googlesource.com/#/c/10553/ Usage reporting fixes bug/15388863 https://widevine-internal-review.googlesource.com/#/c/10460/ Make public methods virtual https://widevine-internal-review.googlesource.com/#/c/10500/ Fix the SetTimer contract in the CDM. https://widevine-internal-review.googlesource.com/#/c/10493/ Move inline CDM methods, add OVERRIDE. https://widevine-internal-review.googlesource.com/#/c/10475/ Simplify storage APIs related cleanup. https://widevine-internal-review.googlesource.com/#/c/10473/ Duration values are not correctly reported when queried b/15592374 https://widevine-internal-review.googlesource.com/#/c/10437/ Propagate IsKeyValid() through ContentDecryptionModule. https://widevine-internal-review.googlesource.com/#/c/10483/ Minor clean up in config_test_env. https://widevine-internal-review.googlesource.com/#/c/10440/ General clean up. https://widevine-internal-review.googlesource.com/#/c/10441/ Refactor HttpSocket and simplify UrlRequest interface. https://widevine-internal-review.googlesource.com/#/c/10410/ Install good keybox at end of unit tests b/15385981 https://widevine-internal-review.googlesource.com/#/c/10374/ Privacy crypto fixes b/15475012 https://widevine-internal-review.googlesource.com/#/c/10383/ Incorporate header files to resolve build issued based on customers feedback. https://widevine-internal-review.googlesource.com/#/c/10420/ Support unprovisioning b/12247651 https://widevine-internal-review.googlesource.com/#/c/10356/ Correct usage of Host::Allocate and Cdm::Decrypt. https://widevine-internal-review.googlesource.com/#/c/10378/ Fix logging bug, arguments in wrong order. https://widevine-internal-review.googlesource.com/#/c/10380/ Rename types that look like constants. https://widevine-internal-review.googlesource.com/#/c/10379/ Fix offline test failures b/13909635 https://widevine-internal-review.googlesource.com/#/c/10348/ Add -DUNIT_TEST to the unit test makefile for Android https://widevine-internal-review.googlesource.com/#/c/10375/ Refactor privacy-crypto and add dummy version. https://widevine-internal-review.googlesource.com/#/c/10353/ Remove References to Apiary https://widevine-internal-review.googlesource.com/#/c/9924/ Delete oldest entry in usage table when full bug: 15184824 https://widevine-internal-review.googlesource.com/#/c/10295/ Port DeviceFiles to iOS. https://widevine-internal-review.googlesource.com/#/c/10355/ Make testing functions in DeviceFiles private. https://widevine-internal-review.googlesource.com/#/c/10354/ Add RSA encryption to haystack https://widevine-internal-review.googlesource.com/#/c/10280/ Add string and vector includes to CDM header. https://widevine-internal-review.googlesource.com/#/c/10352/ First version of oemcrypto logging https://widevine-internal-review.googlesource.com/#/c/10252/ Update Names of Secure Stop Methods bug: 11987015 https://widevine-internal-review.googlesource.com/#/c/10152/ Adjust timing on the Usage Table unit test https://widevine-internal-review.googlesource.com/#/c/10307/ Fix all compiler warnings in CDM source release. https://widevine-internal-review.googlesource.com/#/c/10293/ Fix memset bug: args in wrong order https://widevine-internal-review.googlesource.com/#/c/10292/ Partial revert of 'Remove refs to test prov server, Level3 support...' https://widevine-internal-review.googlesource.com/#/c/10281/ Pack structure OEMCrypto_PST_Report https://widevine-internal-review.googlesource.com/#/c/10243/ Remove refs to test prov server, Level3 support; remove dead code https://widevine-internal-review.googlesource.com/#/c/10220/ Partial revert of 'Document data strings; clean up license server parameters.' https://widevine-internal-review.googlesource.com/#/c/10188/ Document data strings; clean up license server parameters. https://widevine-internal-review.googlesource.com/#/c/10120/ Fix broken build after partner branch merge. https://widevine-internal-review.googlesource.com/#/c/10181/ TODO Cleanup - core/src, core/include https://widevine-internal-review.googlesource.com/#/c/9965/ TODO Cleanup - cdm, chromium, core/test. https://widevine-internal-review.googlesource.com/#/c/9419/ Remove unneeded properties. https://widevine-internal-review.googlesource.com/#/c/10162/ Change-Id: If2bb9d743a562a3875bebb91933c0aaadea286b2
82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
|
|
#include "license_request.h"
|
|
#include "log.h"
|
|
|
|
namespace wvcdm {
|
|
|
|
static const std::string kTwoBlankLines("\r\n\r\n");
|
|
|
|
size_t LicenseRequest::FindHeaderEndPosition(
|
|
const std::string& response) const {
|
|
return(response.find(kTwoBlankLines));
|
|
}
|
|
|
|
// This routine parses the license server's response message and
|
|
// extracts the drm message from the response header.
|
|
void LicenseRequest::GetDrmMessage(const std::string& response,
|
|
std::string& drm_msg) {
|
|
if (response.empty()) {
|
|
drm_msg.clear();
|
|
return;
|
|
}
|
|
|
|
// Extracts DRM message.
|
|
// Content-Length = GLS line + Header(s) + empty line + drm message;
|
|
// we use the empty line to locate the drm message, and compute
|
|
// the drm message length as below instead of using Content-Length
|
|
size_t header_end_pos = FindHeaderEndPosition(response);
|
|
if (header_end_pos != std::string::npos) {
|
|
header_end_pos += kTwoBlankLines.size(); // points to response body
|
|
|
|
drm_msg.clear();
|
|
size_t drm_msg_pos = response.find(kTwoBlankLines, header_end_pos);
|
|
if (drm_msg_pos != std::string::npos) {
|
|
drm_msg_pos += kTwoBlankLines.size(); // points to drm message
|
|
} else {
|
|
// For backward compatibility, no blank line after error code
|
|
drm_msg_pos = response.find("\r\n", header_end_pos);
|
|
if (drm_msg_pos != std::string::npos) {
|
|
drm_msg_pos += 2; // points to drm message
|
|
}
|
|
}
|
|
|
|
if (drm_msg_pos != std::string::npos) {
|
|
drm_msg = response.substr(drm_msg_pos);
|
|
} else {
|
|
drm_msg = response.substr(header_end_pos);
|
|
}
|
|
} else {
|
|
LOGE("response body not found");
|
|
}
|
|
}
|
|
|
|
// Returns heartbeat url in heartbeat_url.
|
|
// The heartbeat url is stored as meta data in the response message.
|
|
void LicenseRequest::GetHeartbeatUrl(const std::string& response,
|
|
std::string& heartbeat_url) {
|
|
if (response.empty()) {
|
|
heartbeat_url.clear();
|
|
return;
|
|
}
|
|
|
|
size_t header_end_pos = FindHeaderEndPosition(response);
|
|
if (header_end_pos != std::string::npos) {
|
|
header_end_pos += kTwoBlankLines.size(); // points to response body
|
|
|
|
heartbeat_url.clear();
|
|
size_t heartbeat_url_pos = response.find("Heartbeat-Url: ",
|
|
header_end_pos);
|
|
if (heartbeat_url_pos != std::string::npos) {
|
|
heartbeat_url_pos += sizeof("Heartbeat-Url: ");
|
|
heartbeat_url.assign(response.substr(heartbeat_url_pos));
|
|
} else {
|
|
LOGE("heartbeat url not found");
|
|
}
|
|
} else {
|
|
LOGE("response body not found");
|
|
}
|
|
}
|
|
|
|
} // namespace wvcdm
|