FwdLockEngine.h revision bf5b3b29e31b293313788d7464cfb258ac0da803
14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/* 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Copyright (C) 2010 The Android Open Source Project 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Licensed under the Apache License, Version 2.0 (the "License"); 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * you may not use this file except in compliance with the License. 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * You may obtain a copy of the License at 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * http://www.apache.org/licenses/LICENSE-2.0 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Unless required by applicable law or agreed to in writing, software 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * distributed under the License is distributed on an "AS IS" BASIS, 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * See the License for the specific language governing permissions and 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * limitations under the License. 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifndef __FWDLOCKENGINE_H__ 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#define __FWDLOCKENGINE_H__ 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmEngineBase.h> 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmConstraints.h> 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmRights.h> 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmInfo.h> 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmInfoStatus.h> 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmConvertedStatus.h> 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmInfoRequest.h> 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmSupportInfo.h> 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include <DrmInfoEvent.h> 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include "SessionMap.h" 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#include "FwdLockConv.h" 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaonamespace android { 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Forward Lock Engine class. 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass FwdLockEngine : public android::DrmEngineBase { 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaopublic: 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao FwdLockEngine(); 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao virtual ~FwdLockEngine(); 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoprotected: 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Get constraint information associated with input content. 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param path Path of the protected content 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param action Actions defined such as, 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Action::DEFAULT, Action::PLAY, etc 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return DrmConstraints 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * key-value pairs of constraint are embedded in it 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @note 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * In case of error, return NULL 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 574adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDrmConstraints* onGetConstraints(int uniqueId, const String8* path, int action); 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Get metadata information associated with input content. 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param path Path of the protected content 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return DrmMetadata 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * For Forward Lock engine, it returns an empty object 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @note 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * In case of error, returns NULL 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 694adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDrmMetadata* onGetMetadata(int uniqueId, const String8* path); 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Initialize plug-in. 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onInitialize(int uniqueId); 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Register a callback to be invoked when the caller required to 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * receive necessary information. 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param infoListener Listener 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onSetOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener); 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Terminate the plug-in and release resources bound to it. 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onTerminate(int uniqueId); 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Get whether the given content can be handled by this plugin or not. 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param path Path to the protected object 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return bool 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns true if this plugin can handle , false in case of not able to handle 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaobool onCanHandle(int uniqueId, const String8& path); 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Processes the given DRM information as appropriate for its type. 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Not used for Forward Lock Engine. 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param drmInfo Information that needs to be processed 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return DrmInfoStatus 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * instance as a result of processing given input 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDrmInfoStatus* onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo); 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Save DRM rights to specified rights path 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * and make association with content path. 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param drmRights DrmRights to be saved 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param rightsPath File path where rights to be saved 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param contentPath File path where content was saved 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onSaveRights(int uniqueId, 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const DrmRights& drmRights, 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const String8& rightsPath, 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const String8& contentPath); 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Retrieves necessary information for registration, unregistration or rights 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * acquisition information. 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param drmInfoRequest Request information to retrieve drmInfo 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return DrmInfo 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * instance as a result of processing given input 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDrmInfo* onAcquireDrmInfo(int uniqueId, 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const DrmInfoRequest* drmInfoRequest); 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Retrieves the mime type embedded inside the original content. 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param path Path of the conent or null. 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param fd descriptor of the protected content as a file source 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return String8 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns mime-type of the original content, such as "video/mpeg" 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoString8 onGetOriginalMimeType(int uniqueId, const String8& path, int fd); 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Retrieves the type of the protected object (content, rights, etc..) 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * using specified path or mimetype. At least one parameter should be non null 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * to retrieve DRM object type. 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param path Path of the content or null. 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param mimeType Mime type of the content or null. 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return type of the DRM content, 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * such as DrmObjectType::CONTENT, DrmObjectType::RIGHTS_OBJECT 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoint onGetDrmObjectType(int uniqueId, 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const String8& path, 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const String8& mimeType); 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Check whether the given content has valid rights or not. 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param path Path of the protected content 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param action Action to perform (Action::DEFAULT, Action::PLAY, etc) 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return the status of the rights for the protected content, 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * such as RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED, etc. 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoint onCheckRightsStatus(int uniqueId, 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const String8& path, 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int action); 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Consumes the rights for a content. 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * If the reserve parameter is true the rights are reserved until the same 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * application calls this api again with the reserve parameter set to false. 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param action Action to perform. (Action::DEFAULT, Action::PLAY, etc) 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param reserve True if the rights should be reserved. 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onConsumeRights(int uniqueId, 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int action, 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bool reserve); 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Informs the DRM Engine about the playback actions performed on the DRM files. 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param playbackStatus Playback action (Playback::START, Playback::STOP, Playback::PAUSE) 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param position Position in the file (in milliseconds) where the start occurs. 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Only valid together with Playback::START. 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef USE_64BIT_DRM_API 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onSetPlaybackStatus(int uniqueId, 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int playbackStatus, 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int64_t position); 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onSetPlaybackStatus(int uniqueId, 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int playbackStatus, 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int position); 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Validates whether an action on the DRM content is allowed or not. 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param path Path of the protected content 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param action Action to validate (Action::PLAY, Action::TRANSFER, etc) 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param description Detailed description of the action 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return true if the action is allowed. 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaobool onValidateAction(int uniqueId, 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const String8& path, 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int action, 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const ActionDescription& description); 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Removes the rights associated with the given protected content. 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Not used for Forward Lock Engine. 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param path Path of the protected content 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onRemoveRights(int uniqueId, const String8& path); 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Removes all the rights information of each plug-in associated with 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM framework. Will be used in master reset but does nothing for 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Forward Lock Engine. 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onRemoveAllRights(int uniqueId); 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Starts the Forward Lock file conversion session. 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Each time the application tries to download a new DRM file 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * which needs to be converted, then the application has to 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * begin with calling this API. The convertId is used as the conversion session key 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * and must not be the same for different convert sessions. 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param convertId Handle for the convert session 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onOpenConvertSession(int uniqueId, int convertId); 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Accepts and converts the input data which is part of DRM file. 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * The resultant converted data and the status is returned in the DrmConvertedInfo 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * object. This method will be called each time there is a new block 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * of data received by the application. 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param convertId Handle for the convert session 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param inputData Input Data which need to be converted 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return Return object contains the status of the data conversion, 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * the output converted data and offset. In this case the 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * application will ignore the offset information. 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDrmConvertedStatus* onConvertData(int uniqueId, 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int convertId, 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const DrmBuffer* inputData); 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Closes the convert session in case of data supply completed or error occurred. 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Upon successful conversion of the complete data, it returns signature calculated over 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * the entire data used over a conversion session. This signature must be copied to the offset 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * mentioned in the DrmConvertedStatus. Signature is used for data integrity protection. 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param convertId Handle for the convert session 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return Return object contains the status of the data conversion, 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * the header and body signature data. It also informs 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * the application about the file offset at which this 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * signature data should be written. 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDrmConvertedStatus* onCloseConvertSession(int uniqueId, int convertId); 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns the information about the Drm Engine capabilities which includes 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * supported MimeTypes and file suffixes. 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return DrmSupportInfo 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * instance which holds the capabilities of a plug-in 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoDrmSupportInfo* onGetSupportInfo(int uniqueId); 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Open the decrypt session to decrypt the given protected content. 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the current decryption session 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param fd File descriptor of the protected content to be decrypted 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param offset Start position of the content 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param length The length of the protected content 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef USE_64BIT_DRM_API 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onOpenDecryptSession(int uniqueId, 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int fd, off64_t offset, off64_t length); 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onOpenDecryptSession(int uniqueId, 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int fd, int offset, int length); 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Open the decrypt session to decrypt the given protected content. 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the current decryption session 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uri Path of the protected content to be decrypted 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onOpenDecryptSession(int uniqueId, 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const char* uri); 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Close the decrypt session for the given handle. 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onCloseDecryptSession(int uniqueId, 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle); 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Initialize decryption for the given unit of the protected content. 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptUnitId ID which specifies decryption unit, such as track ID 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param headerInfo Information for initializing decryption of this decrypUnit 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onInitializeDecryptUnit(int uniqueId, 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int decryptUnitId, 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const DrmBuffer* headerInfo); 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Decrypt the protected content buffers for the given unit. 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * This method will be called any number of times, based on number of 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * encrypted streams received from application. 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptUnitId ID which specifies decryption unit, such as track ID 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param encBuffer Encrypted data block 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decBuffer Decrypted data block 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns the error code for this API 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED 3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED, 3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_ERROR_DECRYPT for failure. 3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onDecrypt(int uniqueId, 3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int decryptUnitId, 3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao const DrmBuffer* encBuffer, 4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DrmBuffer** decBuffer); 4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Decrypt the protected content buffers for the given unit. 4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * This method will be called any number of times, based on number of 4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * encrypted streams received from application. 4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptId Handle for the decryption session 4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptUnitId ID Specifies decryption unit, such as track ID 4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param encBuffer Encrypted data block 4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decBuffer Decrypted data block 4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param IV Optional buffer 4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return status_t 4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Returns the error code for this API 4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED 4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED, 4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_ERROR_DECRYPT for failure. 4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle, 4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int decryptUnitId, const DrmBuffer* encBuffer, 4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DrmBuffer** decBuffer, DrmBuffer* IV); 4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Finalize decryption for the given unit of the protected content. 4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptUnitId ID Specifies decryption unit, such as track ID 4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return 4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success 4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatus_t onFinalizeDecryptUnit(int uniqueId, 4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int decryptUnitId); 4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Reads the specified number of bytes from an open DRM file. 4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param buffer Reference to the buffer that should receive the read data. 4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param numBytes Number of bytes to read. 4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return Number of bytes read. 4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @retval -1 Failure. 4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaossize_t onRead(int uniqueId, 4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao void* pBuffer, 4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int numBytes); 4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Updates the file position within an open DRM file. 4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param offset Offset with which to update the file position. 4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param whence One of SEEK_SET, SEEK_CUR, and SEEK_END. 4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * These constants are defined in unistd.h. 4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return New file position. 4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @retval ((off_t)-1) Failure. 4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef USE_64BIT_DRM_API 4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaooff64_t onLseek(int uniqueId, 4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao off64_t offset, 4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int whence); 4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else 4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaooff_t onLseek(int uniqueId, 4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao off_t offset, 4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int whence); 4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif 4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Reads the specified number of bytes from an open DRM file. 4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param uniqueId Unique identifier for a session 4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param decryptHandle Handle for the decryption session 4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param buffer Reference to the buffer that should receive the read data. 4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param numBytes Number of bytes to read. 4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param offset Offset with which to update the file position. 4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return Number of bytes read. Returns -1 for Failure. 4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#ifdef USE_64BIT_DRM_API 4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaossize_t onPread(int uniqueId, 4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao void* buffer, 4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ssize_t numBytes, 4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao off64_t offset); 4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#else 4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaossize_t onPread(int uniqueId, 4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecryptHandle* decryptHandle, 4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao void* buffer, 4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ssize_t numBytes, 4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao off_t offset); 4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif 5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoprivate: 5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao static const String8 Description; 5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao static const String8 FileSuffixes[]; 5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao static const String8 MimeTypes[]; 5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao static bool IsFileSuffixSupported(const String8& suffix); 5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao static bool IsMimeTypeSupported(const String8& mime); 5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao static void AddSupportedMimeTypes(DrmSupportInfo *info); 5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao static void AddSupportedFileSuffixes(DrmSupportInfo *info); 5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Session Class for Forward Lock Conversion. An object of this class is created 5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * for every conversion. 5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ConvertSession { 5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao public : 5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int uniqueId; 5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao FwdLockConv_Output_t output; 5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ConvertSession() { 5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao uniqueId = 0; 5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao memset(&output, 0, sizeof(FwdLockConv_Output_t)); 5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao } 5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao virtual ~ConvertSession() {} 5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao}; 5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Session Class for Forward Lock decoder. An object of this class is created 5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * for every decoding session. 5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass DecodeSession { 5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao public : 5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao int fileDesc; 5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao off_t offset; 5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecodeSession() { 5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao fileDesc = -1; 5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao offset = 0; 5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao } 5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao DecodeSession(int fd) { 5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao fileDesc = fd; 5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao offset = 0; 5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao } 5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao virtual ~DecodeSession() {} 5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao}; 5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Session Map Tables for Conversion and Decoding of forward lock files. 5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 5534adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoSessionMap<ConvertSession*> convertSessionMap; 5544adfde8bc82dd39f59e0445588c3e599ada477dJosh GaoSessionMap<DecodeSession*> decodeSessionMap; 5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao/** 5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * Converts the error code from Forward Lock Converter to DrmConvertStatus error code. 5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @param Forward Lock Converter error code 5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * 5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao * @return Status code from DrmConvertStatus. 5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao */ 5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaostatic int getConvertedStatus(FwdLockConv_Status_t status); 5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao}; 5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao}; 5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#endif /* __FWDLOCKENGINE_H__ */ 5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao