IDrmManagerService.h revision 8f00151cbe693d52f3e233757c57fab3b6396d21
127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/*
227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project
327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License");
527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License.
627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at
727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *      http://www.apache.org/licenses/LICENSE-2.0
927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software
1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS,
1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and
1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License.
1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#ifndef __IDRM_MANAGER_SERVICE_H__
1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#define __IDRM_MANAGER_SERVICE_H__
1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <utils/RefBase.h>
2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <binder/IInterface.h>
2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <binder/Parcel.h>
2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include <drm/drm_framework_common.h>
2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include "IDrmServiceListener.h"
2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshinamespace android {
2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmConstraints;
293473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiclass DrmMetadata;
3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmRights;
3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmInfo;
3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmInfoStatus;
3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmInfoRequest;
3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmSupportInfo;
3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmConvertedStatus;
3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass String8;
3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass ActionDescription;
3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is the interface class for DRM Manager service.
4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass IDrmManagerService : public IInterface
4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{
4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    enum {
472272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi        ADD_UNIQUEID = IBinder::FIRST_CALL_TRANSACTION,
482272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi        REMOVE_UNIQUEID,
49e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi        ADD_CLIENT,
50e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi        REMOVE_CLIENT,
5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        SET_DRM_SERVICE_LISTENER,
5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        INSTALL_DRM_ENGINE,
5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        GET_CONSTRAINTS_FROM_CONTENT,
543473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        GET_METADATA_FROM_CONTENT,
5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CAN_HANDLE,
5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        PROCESS_DRM_INFO,
5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        ACQUIRE_DRM_INFO,
5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        SAVE_RIGHTS,
5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        GET_ORIGINAL_MIMETYPE,
6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        GET_DRM_OBJECT_TYPE,
6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CHECK_RIGHTS_STATUS,
6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CONSUME_RIGHTS,
6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        SET_PLAYBACK_STATUS,
6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        VALIDATE_ACTION,
6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        REMOVE_RIGHTS,
6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        REMOVE_ALL_RIGHTS,
6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        OPEN_CONVERT_SESSION,
6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CONVERT_DATA,
6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CLOSE_CONVERT_SESSION,
7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        GET_ALL_SUPPORT_INFO,
7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        OPEN_DECRYPT_SESSION,
72e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi        OPEN_DECRYPT_SESSION_FROM_URI,
7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CLOSE_DECRYPT_SESSION,
7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        INITIALIZE_DECRYPT_UNIT,
7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        DECRYPT,
7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        FINALIZE_DECRYPT_UNIT,
7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        PREAD
7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    };
7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    DECLARE_META_INTERFACE(DrmManagerService);
8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
848f00151cbe693d52f3e233757c57fab3b6396d21Gloria Wang    virtual int addUniqueId(bool isNative) = 0;
852272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
862272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual void removeUniqueId(int uniqueId) = 0;
872272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
88e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void addClient(int uniqueId) = 0;
8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
90e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void removeClient(int uniqueId) = 0;
9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t setDrmServiceListener(
9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0;
9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile) = 0;
9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConstraints* getConstraints(
9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8* path, const int action) = 0;
9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1003473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    virtual DrmMetadata* getMetadata(int uniqueId, const String8* path) = 0;
1013473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0;
10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1082272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            const String8& rightsPath, const String8& contentPath) = 0;
11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual String8 getOriginalMimeType(int uniqueId, const String8& path) = 0;
11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int getDrmObjectType(
11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path, const String8& mimeType) = 0;
11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0;
11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1182272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t consumeRights(
11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0;
12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1212272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t setPlaybackStatus(
122a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) = 0;
12327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool validateAction(
12527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path,
12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int action, const ActionDescription& description) = 0;
12727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1282272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeRights(int uniqueId, const String8& path) = 0;
12927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1302272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeAllRights(int uniqueId) = 0;
13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int openConvertSession(int uniqueId, const String8& mimeType) = 0;
13327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* convertData(
13527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int convertId, const DrmBuffer* inputData) = 0;
13627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId) = 0;
13827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t getAllSupportInfo(
14027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0;
14127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
142a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang    virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, off64_t offset, off64_t length) = 0;
14327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
144e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri) = 0;
145e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi
1462272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
14727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1482272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
14927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int decryptUnitId, const DrmBuffer* headerInfo) = 0;
15027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1512272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
1522272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
15327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1542272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t finalizeDecryptUnit(
15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
15627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
158a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang            void* buffer, ssize_t numBytes,off64_t offset) = 0;
15927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
16027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
16127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
16227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is the Binder implementation class for DRM Manager service.
16327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
16427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass BpDrmManagerService: public BpInterface<IDrmManagerService>
16527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{
16627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
16727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    BpDrmManagerService(const sp<IBinder>& impl)
16827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            : BpInterface<IDrmManagerService>(impl) {}
16927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1708f00151cbe693d52f3e233757c57fab3b6396d21Gloria Wang    virtual int addUniqueId(bool isNative);
1712272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
1722272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual void removeUniqueId(int uniqueId);
1732272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
174e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void addClient(int uniqueId);
17527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
176e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void removeClient(int uniqueId);
17727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
17827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t setDrmServiceListener(
17927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const sp<IDrmServiceListener>& infoListener);
18027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile);
18227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
18427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1853473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    virtual DrmMetadata* getMetadata(int uniqueId, const String8* path);
1863473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
18727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
18827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
19027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
19227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1932272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
19427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            const String8& rightsPath, const String8& contentPath);
19527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual String8 getOriginalMimeType(int uniqueId, const String8& path);
19727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
19927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
20027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int checkRightsStatus(int uniqueId, const String8& path, int action);
20127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2022272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t consumeRights(
20327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
20427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2052272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t setPlaybackStatus(
206a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
20727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
20827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool validateAction(
20927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path, int action, const ActionDescription& description);
21027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2112272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeRights(int uniqueId, const String8& path);
21227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2132272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeAllRights(int uniqueId);
21427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
21527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int openConvertSession(int uniqueId, const String8& mimeType);
21627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
21727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* convertData(
21827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int convertId, const DrmBuffer* inputData);
21927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
22027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
22127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
22227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t getAllSupportInfo(
22327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
22427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
225a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang    virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, off64_t offset, off64_t length);
22627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
227e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri);
228e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi
2292272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
23027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2312272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
23227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int decryptUnitId, const DrmBuffer* headerInfo);
23327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2342272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
2352272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
23627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2372272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t finalizeDecryptUnit(
23827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
23927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
24027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
241a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang            void* buffer, ssize_t numBytes, off64_t offset);
24227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
24327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
24427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
24527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is the Binder implementation class for DRM Manager service.
24627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
24727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass BnDrmManagerService: public BnInterface<IDrmManagerService>
24827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{
24927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
25027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t onTransact(
25127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
25227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
25327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
25427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
25527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
25627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __IDRM_MANAGER_SERVICE_H__ */
25727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
258