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