IDrmManagerService.h revision e943f84129326ab885cc7a69dcfa17f766b72b89
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 DrmContentIds;
2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmConstraints;
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,
5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CAN_HANDLE,
5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        PROCESS_DRM_INFO,
5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        ACQUIRE_DRM_INFO,
5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        SAVE_RIGHTS,
5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        GET_ORIGINAL_MIMETYPE,
5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        GET_DRM_OBJECT_TYPE,
6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CHECK_RIGHTS_STATUS,
6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CONSUME_RIGHTS,
6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        SET_PLAYBACK_STATUS,
6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        VALIDATE_ACTION,
6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        REMOVE_RIGHTS,
6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        REMOVE_ALL_RIGHTS,
6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        OPEN_CONVERT_SESSION,
6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CONVERT_DATA,
6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CLOSE_CONVERT_SESSION,
6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        GET_ALL_SUPPORT_INFO,
7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        OPEN_DECRYPT_SESSION,
71e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi        OPEN_DECRYPT_SESSION_FROM_URI,
7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CLOSE_DECRYPT_SESSION,
7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        INITIALIZE_DECRYPT_UNIT,
7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        DECRYPT,
7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        FINALIZE_DECRYPT_UNIT,
7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        PREAD
7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    };
7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    DECLARE_META_INTERFACE(DrmManagerService);
8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
832272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual int addUniqueId(int uniqueId) = 0;
842272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
852272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual void removeUniqueId(int uniqueId) = 0;
862272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
87e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void addClient(int uniqueId) = 0;
8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
89e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void removeClient(int uniqueId) = 0;
9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t setDrmServiceListener(
9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0;
9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile) = 0;
9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConstraints* getConstraints(
9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8* path, const int action) = 0;
9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0;
10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1052272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            const String8& rightsPath, const String8& contentPath) = 0;
10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual String8 getOriginalMimeType(int uniqueId, const String8& path) = 0;
10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int getDrmObjectType(
11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path, const String8& mimeType) = 0;
11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0;
11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1152272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t consumeRights(
11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0;
11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1182272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t setPlaybackStatus(
11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position) = 0;
12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool validateAction(
12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path,
12327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int action, const ActionDescription& description) = 0;
12427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1252272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeRights(int uniqueId, const String8& path) = 0;
12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1272272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeAllRights(int uniqueId) = 0;
12827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int openConvertSession(int uniqueId, const String8& mimeType) = 0;
13027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* convertData(
13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int convertId, const DrmBuffer* inputData) = 0;
13327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId) = 0;
13527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t getAllSupportInfo(
13727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0;
13827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length) = 0;
14027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
141e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri) = 0;
142e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi
1432272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
14427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1452272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
14627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int decryptUnitId, const DrmBuffer* headerInfo) = 0;
14727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1482272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
1492272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
15027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1512272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t finalizeDecryptUnit(
15227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
15327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            void* buffer, ssize_t numBytes,off_t offset) = 0;
15627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
15727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
15927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is the Binder implementation class for DRM Manager service.
16027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
16127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass BpDrmManagerService: public BpInterface<IDrmManagerService>
16227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{
16327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
16427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    BpDrmManagerService(const sp<IBinder>& impl)
16527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            : BpInterface<IDrmManagerService>(impl) {}
16627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1672272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual int addUniqueId(int uniqueId);
1682272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
1692272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual void removeUniqueId(int uniqueId);
1702272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
171e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void addClient(int uniqueId);
17227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
173e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void removeClient(int uniqueId);
17427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
17527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t setDrmServiceListener(
17627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const sp<IDrmServiceListener>& infoListener);
17727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
17827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t installDrmEngine(int uniqueId, const String8& drmEngineFile);
17927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
18127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
18327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
18527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
18727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1882272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
18927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            const String8& rightsPath, const String8& contentPath);
19027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual String8 getOriginalMimeType(int uniqueId, const String8& path);
19227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
19427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int checkRightsStatus(int uniqueId, const String8& path, int action);
19627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1972272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t consumeRights(
19827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
19927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2002272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t setPlaybackStatus(
20127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position);
20227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
20327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool validateAction(
20427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path, int action, const ActionDescription& description);
20527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2062272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeRights(int uniqueId, const String8& path);
20727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2082272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeAllRights(int uniqueId);
20927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
21027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int openConvertSession(int uniqueId, const String8& mimeType);
21127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
21227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* convertData(
21327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int convertId, const DrmBuffer* inputData);
21427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
21527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
21627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
21727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t getAllSupportInfo(
21827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
21927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
22027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length);
22127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
222e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri);
223e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi
2242272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
22527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2262272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
22727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int decryptUnitId, const DrmBuffer* headerInfo);
22827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2292272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
2302272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
23127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2322272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t finalizeDecryptUnit(
23327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
23427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
23527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
23627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            void* buffer, ssize_t numBytes, off_t offset);
23727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
23827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
23927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
24027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is the Binder implementation class for DRM Manager service.
24127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
24227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass BnDrmManagerService: public BnInterface<IDrmManagerService>
24327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{
24427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
24527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t onTransact(
24627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
24727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
24827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
24927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
25027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
25127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __IDRM_MANAGER_SERVICE_H__ */
25227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
253