Files
frameworks_base/drm/libdrmframework/include/DrmManagerService.h
Takeshi Aimi dc91865622 Update of DRM Framework.
-Access permission handling
  Introduce an internal function which allows the desired process to
  access decryption flow. This new function is just for reference and
  each OEM manufacturer should implement/replace with their solutions.
-New API, getMetadata()
  This API is for retrieving media metadata from container-based DRM,
  such as OMA forward-lock content. This API asks DRM agent to retrieve
  media metadata hiddein inside of DRM special container.
-New API, acquireRights()
  This API wraps acquireDrmInfo() and processDrmInfo().
  If DRM agent has valid implementation of both APIs,
  Application can acquire DrmRights only by calling this API.
-Bug fix in event loop of OnInfoListener.
  Separate OnInfo event loop from mail thread loop so as to avoid
  the issue that message is not dispatched when mail thread is busy.

Changes are made by SEMC and Sony.

Change-Id: I04ee3e0988152a71e221f2256d83253749a29da0
2010-11-19 22:02:51 +09:00

126 lines
4.0 KiB
C++

/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __DRM_MANAGER_SERVICE_H__
#define __DRM_MANAGER_SERVICE_H__
#include <utils/RefBase.h>
#include <utils/KeyedVector.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
#include "IDrmManagerService.h"
#include "IDrmServiceListener.h"
namespace android {
class DrmManager;
class String8;
class Mutex;
/**
* This is the implementation class for DRM manager service. This delegates
* the responsibility to DrmManager.
*
* The instance of this class is created while starting the DRM manager service.
*
*/
class DrmManagerService : public BnDrmManagerService {
public:
static void instantiate();
private:
DrmManagerService();
virtual ~DrmManagerService();
public:
int addUniqueId(int uniqueId);
void removeUniqueId(int uniqueId);
void addClient(int uniqueId);
void removeClient(int uniqueId);
status_t setDrmServiceListener(
int uniqueId, const sp<IDrmServiceListener>& drmServiceListener);
status_t installDrmEngine(int uniqueId, const String8& drmEngineFile);
DrmConstraints* getConstraints(int uniqueId, const String8* path, const int action);
DrmMetadata* getMetadata(int uniqueId, const String8* path);
bool canHandle(int uniqueId, const String8& path, const String8& mimeType);
DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInforequest);
status_t saveRights(int uniqueId, const DrmRights& drmRights,
const String8& rightsPath, const String8& contentPath);
String8 getOriginalMimeType(int uniqueId, const String8& path);
int getDrmObjectType(int uniqueId, const String8& path, const String8& mimeType);
int checkRightsStatus(int uniqueId, const String8& path,int action);
status_t consumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve);
status_t setPlaybackStatus(
int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, int position);
bool validateAction(int uniqueId, const String8& path,
int action, const ActionDescription& description);
status_t removeRights(int uniqueId, const String8& path);
status_t removeAllRights(int uniqueId);
int openConvertSession(int uniqueId, const String8& mimeType);
DrmConvertedStatus* convertData(int uniqueId, int convertId, const DrmBuffer* inputData);
DrmConvertedStatus* closeConvertSession(int uniqueId, int convertId);
status_t getAllSupportInfo(int uniqueId, int* length, DrmSupportInfo** drmSupportInfoArray);
DecryptHandle* openDecryptSession(int uniqueId, int fd, int offset, int length);
DecryptHandle* openDecryptSession(int uniqueId, const char* uri);
status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
int decryptUnitId, const DrmBuffer* headerInfo);
status_t decrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId,
const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer* IV);
status_t finalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId);
ssize_t pread(int uniqueId, DecryptHandle* decryptHandle,
void* buffer, ssize_t numBytes, off_t offset);
private:
DrmManager* mDrmManager;
};
};
#endif /* __DRM_MANAGER_SERVICE_H__ */