/* * Copyright (C) 2011 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 __WVMDRMPLUGIN_H__ #define __WVMDRMPLUGIN_H__ #include #include #include "WVDRMPluginAPI.h" namespace android { class WVMDrmPlugin : public DrmEngineBase { public: WVMDrmPlugin(); virtual ~WVMDrmPlugin(); protected: DrmConstraints* onGetConstraints(int uniqueId, const String8* path, int action); DrmMetadata* onGetMetadata(int uniqueId, const String8* path); status_t onInitialize(int uniqueId); status_t onSetOnInfoListener(int uniqueId, const IDrmEngine::OnInfoListener* infoListener); status_t onTerminate(int uniqueId); bool onCanHandle(int uniqueId, const String8& path); DrmInfoStatus* onProcessDrmInfo(int uniqueId, const DrmInfo* drmInfo); status_t onSaveRights(int uniqueId, const DrmRights& drmRights, const String8& rightsPath, const String8& contentPath); DrmInfo* onAcquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest); String8 onGetOriginalMimeType(int uniqueId, const String8& path); int onGetDrmObjectType(int uniqueId, const String8& path, const String8& mimeType); int onCheckRightsStatus(int uniqueId, const String8& path, int action); status_t onConsumeRights(int uniqueId, DecryptHandle* decryptHandle, int action, bool reserve); status_t onSetPlaybackStatus( int uniqueId, DecryptHandle* decryptHandle, int playbackStatus, off64_t position); bool onValidateAction( int uniqueId, const String8& path, int action, const ActionDescription& description); status_t onRemoveRights(int uniqueId, const String8& path); status_t onRemoveAllRights(int uniqueId); status_t onOpenConvertSession(int uniqueId, int convertId); DrmConvertedStatus* onConvertData(int uniqueId, int convertId, const DrmBuffer* inputData); DrmConvertedStatus* onCloseConvertSession(int uniqueId, int convertId); DrmSupportInfo* onGetSupportInfo(int uniqueId); status_t onOpenDecryptSession(int uniqueId, DecryptHandle *decryptHandle, int fd, off64_t offset, off64_t length); status_t onOpenDecryptSession(int uniqueId, DecryptHandle *decryptHandle, const char *uri); status_t onCloseDecryptSession(int uniqueId, DecryptHandle* decryptHandle); status_t onInitializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, const DrmBuffer* headerInfo); status_t onDecrypt(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId, const DrmBuffer* encBuffer, DrmBuffer** decBuffer, DrmBuffer *ivBuffer); status_t onFinalizeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle, int decryptUnitId); ssize_t onPread(int uniqueId, DecryptHandle* decryptHandle, void* buffer, ssize_t numBytes, off64_t offset); class Listener { public: Listener() : mListener(NULL), mUniqueId(-1) {} Listener(IDrmEngine::OnInfoListener *listener, int uniqueId) : mListener(listener), mUniqueId(uniqueId) {}; IDrmEngine::OnInfoListener *GetListener() const {return mListener;} int GetUniqueId() const {return mUniqueId;} private: IDrmEngine::OnInfoListener *mListener; int mUniqueId; }; enum MessageType { MessageType_HeartbeatServer = 4000, MessageType_HeartbeatPeriod = 4001 }; private: static bool SendEvent(WVDRMPluginAPI::EventType code, WVDRMPluginAPI::EventDestination dest, const std::string &path); static Vector *sNativeListeners; static Vector *sJavaAPIListeners; WVDRMPluginAPI *mDrmPluginImpl; }; }; #endif /* __WVMDRMPLUGIN__ */