19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef __DCF_COMM_H__ 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __DCF_COMM_H__ 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <Drm2CommonTypes.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <arpa/inet.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <mistream.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ustring.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace ustl; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project////DCF box type list 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst uint32_t DCF_CONTAINER_BOX = uint32_t('m' << 24 | 'r' << 16 | 'd' << 8 | 'o'); 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst uint32_t DCF_USER_TYPE = uint32_t('d' << 24 | 'i' << 16 | 'u' << 8 | 'u'); 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst uint32_t DCF_FILE_TYPE = uint32_t('p' << 24 | 'y' << 16 | 't' << 8 | 'f'); 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst uint32_t DCF_FILE_BRAND = uint32_t('f' << 24 | 'c' << 16 | 'd' << 8 | 'o'); 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The basic box class. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Box 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constructor for Box, used to parse Box 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param box Box data 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Box(const uint8_t* box); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * copy constructor for Box 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param dcfBox Box object used to init a new Box object 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Box(const Box& dcfBox); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * assignment operator for Box 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param other Box object used to assign to a exist Box object 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Box& operator=(const Box& other); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Destructor for Box */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~Box(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the size of Box 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the size 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint64_t getSize(void) const; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the type of Box 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the type 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getType(void) const; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the user type of Box 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user type 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const uint8_t* getUsertype(void) const; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the length of Box 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the length 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getLen(void) const; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectPRIVATE: 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static const uint32_t USER_TYPE_LEN = 16; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mSize; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mType; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint64_t mLargeSize; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t* mUserType; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mBoxLength; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The fullBox class. 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass FullBox : public Box 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constructor for FullBox, used to parse FullBox 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param fullBox FullBox data 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FullBox(const uint8_t* fullBox); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Destructor for FullBox */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual ~FullBox(){} 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the version of FullBox 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the version 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t getVersion(void) const; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the flag of FullBox 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the flag 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const uint8_t* getFlag(void) const; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the length of FullBox 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the length 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project virtual uint32_t getLen(void) const; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectPRIVATE: 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static const uint32_t FLAG_LEN = 3; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mVersion; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mFlag[FLAG_LEN]; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mFullBoxLength; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project////// textal header class 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass TextualHeader 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** default constructor of DrmInStream */ 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextualHeader(){}; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constructor for TextualHeader, used to parse textal header 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param inData textal header data 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextualHeader(const string& inData); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the name of textal header 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the name 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string getName() const; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the value of textal header 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the value 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string getValue() const; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * get the parameter of textal header 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param none 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the parameter 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string getParam() const; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectPRIVATE: 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string name; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string value; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string param; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern int64_t ntoh_int64(int64_t in); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 193