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(int uniqueId, int fd, off64_t offset, off64_t length) = 0;
    143 
    144     virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri) = 0;
    145 
    146     virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
    147 
    148     virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
    149             int decryptUnitId, const DrmBuffer* headerInfo) = 0;
    150 
    151     virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
    152             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
    153 
    154     virtual status_t finalizeDecryptUnit(
    155             int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
    156 
    157     virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
    158             void* buffer, ssize_t numBytes,off64_t offset) = 0;
    159 };
    160 
    161 /**
    162  * This is the Binder implementation class for DRM Manager service.
    163  */
    164 class BpDrmManagerService: public BpInterface<IDrmManagerService>
    165 {
    166 public:
    167     BpDrmManagerService(const sp<IBinder>& impl)
    168             : BpInterface<IDrmManagerService>(impl) {}
    169 
    170     virtual int addUniqueId(bool isNative);
    171 
    172     virtual void removeUniqueId(int uniqueId);
    173 
    174     virtual void addClient(int uniqueId);
    175 
    176     virtual void removeClient(int uniqueId);
    177 
    178     virtual status_t setDrmServiceListener(
    179             int uniqueId, const sp<IDrmServiceListener>& infoListener);
    180 
    181     virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile);
    182 
    183     virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
    184 
    185     virtual DrmMetadata* getMetadata(int uniqueId, const String8* path);
    186 
    187     virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
    188 
    189     virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
    190 
    191     virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
    192 
    193     virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
    194             const String8& rightsPath, const String8& contentPath);
    195 
    196     virtual String8 getOriginalMimeType(int uniqueId, const String8& path);
    197 
    198     virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
    199 
    200     virtual int checkRightsStatus(int uniqueId, const String8& path, int action);
    201 
    202     virtual status_t consumeRights(
    203             int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
    204 
    205     virtual status_t setPlaybackStatus(
    206             int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
    207 
    208     virtual bool validateAction(
    209             int uniqueId, const String8& path, int action, const ActionDescription& description);
    210 
    211     virtual status_t removeRights(int uniqueId, const String8& path);
    212 
    213     virtual status_t removeAllRights(int uniqueId);
    214 
    215     virtual int openConvertSession(int uniqueId, const String8& mimeType);
    216 
    217     virtual DrmConvertedStatus* convertData(
    218             int uniqueId, int convertId, const DrmBuffer* inputData);
    219 
    220     virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
    221 
    222     virtual status_t getAllSupportInfo(
    223             int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
    224 
    225     virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, off64_t offset, off64_t length);
    226 
    227     virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri);
    228 
    229     virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
    230 
    231     virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
    232             int decryptUnitId, const DrmBuffer* headerInfo);
    233 
    234     virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
    235             const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
    236 
    237     virtual status_t finalizeDecryptUnit(
    238             int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
    239 
    240     virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
    241             void* buffer, ssize_t numBytes, off64_t offset);
    242 };
    243 
    244 /**
    245  * This is the Binder implementation class for DRM Manager service.
    246  */
    247 class BnDrmManagerService: public BnInterface<IDrmManagerService>
    248 {
    249 public:
    250     virtual status_t onTransact(
    251             uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
    252 };
    253 
    254 };
    255 
    256 #endif /* __IDRM_MANAGER_SERVICE_H__ */
    257 
    258