IDrmManagerService.h revision 3473846f64f5b28e1cbeb70ef5867073fc93159e
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 DrmMetadata; 31class DrmRights; 32class DrmInfo; 33class DrmInfoStatus; 34class DrmInfoRequest; 35class DrmSupportInfo; 36class DrmConvertedStatus; 37class String8; 38class ActionDescription; 39 40/** 41 * This is the interface class for DRM Manager service. 42 * 43 */ 44class IDrmManagerService : public IInterface 45{ 46public: 47 enum { 48 ADD_UNIQUEID = IBinder::FIRST_CALL_TRANSACTION, 49 REMOVE_UNIQUEID, 50 ADD_CLIENT, 51 REMOVE_CLIENT, 52 SET_DRM_SERVICE_LISTENER, 53 INSTALL_DRM_ENGINE, 54 GET_CONSTRAINTS_FROM_CONTENT, 55 GET_METADATA_FROM_CONTENT, 56 CAN_HANDLE, 57 PROCESS_DRM_INFO, 58 ACQUIRE_DRM_INFO, 59 SAVE_RIGHTS, 60 GET_ORIGINAL_MIMETYPE, 61 GET_DRM_OBJECT_TYPE, 62 CHECK_RIGHTS_STATUS, 63 CONSUME_RIGHTS, 64 SET_PLAYBACK_STATUS, 65 VALIDATE_ACTION, 66 REMOVE_RIGHTS, 67 REMOVE_ALL_RIGHTS, 68 OPEN_CONVERT_SESSION, 69 CONVERT_DATA, 70 CLOSE_CONVERT_SESSION, 71 GET_ALL_SUPPORT_INFO, 72 OPEN_DECRYPT_SESSION, 73 OPEN_DECRYPT_SESSION_FROM_URI, 74 CLOSE_DECRYPT_SESSION, 75 INITIALIZE_DECRYPT_UNIT, 76 DECRYPT, 77 FINALIZE_DECRYPT_UNIT, 78 PREAD 79 }; 80 81public: 82 DECLARE_META_INTERFACE(DrmManagerService); 83 84public: 85 virtual int addUniqueId(int uniqueId) = 0; 86 87 virtual void removeUniqueId(int uniqueId) = 0; 88 89 virtual void addClient(int uniqueId) = 0; 90 91 virtual void removeClient(int uniqueId) = 0; 92 93 virtual status_t setDrmServiceListener( 94 int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0; 95 96 virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile) = 0; 97 98 virtual DrmConstraints* getConstraints( 99 int uniqueId, const String8* path, const int action) = 0; 100 101 virtual DrmMetadata* getMetadata(int uniqueId, const String8* path) = 0; 102 103 virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0; 104 105 virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0; 106 107 virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0; 108 109 virtual status_t saveRights(int uniqueId, const DrmRights& drmRights, 110 const String8& rightsPath, const String8& contentPath) = 0; 111 112 virtual String8 getOriginalMimeType(int uniqueId, const String8& path) = 0; 113 114 virtual int getDrmObjectType( 115 int uniqueId, const String8& path, const String8& mimeType) = 0; 116 117 virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0; 118 119 virtual status_t consumeRights( 120 int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0; 121 122 virtual status_t setPlaybackStatus( 123 int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position) = 0; 124 125 virtual bool validateAction( 126 int uniqueId, const String8& path, 127 int action, const ActionDescription& description) = 0; 128 129 virtual status_t removeRights(int uniqueId, const String8& path) = 0; 130 131 virtual status_t removeAllRights(int uniqueId) = 0; 132 133 virtual int openConvertSession(int uniqueId, const String8& mimeType) = 0; 134 135 virtual DrmConvertedStatus* convertData( 136 int uniqueId, int convertId, const DrmBuffer* inputData) = 0; 137 138 virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId) = 0; 139 140 virtual status_t getAllSupportInfo( 141 int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0; 142 143 virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length) = 0; 144 145 virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri) = 0; 146 147 virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0; 148 149 virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 150 int decryptUnitId, const DrmBuffer* headerInfo) = 0; 151 152 virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 153 const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0; 154 155 virtual status_t finalizeDecryptUnit( 156 int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0; 157 158 virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle, 159 void* buffer, ssize_t numBytes,off_t offset) = 0; 160}; 161 162/** 163 * This is the Binder implementation class for DRM Manager service. 164 */ 165class BpDrmManagerService: public BpInterface<IDrmManagerService> 166{ 167public: 168 BpDrmManagerService(const sp<IBinder>& impl) 169 : BpInterface<IDrmManagerService>(impl) {} 170 171 virtual int addUniqueId(int uniqueId); 172 173 virtual void removeUniqueId(int uniqueId); 174 175 virtual void addClient(int uniqueId); 176 177 virtual void removeClient(int uniqueId); 178 179 virtual status_t setDrmServiceListener( 180 int uniqueId, const sp<IDrmServiceListener>& infoListener); 181 182 virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile); 183 184 virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action); 185 186 virtual DrmMetadata* getMetadata(int uniqueId, const String8* path); 187 188 virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType); 189 190 virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo); 191 192 virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest); 193 194 virtual status_t saveRights(int uniqueId, const DrmRights& drmRights, 195 const String8& rightsPath, const String8& contentPath); 196 197 virtual String8 getOriginalMimeType(int uniqueId, const String8& path); 198 199 virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType); 200 201 virtual int checkRightsStatus(int uniqueId, const String8& path, int action); 202 203 virtual status_t consumeRights( 204 int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve); 205 206 virtual status_t setPlaybackStatus( 207 int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position); 208 209 virtual bool validateAction( 210 int uniqueId, const String8& path, int action, const ActionDescription& description); 211 212 virtual status_t removeRights(int uniqueId, const String8& path); 213 214 virtual status_t removeAllRights(int uniqueId); 215 216 virtual int openConvertSession(int uniqueId, const String8& mimeType); 217 218 virtual DrmConvertedStatus* convertData( 219 int uniqueId, int convertId, const DrmBuffer* inputData); 220 221 virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId); 222 223 virtual status_t getAllSupportInfo( 224 int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray); 225 226 virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length); 227 228 virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri); 229 230 virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle); 231 232 virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, 233 int decryptUnitId, const DrmBuffer* headerInfo); 234 235 virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, 236 const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV); 237 238 virtual status_t finalizeDecryptUnit( 239 int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId); 240 241 virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle, 242 void* buffer, ssize_t numBytes, off_t offset); 243}; 244 245/** 246 * This is the Binder implementation class for DRM Manager service. 247 */ 248class BnDrmManagerService: public BnInterface<IDrmManagerService> 249{ 250public: 251 virtual status_t onTransact( 252 uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0); 253}; 254 255}; 256 257#endif /* __IDRM_MANAGER_SERVICE_H__ */ 258 259