DrmManagerService.h revision 2272ee27d9022d173b6eab45c409b3c3f57f30ec
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright (C) 2010 The Android Open Source Project
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * you may not use this file except in compliance with the License.
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * You may obtain a copy of the License at
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * distributed under the License is distributed on an "AS IS" BASIS,
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See the License for the specific language governing permissions and
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * limitations under the License.
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef __DRM_MANAGER_SERVICE_H__
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define __DRM_MANAGER_SERVICE_H__
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/RefBase.h>
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/KeyedVector.h>
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <binder/IInterface.h>
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <binder/Parcel.h>
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "IDrmManagerService.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "IDrmServiceListener.h"
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DrmManager;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class String8;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Mutex;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)/**
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) * This is the implementation class for DRM manager service. This delegates
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) * the responsibility to DrmManager.
360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * The instance of this class is created while starting the DRM manager service.
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DrmManagerService : public BnDrmManagerService {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public:
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    static void instantiate();
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private:
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DrmManagerService();
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual ~DrmManagerService();
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)public:
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int addUniqueId(int uniqueId);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    void removeUniqueId(int uniqueId);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t loadPlugIns(int uniqueId);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t loadPlugIns(int uniqueId, const String8& plugInDirPath);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t setDrmServiceListener(
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int uniqueId, const sp<IDrmServiceListener>& drmServiceListener);
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t unloadPlugIns(int uniqueId);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t installDrmEngine(int uniqueId, const String8& drmEngineFile);
63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
69558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t saveRights(int uniqueId, const DrmRights& drmRights,
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            const String8& rightsPath, const String8& contentPath);
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    String8 getOriginalMimeType(int uniqueId, const String8& path);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int checkRightsStatus(int uniqueId, const String8& path,int action);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t setPlaybackStatus(
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position);
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool validateAction(int uniqueId, const String8& path,
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int action, const ActionDescription& description);
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t removeRights(int uniqueId, const String8& path);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t removeAllRights(int uniqueId);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int openConvertSession(int uniqueId, const String8& mimeType);
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DrmConvertedStatus* convertData(int uniqueId, int convertId, const DrmBuffer* inputData);
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t getAllSupportInfo(int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length);
102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            int decryptUnitId, const DrmBuffer* headerInfo);
1070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            void* buffer, ssize_t numBytes, off_t offset);
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private:
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DrmManager* mDrmManager;
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif /* __DRM_MANAGER_SERVICE_H__ */
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)