IDrmManagerService.h revision 27ed8ad2db653f6ac07dcf8bcc05e2409c8bb024
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef __IDRM_MANAGER_SERVICE_H__ 18#define __IDRM_MANAGER_SERVICE_H__ 19 20#include <utils/RefBase.h> 21#include <binder/IInterface.h> 22#include <binder/Parcel.h> 23#include <drm/drm_framework_common.h> 24#include "IDrmServiceListener.h" 25 26namespace android { 27 28class DrmContentIds; 29class DrmConstraints; 30class DrmRights; 31class DrmInfo; 32class DrmInfoStatus; 33class DrmInfoRequest; 34class DrmSupportInfo; 35class DrmConvertedStatus; 36class String8; 37class ActionDescription; 38 39/** 40 * This is the interface class for DRM Manager service. 41 * 42 */ 43class IDrmManagerService : public IInterface 44{ 45public: 46 enum { 47 LOAD_PLUGINS = IBinder::FIRST_CALL_TRANSACTION, 48 LOAD_PLUGINS_FROM_PATH, 49 SET_DRM_SERVICE_LISTENER, 50 UNLOAD_PLUGINS, 51 INSTALL_DRM_ENGINE, 52 GET_CONSTRAINTS_FROM_CONTENT, 53 CAN_HANDLE, 54 PROCESS_DRM_INFO, 55 ACQUIRE_DRM_INFO, 56 SAVE_RIGHTS, 57 GET_ORIGINAL_MIMETYPE, 58 GET_DRM_OBJECT_TYPE, 59 CHECK_RIGHTS_STATUS, 60 CONSUME_RIGHTS, 61 SET_PLAYBACK_STATUS, 62 VALIDATE_ACTION, 63 REMOVE_RIGHTS, 64 REMOVE_ALL_RIGHTS, 65 OPEN_CONVERT_SESSION, 66 CONVERT_DATA, 67 CLOSE_CONVERT_SESSION, 68 GET_ALL_SUPPORT_INFO, 69 OPEN_DECRYPT_SESSION, 70 CLOSE_DECRYPT_SESSION, 71 INITIALIZE_DECRYPT_UNIT, 72 DECRYPT, 73 FINALIZE_DECRYPT_UNIT, 74 PREAD 75 }; 76 77public: 78 DECLARE_META_INTERFACE(DrmManagerService); 79 80public: 81 virtual status_t loadPlugIns(int uniqueId) = 0; 82 83 virtual status_t loadPlugIns(int uniqueId, const String8& plugInDirPath) = 0; 84 85 virtual status_t setDrmServiceListener( 86 int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0; 87 88 virtual status_t unloadPlugIns(int uniqueId) = 0; 89 90 virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile) = 0; 91 92 virtual DrmConstraints* getConstraints( 93 int uniqueId, const String8* path, const int action) = 0; 94 95 virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0; 96 97 virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0; 98 99 virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0; 100 101 virtual void saveRights(int uniqueId, const DrmRights& drmRights, 102 const String8& rightsPath, const String8& contentPath) = 0; 103 104 virtual String8 getOriginalMimeType(int uniqueId, const String8& path) = 0; 105 106 virtual int getDrmObjectType( 107 int uniqueId, const String8& path, const String8& mimeType) = 0; 108 109 virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0; 110 111 virtual void consumeRights( 112 int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0; 113 114 virtual void setPlaybackStatus( 115 int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position) = 0; 116 117 virtual bool validateAction( 118 int uniqueId, const String8& path, 119 int action, const ActionDescription& description) = 0; 120 121 virtual void removeRights(int uniqueId, const String8& path) = 0; 122 123 virtual void removeAllRights(int uniqueId) = 0; 124 125 virtual int openConvertSession(int uniqueId, const String8& mimeType) = 0; 126 127 virtual DrmConvertedStatus* convertData( 128 int uniqueId, int convertId, const DrmBuffer* inputData) = 0; 129 130 virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId) = 0; 131 132 virtual status_t getAllSupportInfo( 133 int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0; 134 135 virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length) = 0; 136 137 virtual void closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0; 138 139 virtual void initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 140 int decryptUnitId, const DrmBuffer* headerInfo) = 0; 141 142 virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, 143 int decryptUnitId, const DrmBuffer* encBuffer, DrmBuffer** decBuffer) = 0; 144 145 virtual void finalizeDecryptUnit( 146 int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0; 147 148 virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle, 149 void* buffer, ssize_t numBytes,off_t offset) = 0; 150}; 151 152/** 153 * This is the Binder implementation class for DRM Manager service. 154 */ 155class BpDrmManagerService: public BpInterface<IDrmManagerService> 156{ 157public: 158 BpDrmManagerService(const sp<IBinder>& impl) 159 : BpInterface<IDrmManagerService>(impl) {} 160 161 virtual status_t loadPlugIns(int uniqueId); 162 163 virtual status_t loadPlugIns(int uniqueId, const String8& plugInDirPath); 164 165 virtual status_t setDrmServiceListener( 166 int uniqueId, const sp<IDrmServiceListener>& infoListener); 167 168 virtual status_t unloadPlugIns(int uniqueId); 169 170 virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile); 171 172 virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action); 173 174 virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType); 175 176 virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo); 177 178 virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest); 179 180 virtual void saveRights(int uniqueId, const DrmRights& drmRights, 181 const String8& rightsPath, const String8& contentPath); 182 183 virtual String8 getOriginalMimeType(int uniqueId, const String8& path); 184 185 virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType); 186 187 virtual int checkRightsStatus(int uniqueId, const String8& path, int action); 188 189 virtual void consumeRights( 190 int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve); 191 192 virtual void setPlaybackStatus( 193 int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position); 194 195 virtual bool validateAction( 196 int uniqueId, const String8& path, int action, const ActionDescription& description); 197 198 virtual void removeRights(int uniqueId, const String8& path); 199 200 virtual void removeAllRights(int uniqueId); 201 202 virtual int openConvertSession(int uniqueId, const String8& mimeType); 203 204 virtual DrmConvertedStatus* convertData( 205 int uniqueId, int convertId, const DrmBuffer* inputData); 206 207 virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId); 208 209 virtual status_t getAllSupportInfo( 210 int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray); 211 212 virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length); 213 214 virtual void closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle); 215 216 virtual void initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 217 int decryptUnitId, const DrmBuffer* headerInfo); 218 219 virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, 220 int decryptUnitId, const DrmBuffer* encBuffer, DrmBuffer** decBuffer); 221 222 virtual void finalizeDecryptUnit( 223 int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId); 224 225 virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle, 226 void* buffer, ssize_t numBytes, off_t offset); 227}; 228 229/** 230 * This is the Binder implementation class for DRM Manager service. 231 */ 232class BnDrmManagerService: public BnInterface<IDrmManagerService> 233{ 234public: 235 virtual status_t onTransact( 236 uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0); 237}; 238 239}; 240 241#endif /* __IDRM_MANAGER_SERVICE_H__ */ 242 243