------------- Moves ecm_generator to media_cas_packager_sdk/internal. ------------- Add a simple TCP server listening on a port. My intention is to use this server to support the Simulcrypt APIs (TODO). Also add a simple TCP client binary for testing the server and also demo how to call the Simulcrypt APIs (TODO). ------------- If only a single key is in the ECM, it is the EVEN key. To make the code matches this understanding, change a parameter from 'false' to 'true'. But this change has NO impact on the produced ECM, regardless this parameter is 'false' or 'true' (i.e., whether using push_front or push_back), only a single key is in the ECM. ------------- Add classes that process Simulcrypt ECMG messages 1) Stream_set-up 2) CW_provision ------------- Renames server and client binaries. ------------- Make ecmg call ecm_generator to generate ecm. The return of the ecm to Simulcrypt caller will be implemented in the next CL. For now, using the 'key' (control word) in CW_provision message also as the 'key_id'. ------------- Move common folder ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=217358698
64 lines
1.7 KiB
C++
64 lines
1.7 KiB
C++
////////////////////////////////////////////////////////////////////////////////
|
|
// Copyright 2016 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/file_util.h"
|
|
|
|
#include <stddef.h>
|
|
#include <stdio.h>
|
|
|
|
#include "glog/logging.h"
|
|
|
|
namespace widevine {
|
|
|
|
bool GetContents(const std::string& file_name, std::string* contents) {
|
|
if (file_name.empty()) {
|
|
LOG(WARNING) << "File name is empty.";
|
|
return false;
|
|
}
|
|
FILE* file = fopen(file_name.c_str(), "r");
|
|
if (!file) {
|
|
LOG(WARNING) << "Unable to open file " << file_name;
|
|
return false;
|
|
}
|
|
contents->clear();
|
|
const size_t kReadSize = 0x1000;
|
|
char buffer[kReadSize];
|
|
while (true) {
|
|
size_t size_read = fread(buffer, sizeof(char), kReadSize, file);
|
|
if (size_read == 0) break;
|
|
contents->append(buffer, size_read);
|
|
}
|
|
const bool eof = feof(file);
|
|
fclose(file);
|
|
if (!eof) {
|
|
LOG(WARNING) << "Failed to read all file contents.";
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool SetContents(const std::string& file_name, const std::string& contents) {
|
|
if (file_name.empty()) {
|
|
LOG(WARNING) << "File name is empty.";
|
|
return false;
|
|
}
|
|
FILE* file = fopen(file_name.c_str(), "w");
|
|
if (!file) {
|
|
LOG(WARNING) << "Unable to open file " << file_name;
|
|
return false;
|
|
}
|
|
const size_t size_written =
|
|
fwrite(contents.data(), sizeof(char), contents.size(), file);
|
|
if (size_written != contents.size())
|
|
LOG(WARNING) << "Failed to write to " << file_name;
|
|
fclose(file);
|
|
return size_written == contents.size();
|
|
}
|
|
|
|
} // namespace widevine
|