blob: 14da450ca080470216be384721e15766d6ed3297 [file] [log] [blame]
/*
* 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 __DCF_CONTAINER_H__
#define __DCF_CONTAINER_H__
#include <Drm2CommonTypes.h>
#include <uvector.h>
#include <dcf/DrmIStream.h>
#include <dcf/DrmDcfCommon.h>
class DrmInStream;
/////////dcf container
class DcfContainer : public FullBox
{
public:
friend class DrmInStream;
/** default constructor of DcfContainer */
DcfContainer(istream& inRawData):FullBox(NULL),mConStream(inRawData){}
/**
* constructor for DcfContainer, used to parse DCF container
* \param data DCF container data
* \param len DCF container data len
* \param off the offset from the start of DCF container
*/
DcfContainer(const uint8_t* data,istream& inRawData,uint64_t conOff);
/** Destructor for DcfContainer */
~DcfContainer();
/**
* get the content type of one content
* \param none
* \return
* the content type
*/
string getContentType(void) const;
/**
* get the encryption method apply to content
* \param none
* \return
* the encryption method
*/
uint8_t getEncryptionMethod(void) const;
/**
* get the padding scheme apply to content
* \param none
* \return
* the padding scheme
*/
uint8_t getPaddingScheme(void) const;
/**
* get the length of plain content
* \param none
* \return
* the length of plain content
*/
uint64_t getPlaintextLength(void) const;
/**
* get the length of content ID
* \param none
* \return
* the length of content ID
*/
uint16_t getContentIDLength(void) const;
/**
* get the length of rights issuer URL
* \param none
* \return
* the length of rights issuer URL
*/
uint16_t getRightsIssuerURLLength(void) const;
/**
* get the length of textal header
* \param none
* \return
* the length of textal header
*/
uint16_t getTextualHeadersLength(void) const;
/**
* get the content ID of one content
* \param none
* \return
* the content ID
*/
string getContentID(void) const;
/**
* get the rights issuer URL
* \param none
* \return
* the rights issuer URL
*/
string getRightsIssuerURL(void) const;
/**
* get the preview method
* \param none
* \return
* the preview method
*/
string getPreviewMethod(void) const;
/**
* get the location of content
* \param none
* \return
* the location of content
*/
string getContentLocation(void) const;
/**
* get the URL of content
* \param none
* \return
* the URL of content
*/
string getContentURL(void) const;
/**
* get the customer head
* \param none
* \return
* the customer head
*/
vector<string> getCustomerHead(void) const;
/**
* get the preview element data
* \param none
* \return
* the DRM Instream of preview element data
*/
DrmInStream getPreviewElementData(void) const;
/**
* get the plain content
* \param none
* \return
* the DRM Instream of plain content
*/
DrmInStream getDecryptContent(uint8_t* decryptKey) const;
/**
* get the istream of DCF
* \param none
* \return
* the istream of DCF
*/
istream& getStream(void) const;
PRIVATE:
static const uint32_t USER_DATA_FLAG = 0x01;
uint8_t mContentTypeLen;
string mContentType;
uint8_t mEncryptionMethod;
uint8_t mPaddingScheme;
uint64_t mPlaintextLength;
uint16_t mContentIDLength;
uint16_t mRightsIssuerURLLength;
uint16_t mTextualHeadersLength;
string mContentID;
string mRightsIssuerURL;
vector<TextualHeader*> mTextualHeaders;
bool mSilentFirst;
string mSlientMethod;
string mSilentRightsURL;
string mPreviewMethod;
string mPreviewElementURI;
string mPreviewRightsURL;
string mContentURL;
string mContentVersion;
string mContentLocation;
vector<string> mCustomHeader;
bool mHasUserData;
uint64_t mDataLen;
istream& mConStream;
uint64_t mDecOffset;
PRIVATE:
// parse text header
bool parseTextualHeaders(const uint8_t* data, uint32_t len);
void copy(const DcfContainer& container);
DcfContainer(const DcfContainer& container):FullBox(NULL),mConStream(container.mConStream){}
DcfContainer& operator=(const DcfContainer& other){return *this;}
};
#endif