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