// Copyright 2012 Google Inc. All Rights Reserved. #ifndef CDM_BASE_CDM_SESSION_H_ #define CDM_BASE_CDM_SESSION_H_ #include #include "crypto_session.h" #include "license.h" #include "policy_engine.h" #include "wv_cdm_event_listener.h" #include "wv_cdm_types.h" namespace wvcdm { // TODO(kqyang): Do we need it? CdmKey not defined yet // typedef std::map CdmSessionKeys; class CdmSession { public: CdmSession() : state_(INITIAL), session_id_(GenerateSessionId()) {} ~CdmSession() {} bool Init(); bool DestroySession(); void set_key_system(const CdmKeySystem& ksystem) { key_system_ = ksystem; } const CdmKeySystem& key_system() { return key_system_; } const CdmSessionId& session_id() { return session_id_; } bool VerifySession(const CdmKeySystem& key_system, const CdmInitData& init_data); CdmResponseType GenerateKeyRequest(const CdmInitData& init_data, CdmKeyMessage* key_request); // AddKey() - Accept license response and extract key info. CdmResponseType AddKey(const CdmKeyResponse& key_response); // CancelKeyRequest() - Cancel session. CdmResponseType CancelKeyRequest(); // Query license information CdmResponseType QueryKeyStatus(CdmQueryMap* key_info); // Decrypt() - Accept encrypted buffer and return decrypted data. CdmResponseType Decrypt(const uint8_t* encrypted_buffer, size_t encrypted_size, size_t block_offset, const std::vector& iv, const KeyId& key_id, uint8_t* decrypted_buffer); // License renewal // GenerateRenewalRequest() - Construct valid renewal request for the current // session keys. CdmResponseType GenerateRenewalRequest(CdmKeyMessage* key_request); // RenewKey() - Accept renewal response and update key info. CdmResponseType RenewKey(const CdmKeyResponse& key_response); bool IsKeyValid(const KeyId& key_id); bool AttachEventListener(WvCdmEventListener* listener); bool DetachEventListener(WvCdmEventListener* listener); void OnTimerEvent(); private: // Generate unique ID for each new session. CdmSessionId GenerateSessionId(); typedef enum { INITIAL, LICENSE_REQUESTED, LICENSE_RESPONSE_DONE, RENEWAL_ENABLED, RENEWAL_REQUESTED, LICENSE_EXPIRED } CdmSessionState; // instance variables CdmSessionState state_; const CdmSessionId session_id_; CdmKeySystem key_system_; CdmLicense license_parser_; CryptoSession* crypto_session_; PolicyEngine policy_engine_; std::set listeners_; // TODO(kqyang): CdmKey not defined yet // CdmSessionKeys session_keys_; CORE_DISALLOW_COPY_AND_ASSIGN(CdmSession); }; } // namespace wvcdm #endif // CDM_BASE_CDM_SESSION_H_