145 lines
4.3 KiB
C++
145 lines
4.3 KiB
C++
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
|
|
#ifndef WVCDM_CDM_WV_CONTENT_DECRYPTION_MODULE_H_
|
|
#define WVCDM_CDM_WV_CONTENT_DECRYPTION_MODULE_H_
|
|
|
|
#include "cdm_client_property_set.h"
|
|
#include "cdm_engine.h"
|
|
#include "cdm_host_clock.h"
|
|
#include "cdm_host_file.h"
|
|
|
|
#include "clock.h"
|
|
#include "content_decryption_module.h"
|
|
#include "host_event_listener.h"
|
|
|
|
#include "wv_cdm_common.h"
|
|
#include "wv_cdm_types.h"
|
|
|
|
namespace wvcdm {
|
|
|
|
class WVClientPropertySet : public wvcdm::CdmClientPropertySet {
|
|
public:
|
|
WVClientPropertySet()
|
|
: use_privacy_mode_(false) {}
|
|
|
|
virtual ~WVClientPropertySet() {}
|
|
|
|
void set_security_level(const std::string& securityLevel) {
|
|
security_level_ = securityLevel;
|
|
}
|
|
|
|
virtual const std::string& security_level() const {
|
|
return security_level_;
|
|
}
|
|
|
|
void set_use_privacy_mode(bool usePrivacyMode) {
|
|
use_privacy_mode_ = usePrivacyMode;
|
|
}
|
|
|
|
virtual bool use_privacy_mode() const {
|
|
return use_privacy_mode_;
|
|
}
|
|
|
|
void set_service_certificate(const std::string& serviceCertificate) {
|
|
service_certificate_ = serviceCertificate;
|
|
}
|
|
|
|
virtual const std::string& service_certificate() const {
|
|
return service_certificate_;
|
|
}
|
|
|
|
virtual bool is_session_sharing_enabled() const {
|
|
return true; // This is unused by common cdm but we need a definition
|
|
// for the pure virtual methods.
|
|
}
|
|
|
|
void set_is_session_sharing_enabled(bool shareKeys) {
|
|
return; // This is unused by common cdm but we need a definition
|
|
// for the pure virtual methods.
|
|
}
|
|
|
|
virtual uint32_t session_sharing_id() const {
|
|
return 1; // This is unused by common cdm but we need a
|
|
// definition for the pure virtual methods.
|
|
}
|
|
|
|
virtual void set_session_sharing_id(uint32_t id) {
|
|
return; // This is unused by common cdm but we need a
|
|
// definition for the pure virtual methods.
|
|
}
|
|
|
|
private:
|
|
CORE_DISALLOW_COPY_AND_ASSIGN(WVClientPropertySet);
|
|
|
|
std::string security_level_;
|
|
bool use_privacy_mode_;
|
|
std::string service_certificate_;
|
|
};
|
|
|
|
class WvContentDecryptionModule : public cdm::ContentDecryptionModule,
|
|
public IFileFactory,
|
|
public IClock {
|
|
public:
|
|
explicit WvContentDecryptionModule(cdm::Host* host);
|
|
|
|
virtual ~WvContentDecryptionModule();
|
|
|
|
// cdm::ContentDecryptionModule implementation.
|
|
virtual cdm::Status GenerateKeyRequest(const char* type, int type_size,
|
|
const uint8_t* init_data,
|
|
int init_data_size) OVERRIDE;
|
|
|
|
virtual cdm::Status AddKey(const char* session_id, int session_id_size,
|
|
const uint8_t* key, int key_size,
|
|
const uint8_t* key_id, int key_id_size) OVERRIDE;
|
|
|
|
virtual bool IsKeyValid(const uint8_t* key_id, int key_id_size) OVERRIDE;
|
|
|
|
virtual cdm::Status CloseSession(const char* session_id,
|
|
int session_id_size) OVERRIDE;
|
|
|
|
virtual void TimerExpired(void* context) OVERRIDE;
|
|
|
|
virtual cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer,
|
|
cdm::DecryptedBlock* decrypted_buffer) OVERRIDE;
|
|
|
|
virtual cdm::Status DecryptDecodeAndRenderFrame(
|
|
const cdm::InputBuffer& encrypted_buffer) OVERRIDE;
|
|
|
|
virtual cdm::Status DecryptDecodeAndRenderSamples(
|
|
const cdm::InputBuffer& encrypted_buffer) OVERRIDE;
|
|
|
|
virtual void Destroy() OVERRIDE;
|
|
|
|
virtual cdm::Status GetProvisioningRequest(
|
|
std::string* request, std::string* default_url) OVERRIDE;
|
|
|
|
virtual cdm::Status HandleProvisioningResponse(
|
|
std::string& response) OVERRIDE;
|
|
|
|
private:
|
|
void EnablePolicyTimer();
|
|
void DisablePolicyTimer();
|
|
|
|
virtual File::Impl* NewFileImpl() OVERRIDE;
|
|
|
|
virtual int64_t GetCurrentTimeInSeconds() OVERRIDE;
|
|
|
|
cdm::Status DoSubsampleDecrypt(CdmDecryptionParameters& parameters,
|
|
std::vector<uint8_t>& iv,
|
|
const cdm::InputBuffer& encrypted_buffer,
|
|
cdm::DecryptedBlock* decrypted_block);
|
|
|
|
CdmEngine cdm_engine_;
|
|
cdm::Host* const host_;
|
|
HostEventListener host_event_listener_;
|
|
WVClientPropertySet property_set_;
|
|
bool timer_enabled_;
|
|
|
|
CORE_DISALLOW_COPY_AND_ASSIGN(WvContentDecryptionModule);
|
|
};
|
|
|
|
} // namespace wvcdm
|
|
|
|
#endif // WVCDM_CDM_WV_CONTENT_DECRYPTION_MODULE_H_
|