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         CLOSE_DECRYPT_SESSION,
     74         INITIALIZE_DECRYPT_UNIT,
     75         DECRYPT,
     76         FINALIZE_DECRYPT_UNIT,
     77         PREAD
     78     };
     79 
     80 public:
     81     DECLARE_META_INTERFACE(DrmManagerService);
     82 
     83 public:
     84     virtual int addUniqueId(bool isNative) = 0;
     85 
     86     virtual void removeUniqueId(int uniqueId) = 0;
     87 
     88     virtual void addClient(int uniqueId) = 0;
     89 
     90     virtual void removeClient(int uniqueId) = 0;
     91 
     92     virtual status_t setDrmServiceListener(
     93             int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0;
     94 
     95     virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile) = 0;
     96 
     97     virtual DrmConstraints* getConstraints(
     98             int uniqueId, const String8* path, const int action) = 0;
     99 
    100     virtual DrmMetadata* getMetadata(int uniqueId, const String8* path) = 0;
    101 
    102     virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0;
    103 
    104     virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
    105 
    106     virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
    107 
    108     virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
    109             const String8& rightsPath, const String8& contentPath) = 0;
    110 
    111     virtual String8 getOriginalMimeType(int uniqueId, const String8& path) = 0;
    112 
    113     virtual int getDrmObjectType(
    114             int uniqueId, const String8& path, const String8& mimeType) = 0;
    115 
    116     virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0;
    117 
    118     virtual status_t consumeRights(
    119             int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0;
    120 
    121     virtual status_t setPlaybackStatus(
    122             int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) = 0;
    123 
    124     virtual bool validateAction(
    125             int uniqueId, const String8& path,
    126             int action, const ActionDescription& description) = 0;
    127 
    128     virtual status_t removeRights(int uniqueId, const String8& path) = 0;
    129 
    130     virtual status_t removeAllRights(int uniqueId) = 0;
    131 
    132     virtual int openConvertSession(int uniqueId, const String8& mimeType) = 0;
    133 
    134     virtual DrmConvertedStatus* convertData(
    135             int uniqueId, int convertId, const DrmBuffer* inputData) = 0;
    136 
    137     virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId) = 0;
    138 
    139     virtual status_t getAllSupportInfo(
    140             int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0;
    141 
    142     virtual DecryptHandle* openDecryptSession(
    143                 int uniqueId, int fd, off64_t offset,
    144                 off64_t length, const char* mime) = 0;
    145 
    146     virtual DecryptHandle* openDecryptSession(
    147                 int uniqueId, const char* uri, const char* mime) = 0;
    148 
    149     virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
    150 
    151     virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
    152             int decryptUnitId, const DrmBuffer* headerInfo) = 0;
    153 
    154     virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
    155             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
    156 
    157     virtual status_t finalizeDecryptUnit(
    158             int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
    159 
    160     virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
    161             void* buffer, ssize_t numBytes,off64_t offset) = 0;
    162 };
    163 
    164 /**
    165  * This is the Binder implementation class for DRM Manager service.
    166  */
    167 class BpDrmManagerService: public BpInterface<IDrmManagerService>
    168 {
    169 public:
    170     BpDrmManagerService(const sp<IBinder>& impl)
    171             : BpInterface<IDrmManagerService>(impl) {}
    172 
    173     virtual int addUniqueId(bool isNative);
    174 
    175     virtual void removeUniqueId(int uniqueId);
    176 
    177     virtual void addClient(int uniqueId);
    178 
    179     virtual void removeClient(int uniqueId);
    180 
    181     virtual status_t setDrmServiceListener(
    182             int uniqueId, const sp<IDrmServiceListener>& infoListener);
    183 
    184     virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile);
    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);
    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 status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
    236 
    237     virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
    238             int decryptUnitId, const DrmBuffer* headerInfo);
    239 
    240     virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
    241             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
    242 
    243     virtual status_t finalizeDecryptUnit(
    244             int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
    245 
    246     virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
    247             void* buffer, ssize_t numBytes, off64_t offset);
    248 };
    249 
    250 /**
    251  * This is the Binder implementation class for DRM Manager service.
    252  */
    253 class BnDrmManagerService: public BnInterface<IDrmManagerService>
    254 {
    255 public:
    256     virtual status_t onTransact(
    257             uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
    258 };
    259 
    260 };
    261 
    262 #endif /* __IDRM_MANAGER_SERVICE_H__ */
    263 
    264