127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/* 227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project 327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License. 627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at 727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software 1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and 1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License. 1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#ifndef __DRM_MANAGER_SERVICE_H__ 1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#define __DRM_MANAGER_SERVICE_H__ 1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <utils/RefBase.h> 2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <utils/KeyedVector.h> 2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <binder/IInterface.h> 2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <binder/Parcel.h> 2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include "IDrmManagerService.h" 2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include "IDrmServiceListener.h" 2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshinamespace android { 2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmManager; 3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass String8; 3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass Mutex; 3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is the implementation class for DRM manager service. This delegates 3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * the responsibility to DrmManager. 3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * The instance of this class is created while starting the DRM manager service. 3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmManagerService : public BnDrmManagerService { 4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static void instantiate(); 4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmManagerService(); 4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi virtual ~DrmManagerService(); 4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 498f00151cbe693d52f3e233757c57fab3b6396d21Gloria Wang int addUniqueId(bool isNative); 502272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi 512272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi void removeUniqueId(int uniqueId); 522272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi 53e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi void addClient(int uniqueId); 5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 55e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi void removeClient(int uniqueId); 5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi status_t setDrmServiceListener( 5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int uniqueId, const sp<IDrmServiceListener>& drmServiceListener); 5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi status_t installDrmEngine(int uniqueId, const String8& drmEngineFile); 6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action); 6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 643473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi DrmMetadata* getMetadata(int uniqueId, const String8* path); 653473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi bool canHandle(int uniqueId, const String8& path, const String8& mimeType); 6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo); 6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest); 7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 722272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t saveRights(int uniqueId, const DrmRights& drmRights, 7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi const String8& rightsPath, const String8& contentPath); 7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 75bf5b3b29e31b293313788d7464cfb258ac0da803James Dong String8 getOriginalMimeType(int uniqueId, const String8& path, int fd); 7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType); 7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int checkRightsStatus(int uniqueId, const String8& path,int action); 8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 812272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve); 8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 832272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t setPlaybackStatus( 84a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position); 8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi bool validateAction(int uniqueId, const String8& path, 8727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int action, const ActionDescription& description); 8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 892272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t removeRights(int uniqueId, const String8& path); 9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 912272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t removeAllRights(int uniqueId); 9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int openConvertSession(int uniqueId, const String8& mimeType); 9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmConvertedStatus* convertData(int uniqueId, int convertId, const DrmBuffer* inputData); 9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId); 9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi status_t getAllSupportInfo(int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray); 10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1019d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong DecryptHandle* openDecryptSession( 1029d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong int uniqueId, int fd, off64_t offset, off64_t length, const char *mime); 10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1049d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong DecryptHandle* openDecryptSession( 1059d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong int uniqueId, const char* uri, const char* mime); 106e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi 107cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi DecryptHandle* openDecryptSession(int uniqueId, const DrmBuffer& buf, 108cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi const String8& mimeType); 109cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi 1102272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle); 11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1122272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int decryptUnitId, const DrmBuffer* headerInfo); 11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1152272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 1162272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV); 11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1182272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId); 11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi ssize_t pread(int uniqueId, DecryptHandle* decryptHandle, 121a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang void* buffer, ssize_t numBytes, off64_t offset); 12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1238635b7b095fbf7ffc63d3ce791891a9116ace1f6James Dong virtual status_t dump(int fd, const Vector<String16>& args); 1248635b7b095fbf7ffc63d3ce791891a9116ace1f6James Dong 12527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmManager* mDrmManager; 12727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 12827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 12927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 13027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __DRM_MANAGER_SERVICE_H__ */ 13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 133