DrmManager.h revision f355f18aa2cc1706761e373fe19298a9ccc9c75a
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/* 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Copyright (C) 2010 The Android Open Source Project 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Licensed under the Apache License, Version 2.0 (the "License"); 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * you may not use this file except in compliance with the License. 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * You may obtain a copy of the License at 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * http://www.apache.org/licenses/LICENSE-2.0 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * Unless required by applicable law or agreed to in writing, software 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * distributed under the License is distributed on an "AS IS" BASIS, 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * See the License for the specific language governing permissions and 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * limitations under the License. 155f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton */ 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef __DRM_MANAGER_H__ 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define __DRM_MANAGER_H__ 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <utils/Errors.h> 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <utils/threads.h> 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <drm/drm_framework_common.h> 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "IDrmEngine.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "PlugInManager.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "IDrmServiceListener.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace android { 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass IDrmManager; 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmRegistrationInfo; 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmUnregistrationInfo; 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmRightsAcquisitionInfo; 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmConstraints; 343508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Claytonclass DrmMetadata; 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmRights; 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmInfo; 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmInfoStatus; 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmConvertedStatus; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmInfoRequest; 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmSupportInfo; 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ActionDescription; 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/** 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * This is implementation class for DRM Manager. This class delegates the 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * functionality to corresponding DRM Engine. 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * The DrmManagerService class creates an instance of this class. 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner * 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner */ 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DrmManager : public IDrmEngine::OnInfoListener { 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DrmManager(); 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual ~DrmManager(); 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int addUniqueId(bool isNative); 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void removeUniqueId(int uniqueId); 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void addClient(int uniqueId); 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void removeClient(int uniqueId); 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t loadPlugIns(); 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t loadPlugIns(const String8& plugInDirPath); 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t unloadPlugIns(); 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t setDrmServiceListener( 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int uniqueId, const sp<IDrmServiceListener>& drmServiceListener); 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action); 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DrmMetadata* getMetadata(int uniqueId, const String8* path); 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool canHandle(int uniqueId, const String8& path, const String8& mimeType); 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest); 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t saveRights(int uniqueId, const DrmRights& drmRights, 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const String8& rightsPath, const String8& contentPath); 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner String8 getOriginalMimeType(int uniqueId, const String8& path, int fd); 87eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType); 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9012bec71b323dc520f0e985a86e09c4712559e115Greg Clayton int checkRightsStatus(int uniqueId, const String8& path, int action); 9112bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 9212bec71b323dc520f0e985a86e09c4712559e115Greg Clayton status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve); 93eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton 9412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton status_t setPlaybackStatus( 9512bec71b323dc520f0e985a86e09c4712559e115Greg Clayton int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position); 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool validateAction( 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int uniqueId, const String8& path, int action, const ActionDescription& description); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t removeRights(int uniqueId, const String8& path); 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t removeAllRights(int uniqueId); 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int openConvertSession(int uniqueId, const String8& mimeType); 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DrmConvertedStatus* convertData(int uniqueId, int convertId, const DrmBuffer* inputData); 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId); 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t getAllSupportInfo(int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray); 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DecryptHandle* openDecryptSession( 11372b7158235500ae6d4b69ed378cbc36bf6e5cbe1Greg Clayton int uniqueId, int fd, off64_t offset, off64_t length, const char* mime); 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DecryptHandle* openDecryptSession(int uniqueId, const char* uri, const char* mime); 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DecryptHandle* openDecryptSession(int uniqueId, const DrmBuffer& buf, 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const String8& mimeType); 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle); 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int decryptUnitId, const DrmBuffer* headerInfo); 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV); 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId); 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ssize_t pread(int uniqueId, DecryptHandle* decryptHandle, 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void* buffer, ssize_t numBytes, off64_t offset); 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void onInfo(const DrmInfoEvent& event); 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner String8 getSupportedPlugInId(int uniqueId, const String8& path, const String8& mimeType); 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner String8 getSupportedPlugInId(const String8& mimeType); 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner String8 getSupportedPlugInIdFromPath(int uniqueId, const String8& path); 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool canHandle(int uniqueId, const String8& path); 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum { 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner kMaxNumUniqueIds = 0x1000, 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool mUniqueIdArray[kMaxNumUniqueIds]; 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const String8 EMPTY_STRING; 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int mDecryptSessionId; 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int mConvertId; 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mutex mLock; 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mutex mListenerLock; 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mutex mDecryptLock; 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Mutex mConvertLock; 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TPlugInManager<IDrmEngine> mPlugInManager; 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner KeyedVector< DrmSupportInfo, String8 > mSupportInfoToPlugInIdMap; 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner KeyedVector< int, IDrmEngine*> mConvertSessionMap; 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner KeyedVector< int, sp<IDrmServiceListener> > mServiceListeners; 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner KeyedVector< int, IDrmEngine*> mDecryptSessionMap; 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif /* __DRM_MANAGER_H__ */ 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner