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