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,
73cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi        OPEN_DECRYPT_SESSION_FOR_STREAMING,
7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        CLOSE_DECRYPT_SESSION,
7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        INITIALIZE_DECRYPT_UNIT,
7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        DECRYPT,
7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        FINALIZE_DECRYPT_UNIT,
7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        PREAD
7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    };
8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    DECLARE_META_INTERFACE(DrmManagerService);
8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
858f00151cbe693d52f3e233757c57fab3b6396d21Gloria Wang    virtual int addUniqueId(bool isNative) = 0;
862272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
872272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual void removeUniqueId(int uniqueId) = 0;
882272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
89e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void addClient(int uniqueId) = 0;
9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
91e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void removeClient(int uniqueId) = 0;
9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t setDrmServiceListener(
9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const sp<IDrmServiceListener>& infoListener) = 0;
9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConstraints* getConstraints(
9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8* path, const int action) = 0;
9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
993473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    virtual DrmMetadata* getMetadata(int uniqueId, const String8* path) = 0;
1003473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType) = 0;
10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo) = 0;
10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest) = 0;
10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1072272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            const String8& rightsPath, const String8& contentPath) = 0;
10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
110bf5b3b29e31b293313788d7464cfb258ac0da803James Dong    virtual String8 getOriginalMimeType(int uniqueId, const String8& path, int fd) = 0;
11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int getDrmObjectType(
11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path, const String8& mimeType) = 0;
11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int checkRightsStatus(int uniqueId, const String8& path, int action) = 0;
11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1172272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t consumeRights(
11827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve) = 0;
11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1202272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t setPlaybackStatus(
121a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position) = 0;
12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool validateAction(
12427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path,
12527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int action, const ActionDescription& description) = 0;
12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1272272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeRights(int uniqueId, const String8& path) = 0;
12827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1292272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeAllRights(int uniqueId) = 0;
13027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int openConvertSession(int uniqueId, const String8& mimeType) = 0;
13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* convertData(
13427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int convertId, const DrmBuffer* inputData) = 0;
13527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId) = 0;
13727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t getAllSupportInfo(
13927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray) = 0;
14027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1419d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    virtual DecryptHandle* openDecryptSession(
1429d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong                int uniqueId, int fd, off64_t offset,
1439d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong                off64_t length, const char* mime) = 0;
14427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1459d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    virtual DecryptHandle* openDecryptSession(
1469d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong                int uniqueId, const char* uri, const char* mime) = 0;
147e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi
148cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi    virtual DecryptHandle* openDecryptSession(
149cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi            int uniqueId, const DrmBuffer& buf, const String8& mimeType) = 0;
150cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi
1512272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
15227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1532272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
15427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int decryptUnitId, const DrmBuffer* headerInfo) = 0;
15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1562272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
1572272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV) = 0;
15827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1592272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t finalizeDecryptUnit(
16027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId) = 0;
16127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
16227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
163a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang            void* buffer, ssize_t numBytes,off64_t offset) = 0;
16427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
16527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
16627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
16727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is the Binder implementation class for DRM Manager service.
16827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
16927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass BpDrmManagerService: public BpInterface<IDrmManagerService>
17027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{
17127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
17227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    BpDrmManagerService(const sp<IBinder>& impl)
17327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            : BpInterface<IDrmManagerService>(impl) {}
17427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1758f00151cbe693d52f3e233757c57fab3b6396d21Gloria Wang    virtual int addUniqueId(bool isNative);
1762272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
1772272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual void removeUniqueId(int uniqueId);
1782272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi
179e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void addClient(int uniqueId);
18027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
181e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi    virtual void removeClient(int uniqueId);
18227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t setDrmServiceListener(
18427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const sp<IDrmServiceListener>& infoListener);
18527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
18727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1883473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    virtual DrmMetadata* getMetadata(int uniqueId, const String8* path);
1893473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
19027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
19127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
19327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
19527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1962272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t saveRights(int uniqueId, const DrmRights& drmRights,
19727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            const String8& rightsPath, const String8& contentPath);
19827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
199bf5b3b29e31b293313788d7464cfb258ac0da803James Dong    virtual String8 getOriginalMimeType(int uniqueId, const String8& path, int fd);
20027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
20127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
20227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
20327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int checkRightsStatus(int uniqueId, const String8& path, int action);
20427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2052272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t consumeRights(
20627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
20727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2082272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t setPlaybackStatus(
209a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int64_t position);
21027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
21127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual bool validateAction(
21227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, const String8& path, int action, const ActionDescription& description);
21327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2142272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeRights(int uniqueId, const String8& path);
21527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2162272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t removeAllRights(int uniqueId);
21727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
21827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual int openConvertSession(int uniqueId, const String8& mimeType);
21927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
22027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* convertData(
22127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int convertId, const DrmBuffer* inputData);
22227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
22327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
22427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
22527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t getAllSupportInfo(
22627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
22727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2289d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    virtual DecryptHandle* openDecryptSession(
2299d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong                int uniqueId, int fd, off64_t offset, off64_t length,
2309d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong                const char* mime);
23127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2329d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong    virtual DecryptHandle* openDecryptSession(
2339d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong                int uniqueId, const char* uri, const char* mime);
234e943f84129326ab885cc7a69dcfa17f766b72b89Takeshi Aimi
235cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi    virtual DecryptHandle* openDecryptSession(
236cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi            int uniqueId, const DrmBuffer& buf, const String8& mimeType);
237cba7b32d8f2c47632313f54118ed3733b4b02cc8Kei Takahashi
2382272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
23927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2402272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
24127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int decryptUnitId, const DrmBuffer* headerInfo);
24227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2432272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
2442272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
24527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2462272ee27d9022d173b6eab45c409b3c3f57f30ecTakeshi Aimi    virtual status_t finalizeDecryptUnit(
24727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
24827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
24927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
250a2cd44cb5067b4fe98794860690394254d3ac73cGloria Wang            void* buffer, ssize_t numBytes, off64_t offset);
25127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
25227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
25327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
25427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is the Binder implementation class for DRM Manager service.
25527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
25627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass BnDrmManagerService: public BnInterface<IDrmManagerService>
25727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi{
25827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
25927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual status_t onTransact(
26027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
26127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
26227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
26327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
26427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
26527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __IDRM_MANAGER_SERVICE_H__ */
26627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
267