Sends signed provisioning request as query string instead of payload.

Bug: 8790775

Merge of https://widevine-internal-review.googlesource.com/#/c/5381/
from the Widevine CDM repository.

Change-Id: I749303eee8162f37982f6dd5d83b6cf254b96847
This commit is contained in:
Jeff Tinker
2013-05-06 16:28:32 -07:00
parent 779b887bb3
commit d0f1784615
5 changed files with 26 additions and 27 deletions

View File

@@ -333,17 +333,20 @@ void CdmEngine::CleanupProvisioningSession(const CdmSessionId& cdm_session_id) {
}
/*
* This function converts SignedProvisioningRequest into base64 format.
* This function converts SignedProvisioningRequest into base64 string.
* It then wraps it in JSON format expected by the Apiary frontend.
* Apiary requires the base64 encoding to replace '+' with minus '-',
* and '/' with underscore '_'; opposite to stubby's.
*
* Returns the JSON formated string in *request.
* Returns the JSON formated string in *request. The JSON string will be
* appended as a query parameter, i.e. signedRequest=<base 64 encoded
* SignedProvisioningRequest>. All base64 '=' padding chars must be removed.
*
* The JSON formated request takes the following format:
*
* {'signedRequest':'base64 encoded message'}
*
* base64 encoded message
*/
void CdmEngine::ComposeJsonRequest(
void CdmEngine::ComposeJsonRequestAsQueryString(
const std::string& message,
CdmProvisioningRequest* request) {
@@ -351,11 +354,14 @@ void CdmEngine::ComposeJsonRequest(
std::vector<uint8_t> message_vector(message.begin(), message.end());
std::string message_b64 = Base64SafeEncode(message_vector);
request->assign("{'signedRequest':'");
request->append(message_b64);
request->append("'}");
LOGD("json request:\r\n%s", request->c_str());
// removes trailing '=' padding characters;
// the encoded string can have at most 2 '=' padding chars, so start
// searching at the end minus four characters
size_t found_pos = message_b64.find("=", message_b64.size() - 4);
if (std::string::npos != found_pos) {
message_b64.resize(found_pos);
}
request->assign(message_b64);
}
/*
@@ -467,7 +473,7 @@ CdmResponseType CdmEngine::GetProvisioningRequest(
signed_provisioning_msg.SerializeToString(&serialized_request);
// converts request into JSON string
ComposeJsonRequest(serialized_request, request);
ComposeJsonRequestAsQueryString(serialized_request, request);
return NO_ERROR;
}