DrmManagerService.h revision 2272ee27d9022d173b6eab45c409b3c3f57f30ec
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright (C) 2010 The Android Open Source Project 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * you may not use this file except in compliance with the License. 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * You may obtain a copy of the License at 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * distributed under the License is distributed on an "AS IS" BASIS, 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See the License for the specific language governing permissions and 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * limitations under the License. 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef __DRM_MANAGER_SERVICE_H__ 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define __DRM_MANAGER_SERVICE_H__ 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/RefBase.h> 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/KeyedVector.h> 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <binder/IInterface.h> 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <binder/Parcel.h> 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "IDrmManagerService.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "IDrmServiceListener.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DrmManager; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class String8; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Mutex; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)/** 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) * This is the implementation class for DRM manager service. This delegates 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) * the responsibility to DrmManager. 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * The instance of this class is created while starting the DRM manager service. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DrmManagerService : public BnDrmManagerService { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public: 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void instantiate(); 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private: 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DrmManagerService(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DrmManagerService(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)public: 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int addUniqueId(int uniqueId); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void removeUniqueId(int uniqueId); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t loadPlugIns(int uniqueId); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t loadPlugIns(int uniqueId, const String8& plugInDirPath); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t setDrmServiceListener( 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int uniqueId, const sp<IDrmServiceListener>& drmServiceListener); 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t unloadPlugIns(int uniqueId); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t installDrmEngine(int uniqueId, const String8& drmEngineFile); 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action); 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool canHandle(int uniqueId, const String8& path, const String8& mimeType); 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo); 69558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t saveRights(int uniqueId, const DrmRights& drmRights, 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const String8& rightsPath, const String8& contentPath); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) String8 getOriginalMimeType(int uniqueId, const String8& path); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType); 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int checkRightsStatus(int uniqueId, const String8& path,int action); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t setPlaybackStatus( 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool validateAction(int uniqueId, const String8& path, 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int action, const ActionDescription& description); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t removeRights(int uniqueId, const String8& path); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t removeAllRights(int uniqueId); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int openConvertSession(int uniqueId, const String8& mimeType); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DrmConvertedStatus* convertData(int uniqueId, int convertId, const DrmBuffer* inputData); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId); 98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t getAllSupportInfo(int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray); 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length); 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int decryptUnitId, const DrmBuffer* headerInfo); 1070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV); 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ssize_t pread(int uniqueId, DecryptHandle* decryptHandle, 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void* buffer, ssize_t numBytes, off_t offset); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private: 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DrmManager* mDrmManager; 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif /* __DRM_MANAGER_SERVICE_H__ */ 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)