/* * Copyright (C) 2007 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 _DRMMANAGER_ #define _DRMMANAGER_ #include <Drm2CommonTypes.h> #include <ofstream.h> #include <sostream.h> #include <ustring.h> #include <sistream.h> #include <uvector.h> using namespace ustl; /** It should be removed after real DcfContainer is ready */ #define DcfContainer string static const int16_t DRM_OK = 1; class DrmManager { public: /** * Error definition */ static const int16_t DRM_MANAGER_BASE = 100; static const int16_t ERR_DCFSTREAM_NOT_INITIALIZED = DRM_MANAGER_BASE+1; static const int16_t ERR_WRONG_DCFDATA = DRM_MANAGER_BASE+2; static const int16_t ERR_WRONG_RIGHTS = DRM_MANAGER_BASE+3; /** * Constructor for DrmManager,used to open local dcf file. * @param inRawData input stream of raw data. */ DrmManager(istream *inRawData); /** * Constructor for DrmManager,used to separate dcf file and trig message when upper * application downloading one multipart message from CI. * @param inRawData input stream of raw data. */ DrmManager(istream * inRawData, string mimeType); /** Destructor for DomExpatAgent. */ ~DrmManager(); /** * Config DRM engine * Fix me later */ bool config(); /** * Consume rights according to specified operation, DrmManager will check. * @param operationType the type of operation. * @return the operation result. */ int16_t consumeRights(int16_t operationType); /** * Get the list of all dcf containers object reference in the dcf file. * @param the vector of the dcf objects list returned. * @return the operation result. */ int16_t getListOfDcfObjects(vector<DcfContainer*> **outDcfList); /** * Open one Dcf container to read the decrypted data according to specified * operation. * @param oneDcfObject the reference of the DcfContainer. * @param operationType the type of operation. * @param decrypted data returned. * @return the operation result. */ int16_t openDecryptedContent(DcfContainer *oneDcfObject, int16_t operationType, istream *outDecryptedData); /** * Get the separated Dcf raw data from multipart message. * @return the ifstream of the dcf raw data which should be stored by upper * application. */ ifstream* getOriginalMediaData(void); /** * Handle DRM2.0 push message */ bool handlePushMsg(uint8_t* data, string mimeType); PRIVATE: istream *mDcfStream; /**< the handler of dcf stream. */ vector<DcfContainer*> mDcfs; /**< all the dcf containers included in one dcf file. */ }; #endif //_DRMMANAGER_