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