1a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/* 2a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Copyright (C) 2010 The Android Open Source Project 3a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 4a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Licensed under the Apache License, Version 2.0 (the "License"); 5a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * you may not use this file except in compliance with the License. 6a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * You may obtain a copy of the License at 7a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 8a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * http://www.apache.org/licenses/LICENSE-2.0 9a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 10a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Unless required by applicable law or agreed to in writing, software 11a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * distributed under the License is distributed on an "AS IS" BASIS, 12a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * See the License for the specific language governing permissions and 14a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * limitations under the License. 15a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 16a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 17a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifndef __FWDLOCKENGINE_H__ 18a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#define __FWDLOCKENGINE_H__ 19a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 20a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmEngineBase.h> 21a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmConstraints.h> 22a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmRights.h> 23a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmInfo.h> 24a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmInfoStatus.h> 25a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmConvertedStatus.h> 26a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmInfoRequest.h> 27a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmSupportInfo.h> 28a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include <DrmInfoEvent.h> 29a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 30a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include "SessionMap.h" 31a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#include "FwdLockConv.h" 32a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 33a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheranamespace android { 34a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 35a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 36a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Forward Lock Engine class. 37a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 38a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraclass FwdLockEngine : public android::DrmEngineBase { 39a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 40a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherapublic: 41a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera FwdLockEngine(); 42a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera virtual ~FwdLockEngine(); 43a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 44a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraprotected: 45a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 46a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Get constraint information associated with input content. 47a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 48a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 49a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content 50a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param action Actions defined such as, 51a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Action::DEFAULT, Action::PLAY, etc 52a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmConstraints 53a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * key-value pairs of constraint are embedded in it 54a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @note 55a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * In case of error, return NULL 56a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 57a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmConstraints* onGetConstraints(int uniqueId, const String8* path, int action); 58a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 59a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 60a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Get metadata information associated with input content. 61a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 62a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 63a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content 64a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmMetadata 65a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * For Forward Lock engine, it returns an empty object 66a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @note 67a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * In case of error, returns NULL 68a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 69a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmMetadata* onGetMetadata(int uniqueId, const String8* path); 70a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 71a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 72a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Initialize plug-in. 73a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 74a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 75a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 76a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 77a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 78a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onInitialize(int uniqueId); 79a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 80a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 81a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Register a callback to be invoked when the caller required to 82a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * receive necessary information. 83a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 84a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 85a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param infoListener Listener 86a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 87a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 88a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 89a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onSetOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener); 90a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 91a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 92a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Terminate the plug-in and release resources bound to it. 93a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 94a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 95a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 96a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 97a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 98a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onTerminate(int uniqueId); 99a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 100a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 101a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Get whether the given content can be handled by this plugin or not. 102a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 103a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 104a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path to the protected object 105a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return bool 106a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns true if this plugin can handle , false in case of not able to handle 107a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 108a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherabool onCanHandle(int uniqueId, const String8& path); 109a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 110a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 111a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Processes the given DRM information as appropriate for its type. 112a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Not used for Forward Lock Engine. 113a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 114a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 115a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param drmInfo Information that needs to be processed 116a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmInfoStatus 117a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * instance as a result of processing given input 118a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 119a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmInfoStatus* onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo); 120a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 121a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 122a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Save DRM rights to specified rights path 123a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * and make association with content path. 124a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 125a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 126a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param drmRights DrmRights to be saved 127a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param rightsPath File path where rights to be saved 128a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param contentPath File path where content was saved 129a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 130a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 131a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 132a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onSaveRights(int uniqueId, 133a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const DrmRights& drmRights, 134a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const String8& rightsPath, 135a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const String8& contentPath); 136a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 137a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 138a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Retrieves necessary information for registration, unregistration or rights 139a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * acquisition information. 140a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 141a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 142a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param drmInfoRequest Request information to retrieve drmInfo 143a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmInfo 144a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * instance as a result of processing given input 145a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 146a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmInfo* onAcquireDrmInfo(int uniqueId, 147a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const DrmInfoRequest* drmInfoRequest); 148a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 149a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 150a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Retrieves the mime type embedded inside the original content. 151a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 152a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 153a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content 154a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return String8 155a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns mime-type of the original content, such as "video/mpeg" 156a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 157a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraString8 onGetOriginalMimeType(int uniqueId, const String8& path); 158a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 159a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 160a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Retrieves the type of the protected object (content, rights, etc..) 161a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * using specified path or mimetype. At least one parameter should be non null 162a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * to retrieve DRM object type. 163a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 164a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 165a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the content or null. 166a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param mimeType Mime type of the content or null. 167a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return type of the DRM content, 168a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * such as DrmObjectType::CONTENT, DrmObjectType::RIGHTS_OBJECT 169a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 170a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraint onGetDrmObjectType(int uniqueId, 171a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const String8& path, 172a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const String8& mimeType); 173a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 174a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 175a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Check whether the given content has valid rights or not. 176a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 177a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 178a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content 179a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param action Action to perform (Action::DEFAULT, Action::PLAY, etc) 180a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return the status of the rights for the protected content, 181a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * such as RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED, etc. 182a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 183a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraint onCheckRightsStatus(int uniqueId, 184a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const String8& path, 185a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int action); 186a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 187a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 188a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Consumes the rights for a content. 189a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * If the reserve parameter is true the rights are reserved until the same 190a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * application calls this api again with the reserve parameter set to false. 191a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 192a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 193a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 194a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param action Action to perform. (Action::DEFAULT, Action::PLAY, etc) 195a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param reserve True if the rights should be reserved. 196a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 197a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 198a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 199a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onConsumeRights(int uniqueId, 200a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 201a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int action, 202a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera bool reserve); 203a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 204a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 205a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Informs the DRM Engine about the playback actions performed on the DRM files. 206a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 207a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 208a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 209a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param playbackStatus Playback action (Playback::START, Playback::STOP, Playback::PAUSE) 210a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param position Position in the file (in milliseconds) where the start occurs. 211a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Only valid together with Playback::START. 212a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 213a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 214a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 215a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifdef USE_64BIT_DRM_API 216a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onSetPlaybackStatus(int uniqueId, 217a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 218a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int playbackStatus, 219a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int64_t position); 220a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#else 221a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onSetPlaybackStatus(int uniqueId, 222a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 223a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int playbackStatus, 224a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int position); 225a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif 226a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 227a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 228a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Validates whether an action on the DRM content is allowed or not. 229a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 230a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 231a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content 232a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param action Action to validate (Action::PLAY, Action::TRANSFER, etc) 233a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param description Detailed description of the action 234a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return true if the action is allowed. 235a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 236a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherabool onValidateAction(int uniqueId, 237a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const String8& path, 238a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int action, 239a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const ActionDescription& description); 240a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 241a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 242a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Removes the rights associated with the given protected content. 243a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Not used for Forward Lock Engine. 244a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 245a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 246a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param path Path of the protected content 247a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 248a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 249a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 250a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onRemoveRights(int uniqueId, const String8& path); 251a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 252a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 253a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Removes all the rights information of each plug-in associated with 254a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM framework. Will be used in master reset but does nothing for 255a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Forward Lock Engine. 256a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 257a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 258a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 259a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 260a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 261a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onRemoveAllRights(int uniqueId); 262a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 263a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 264a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Starts the Forward Lock file conversion session. 265a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Each time the application tries to download a new DRM file 266a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * which needs to be converted, then the application has to 267a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * begin with calling this API. The convertId is used as the conversion session key 268a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * and must not be the same for different convert sessions. 269a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 270a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 271a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param convertId Handle for the convert session 272a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 273a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 274a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 275a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onOpenConvertSession(int uniqueId, int convertId); 276a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 277a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 278a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Accepts and converts the input data which is part of DRM file. 279a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * The resultant converted data and the status is returned in the DrmConvertedInfo 280a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * object. This method will be called each time there is a new block 281a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * of data received by the application. 282a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 283a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 284a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param convertId Handle for the convert session 285a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param inputData Input Data which need to be converted 286a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Return object contains the status of the data conversion, 287a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * the output converted data and offset. In this case the 288a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * application will ignore the offset information. 289a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 290a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmConvertedStatus* onConvertData(int uniqueId, 291a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int convertId, 292a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const DrmBuffer* inputData); 293a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 294a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 295a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Closes the convert session in case of data supply completed or error occurred. 296a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Upon successful conversion of the complete data, it returns signature calculated over 297a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * the entire data used over a conversion session. This signature must be copied to the offset 298a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * mentioned in the DrmConvertedStatus. Signature is used for data integrity protection. 299a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 300a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 301a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param convertId Handle for the convert session 302a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Return object contains the status of the data conversion, 303a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * the header and body signature data. It also informs 304a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * the application about the file offset at which this 305a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * signature data should be written. 306a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 307a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmConvertedStatus* onCloseConvertSession(int uniqueId, int convertId); 308a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 309a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 310a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns the information about the Drm Engine capabilities which includes 311a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * supported MimeTypes and file suffixes. 312a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 313a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 314a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return DrmSupportInfo 315a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * instance which holds the capabilities of a plug-in 316a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 317a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraDrmSupportInfo* onGetSupportInfo(int uniqueId); 318a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 319a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 320a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Open the decrypt session to decrypt the given protected content. 321a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 322a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 323a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the current decryption session 324a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param fd File descriptor of the protected content to be decrypted 325a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param offset Start position of the content 326a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param length The length of the protected content 327a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return 328a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 329a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 330a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifdef USE_64BIT_DRM_API 331a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onOpenDecryptSession(int uniqueId, 332a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 333a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int fd, off64_t offset, off64_t length); 334a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#else 335a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onOpenDecryptSession(int uniqueId, 336a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 337a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int fd, int offset, int length); 338a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif 339a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 340a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 341a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Open the decrypt session to decrypt the given protected content. 342a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 343a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 344a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the current decryption session 345a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uri Path of the protected content to be decrypted 346a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return 347a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 348a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 349a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onOpenDecryptSession(int uniqueId, 350a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 351a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const char* uri); 352a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 353a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 354a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Close the decrypt session for the given handle. 355a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 356a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 357a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 358a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 359a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 360a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 361a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onCloseDecryptSession(int uniqueId, 362a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle); 363a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 364a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 365a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Initialize decryption for the given unit of the protected content. 366a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 367a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 368a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 369a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptUnitId ID which specifies decryption unit, such as track ID 370a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param headerInfo Information for initializing decryption of this decrypUnit 371a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return 372a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 373a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 374a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onInitializeDecryptUnit(int uniqueId, 375a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 376a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int decryptUnitId, 377a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const DrmBuffer* headerInfo); 378a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 379a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 380a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Decrypt the protected content buffers for the given unit. 381a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * This method will be called any number of times, based on number of 382a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * encrypted streams received from application. 383a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 384a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 385a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 386a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptUnitId ID which specifies decryption unit, such as track ID 387a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param encBuffer Encrypted data block 388a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decBuffer Decrypted data block 389a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 390a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns the error code for this API 391a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED 392a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED, 393a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_ERROR_DECRYPT for failure. 394a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 395a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onDecrypt(int uniqueId, 396a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 397a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int decryptUnitId, 398a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera const DrmBuffer* encBuffer, 399a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DrmBuffer** decBuffer); 400a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 401a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 402a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Decrypt the protected content buffers for the given unit. 403a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * This method will be called any number of times, based on number of 404a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * encrypted streams received from application. 405a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 406a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 407a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptId Handle for the decryption session 408a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptUnitId ID Specifies decryption unit, such as track ID 409a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param encBuffer Encrypted data block 410a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decBuffer Decrypted data block 411a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param IV Optional buffer 412a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return status_t 413a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Returns the error code for this API 414a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED 415a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED, 416a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_ERROR_DECRYPT for failure. 417a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 418a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle, 419a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int decryptUnitId, const DrmBuffer* encBuffer, 420a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DrmBuffer** decBuffer, DrmBuffer* IV); 421a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 422a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 423a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Finalize decryption for the given unit of the protected content. 424a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 425a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 426a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 427a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptUnitId ID Specifies decryption unit, such as track ID 428a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return 429a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 430a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 431a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatus_t onFinalizeDecryptUnit(int uniqueId, 432a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 433a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int decryptUnitId); 434a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 435a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 436a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Reads the specified number of bytes from an open DRM file. 437a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 438a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 439a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 440a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param buffer Reference to the buffer that should receive the read data. 441a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param numBytes Number of bytes to read. 442a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 443a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Number of bytes read. 444a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @retval -1 Failure. 445a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 446a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherassize_t onRead(int uniqueId, 447a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 448a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera void* pBuffer, 449a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int numBytes); 450a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 451a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 452a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Updates the file position within an open DRM file. 453a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 454a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 455a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 456a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param offset Offset with which to update the file position. 457a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param whence One of SEEK_SET, SEEK_CUR, and SEEK_END. 458a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * These constants are defined in unistd.h. 459a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 460a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return New file position. 461a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @retval ((off_t)-1) Failure. 462a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 463a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifdef USE_64BIT_DRM_API 464a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraoff64_t onLseek(int uniqueId, 465a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 466a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera off64_t offset, 467a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int whence); 468a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#else 469a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraoff_t onLseek(int uniqueId, 470a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 471a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera off_t offset, 472a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int whence); 473a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif 474a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 475a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 476a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Reads the specified number of bytes from an open DRM file. 477a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 478a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param uniqueId Unique identifier for a session 479a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param decryptHandle Handle for the decryption session 480a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param buffer Reference to the buffer that should receive the read data. 481a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param numBytes Number of bytes to read. 482a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param offset Offset with which to update the file position. 483a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 484a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Number of bytes read. Returns -1 for Failure. 485a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 486a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#ifdef USE_64BIT_DRM_API 487a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherassize_t onPread(int uniqueId, 488a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 489a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera void* buffer, 490a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera ssize_t numBytes, 491a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera off64_t offset); 492a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#else 493a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherassize_t onPread(int uniqueId, 494a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecryptHandle* decryptHandle, 495a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera void* buffer, 496a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera ssize_t numBytes, 497a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera off_t offset); 498a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif 499a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 500a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraprivate: 501a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 502a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 503a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Session Class for Forward Lock Conversion. An object of this class is created 504a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * for every conversion. 505a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 506a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraclass ConvertSession { 507a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera public : 508a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int uniqueId; 509a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera FwdLockConv_Output_t output; 510a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 511a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera ConvertSession() { 512a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera uniqueId = 0; 513a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera memset(&output, 0, sizeof(FwdLockConv_Output_t)); 514a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera } 515a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 516a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera virtual ~ConvertSession() {} 517a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera}; 518a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 519a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 520a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Session Class for Forward Lock decoder. An object of this class is created 521a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * for every decoding session. 522a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 523a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeheraclass DecodeSession { 524a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera public : 525a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera int fileDesc; 526a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera off_t offset; 527a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 528a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecodeSession() { 529a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera fileDesc = -1; 530a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera offset = 0; 531a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera } 532a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 533a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera DecodeSession(int fd) { 534a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera fileDesc = fd; 535a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera offset = 0; 536a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera } 537a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 538a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera virtual ~DecodeSession() {} 539a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera}; 540a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 541a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 542a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Session Map Tables for Conversion and Decoding of forward lock files. 543a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 544a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraSessionMap<ConvertSession*> convertSessionMap; 545a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat DalbeheraSessionMap<DecodeSession*> decodeSessionMap; 546a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 547a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera/** 548a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * Converts the error code from Forward Lock Converter to DrmConvertStatus error code. 549a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 550a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @param Forward Lock Converter error code 551a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * 552a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera * @return Status code from DrmConvertStatus. 553a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera */ 554a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbeherastatic int getConvertedStatus(FwdLockConv_Status_t status); 555a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera}; 556a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 557a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera}; 558a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera 559a3e96bfa89964cbc431080e1b9f4ad8981b5426bPravat Dalbehera#endif /* __FWDLOCKENGINE_H__ */ 560