1d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/* 2d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Copyright (C) 2010 The Android Open Source Project 3d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 4d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 5d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * you may not use this file except in compliance with the License. 6d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * You may obtain a copy of the License at 7d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 8d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 9d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 10d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Unless required by applicable law or agreed to in writing, software 11d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 12d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * See the License for the specific language governing permissions and 14d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * limitations under the License. 15d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 16d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 17d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#ifndef __DRM_MANAGER_CLIENT_H__ 18d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#define __DRM_MANAGER_CLIENT_H__ 19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 20c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi#include <utils/threads.h> 21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#include <binder/IInterface.h> 22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#include "drm_framework_common.h" 23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshinamespace android { 25d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmInfo; 27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmRights; 28dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimiclass DrmMetadata; 29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmInfoEvent; 30d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmInfoStatus; 31d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmInfoRequest; 32d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmSupportInfo; 33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmConstraints; 34d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmConvertedStatus; 35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmManagerClientImpl; 36d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 38d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * The Native application will instantiate this class and access DRM Framework 39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * services through this class. 40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmManagerClient { 43d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 44d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmManagerClient(); 45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi virtual ~DrmManagerClient(); 47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi class OnInfoListener: virtual public RefBase { 50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 51d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 52f05913aaa0cc96eab32be3431de1a80d405527a1Takeshi Aimi virtual ~OnInfoListener() {} 53f05913aaa0cc96eab32be3431de1a80d405527a1Takeshi Aimi 54f05913aaa0cc96eab32be3431de1a80d405527a1Takeshi Aimi public: 55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi virtual void onInfo(const DrmInfoEvent& event) = 0; 56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi }; 57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * APIs which will be used by native modules (e.g. StageFright) 60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 61d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Open the decrypt session to decrypt the given protected content 65d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] fd File descriptor of the protected content to be decrypted 67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] offset Start position of the content 68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] length The length of the protected content 69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return 70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Handle for the decryption session 71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 72ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang sp<DecryptHandle> openDecryptSession(int fd, off64_t offset, off64_t length); 73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 74d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 75c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi * Open the decrypt session to decrypt the given protected content 76c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi * 77c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi * @param[in] uri Path of the protected content to be decrypted 78c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi * @return 79c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi * Handle for the decryption session 80c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi */ 81ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang sp<DecryptHandle> openDecryptSession(const char* uri); 82c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi 83c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi /** 84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Close the decrypt session for the given handle 85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptHandle Handle for the decryption session 87dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @return status_t 88dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 90ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang status_t closeDecryptSession(sp<DecryptHandle> &decryptHandle); 91d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Consumes the rights for a content. 94d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * If the reserve parameter is true the rights is reserved until the same 95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * application calls this api again with the reserve parameter set to false. 96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptHandle Handle for the decryption session 98d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] action Action to perform. (Action::DEFAULT, Action::PLAY, etc) 99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] reserve True if the rights should be reserved. 100dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @return status_t 101dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure. 102dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * In case license has been expired, DRM_ERROR_LICENSE_EXPIRED will be returned. 103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 104ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang status_t consumeRights(sp<DecryptHandle> &decryptHandle, int action, bool reserve); 105d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 106d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 107d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Informs the DRM engine about the playback actions performed on the DRM files. 108d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptHandle Handle for the decryption session 110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] playbackStatus Playback action (Playback::START, Playback::STOP, Playback::PAUSE) 111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] position Position in the file (in milliseconds) where the start occurs. 112dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Only valid together with Playback::START. 113dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @return status_t 114dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 115d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 116ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang status_t setPlaybackStatus( 117ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang sp<DecryptHandle> &decryptHandle, int playbackStatus, int64_t position); 118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 119d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 120d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Initialize decryption for the given unit of the protected content 121d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptHandle Handle for the decryption session 123d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptUnitId ID which specifies decryption unit, such as track ID 124d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] headerInfo Information for initializing decryption of this decrypUnit 125dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @return status_t 126dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 128dc549d60f98d809f626c99de614960409a847054Takeshi Aimi status_t initializeDecryptUnit( 129ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang sp<DecryptHandle> &decryptHandle, int decryptUnitId, const DrmBuffer* headerInfo); 130d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 131d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 132d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Decrypt the protected content buffers for the given unit 133d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * This method will be called any number of times, based on number of 134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * encrypted streams received from application. 135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptHandle Handle for the decryption session 137d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptUnitId ID which specifies decryption unit, such as track ID 138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] encBuffer Encrypted data block 139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[out] decBuffer Decrypted data block 140dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @param[in] IV Optional buffer 141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return status_t 142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns the error code for this API 143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * DRM_NO_ERROR for success, and one of DRM_ERROR_UNKNOWN, DRM_ERROR_LICENSE_EXPIRED 144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * DRM_ERROR_SESSION_NOT_OPENED, DRM_ERROR_DECRYPT_UNIT_NOT_INITIALIZED, 145d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * DRM_ERROR_DECRYPT for failure. 146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi status_t decrypt( 148ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang sp<DecryptHandle> &decryptHandle, int decryptUnitId, 149dc549d60f98d809f626c99de614960409a847054Takeshi Aimi const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV = NULL); 150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Finalize decryption for the given unit of the protected content 153d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 154d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptHandle Handle for the decryption session 155d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptUnitId ID which specifies decryption unit, such as track ID 156dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @return status_t 157dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 159ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang status_t finalizeDecryptUnit( 160ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang sp<DecryptHandle> &decryptHandle, int decryptUnitId); 161d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 162d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 163d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Reads the specified number of bytes from an open DRM file. 164d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 165d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] decryptHandle Handle for the decryption session 166d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[out] buffer Reference to the buffer that should receive the read data. 167d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] numBytes Number of bytes to read. 168d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] offset Offset with which to update the file position. 169d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 170d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Number of bytes read. Returns -1 for Failure. 171d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 172ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang ssize_t pread(sp<DecryptHandle> &decryptHandle, 173ae7752798a98fc81ff5e6ae69dde2137692106beGloria Wang void* buffer, ssize_t numBytes, off64_t offset); 174d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 175d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 176d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Validates whether an action on the DRM content is allowed or not. 177d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 178d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] path Path of the protected content 179d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] action Action to validate. (Action::DEFAULT, Action::PLAY, etc) 180d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] description Detailed description of the action 181d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return true if the action is allowed. 182d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 183d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool validateAction(const String8& path, int action, const ActionDescription& description); 184d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 185d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 186d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * APIs which are just the underlying implementation for the Java API 187d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 188d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 189d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 190d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 191d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Register a callback to be invoked when the caller required to 192d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * receive necessary information 193d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 194d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] infoListener Listener 195d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return status_t 196d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 197d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 198d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi status_t setOnInfoListener(const sp<DrmManagerClient::OnInfoListener>& infoListener); 199d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 200d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 201d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Get constraint information associated with input content 202d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 203d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] path Path of the protected content 204d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] action Actions defined such as, 205d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Action::DEFAULT, Action::PLAY, etc 206d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return DrmConstraints 207d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * key-value pairs of constraint are embedded in it 208d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @note 209d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * In case of error, return NULL 210d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 211d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmConstraints* getConstraints(const String8* path, const int action); 212d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 213d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 214dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi * Get metadata information associated with input content 215dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi * 216dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi * @param[in] path Path of the protected content 217dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi * @return DrmMetadata 218dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi * key-value pairs of metadata 219dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi * @note 220dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi * In case of error, return NULL 221dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi */ 222dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi DrmMetadata* getMetadata(const String8* path); 223dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi 224dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi /** 225d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Check whether the given mimetype or path can be handled 226d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 227d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] path Path of the content needs to be handled 228d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] mimetype Mimetype of the content needs to be handled 229d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return 230d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * True if DrmManager can handle given path or mime type. 231d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 232d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool canHandle(const String8& path, const String8& mimeType); 233d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 234d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 235d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Executes given drm information based on its type 236d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 237d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] drmInfo Information needs to be processed 238d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return DrmInfoStatus 239d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * instance as a result of processing given input 240d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 241d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmInfoStatus* processDrmInfo(const DrmInfo* drmInfo); 242d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 243d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 244d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves necessary information for registration, unregistration or rights 245d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * acquisition information. 246d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 247d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] drmInfoRequest Request information to retrieve drmInfo 248d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return DrmInfo 249d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * instance as a result of processing given input 250d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 251d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmInfo* acquireDrmInfo(const DrmInfoRequest* drmInfoRequest); 252d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 253d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 254d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Save DRM rights to specified rights path 255d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * and make association with content path 256d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 257d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] drmRights DrmRights to be saved 258d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] rightsPath File path where rights to be saved 259d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] contentPath File path where content was saved 260dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @return status_t 261dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 262d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 263dc549d60f98d809f626c99de614960409a847054Takeshi Aimi status_t saveRights( 264d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi const DrmRights& drmRights, const String8& rightsPath, const String8& contentPath); 265d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 266d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 267d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves the mime type embedded inside the original content 268d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 269d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] path the path of the protected content 270d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return String8 271d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns mime-type of the original content, such as "video/mpeg" 272d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 273d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8 getOriginalMimeType(const String8& path); 274d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 275d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 276d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves the type of the protected object (content, rights, etc..) 277d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * by using specified path or mimetype. At least one parameter should be non null 278d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * to retrieve DRM object type 279d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 280d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] path Path of the content or null. 281d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] mimeType Mime type of the content or null. 282d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return type of the DRM content, 283d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * such as DrmObjectType::CONTENT, DrmObjectType::RIGHTS_OBJECT 284d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 285d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int getDrmObjectType(const String8& path, const String8& mimeType); 286d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 287d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 288d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Check whether the given content has valid rights or not 289d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 290d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] path Path of the protected content 291d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] action Action to perform 292d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return the status of the rights for the protected content, 293d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * such as RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED, etc. 294d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 295d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int checkRightsStatus(const String8& path, int action); 296d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 297d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 298d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Removes the rights associated with the given protected content 299d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 300d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] path Path of the protected content 301dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @return status_t 302dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 303d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 304dc549d60f98d809f626c99de614960409a847054Takeshi Aimi status_t removeRights(const String8& path); 305d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 306d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 307d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Removes all the rights information of each plug-in associated with 308d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * DRM framework. Will be used in master reset 309d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 310dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * @return status_t 311dc549d60f98d809f626c99de614960409a847054Takeshi Aimi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 312d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 313dc549d60f98d809f626c99de614960409a847054Takeshi Aimi status_t removeAllRights(); 314d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 315d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 316d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * This API is for Forward Lock DRM. 317d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Each time the application tries to download a new DRM file 318d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * which needs to be converted, then the application has to 319d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * begin with calling this API. 320d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 321d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] convertId Handle for the convert session 322d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] mimeType Description/MIME type of the input data packet 323d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Return handle for the convert session 324d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 325d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int openConvertSession(const String8& mimeType); 326d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 327d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 328d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Passes the input data which need to be converted. The resultant 329d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * converted data and the status is returned in the DrmConvertedInfo 330d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * object. This method will be called each time there are new block 331d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * of data received by the application. 332d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 333d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] convertId Handle for the convert session 334d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] inputData Input Data which need to be converted 335d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Return object contains the status of the data conversion, 336d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the output converted data and offset. In this case the 337d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * application will ignore the offset information. 338d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 339d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmConvertedStatus* convertData(int convertId, const DrmBuffer* inputData); 340d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 341d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 342d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * When there is no more data which need to be converted or when an 343d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * error occurs that time the application has to inform the Drm agent 344d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * via this API. Upon successful conversion of the complete data, 345d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the agent will inform that where the header and body signature 346d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * should be added. This signature appending is needed to integrity 347d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * protect the converted file. 348d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 349d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] convertId Handle for the convert session 350d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Return object contains the status of the data conversion, 351d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the header and body signature data. It also informs 352d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the application on which offset these signature data 353d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * should be appended. 354d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 355d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmConvertedStatus* closeConvertSession(int convertId); 356d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 357d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 358d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves all DrmSupportInfo instance that native DRM framework can handle. 359d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * This interface is meant to be used by JNI layer 360d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 361d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[out] length Number of elements in drmSupportInfoArray 362d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[out] drmSupportInfoArray Array contains all DrmSupportInfo 363d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * that native DRM framework can handle 364d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return status_t 365d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 366d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 367d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi status_t getAllSupportInfo(int* length, DrmSupportInfo** drmSupportInfoArray); 368d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 369d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiprivate: 370d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int mUniqueId; 3714c87a75073987e30b36f6be781cd10f696876ba4Gloria Wang sp<DrmManagerClientImpl> mDrmManagerClientImpl; 372d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}; 373d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 374d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}; 375d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 376d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#endif /* __DRM_MANAGER_CLIENT_H__ */ 377d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 378