1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef __DCF_COMM_H__
18#define __DCF_COMM_H__
19
20#include <Drm2CommonTypes.h>
21#include <arpa/inet.h>
22#include <mistream.h>
23#include <ustring.h>
24
25using namespace ustl;
26
27////DCF box type list
28const uint32_t DCF_CONTAINER_BOX = uint32_t('m' << 24 | 'r' << 16 | 'd' << 8 | 'o');
29const uint32_t DCF_USER_TYPE = uint32_t('d' << 24 | 'i' << 16 | 'u' << 8 | 'u');
30const uint32_t DCF_FILE_TYPE = uint32_t('p' << 24 | 'y' << 16 | 't' << 8 | 'f');
31const uint32_t DCF_FILE_BRAND = uint32_t('f' << 24 | 'c' << 16 | 'd' << 8 | 'o');
32
33
34/**
35 * The basic box class.
36 */
37class Box
38{
39public:
40    /**
41     * constructor for Box, used to parse Box
42     * \param box  Box data
43     */
44    Box(const uint8_t* box);
45
46    /**
47     * copy constructor for Box
48     * \param dcfBox  Box object used to init a new Box object
49     */
50    Box(const Box& dcfBox);
51
52    /**
53     * assignment operator for Box
54     * \param other  Box object used to assign to a exist Box object
55     */
56    Box& operator=(const Box& other);
57
58    /** Destructor for Box */
59    virtual ~Box();
60
61    /**
62     * get the size of Box
63     * \param none
64     * \return
65     *   the size
66     */
67    uint64_t getSize(void) const;
68
69    /**
70     * get the type of Box
71     * \param none
72     * \return
73     *   the type
74     */
75    uint32_t getType(void) const;
76
77    /**
78     * get the user type of Box
79     * \param none
80     * \return
81     *   the user type
82     */
83    const uint8_t* getUsertype(void) const;
84
85    /**
86     * get the length of Box
87     * \param none
88     * \return
89     *   the length
90     */
91    virtual uint32_t getLen(void) const;
92PRIVATE:
93    static const uint32_t USER_TYPE_LEN = 16;
94
95    uint32_t mSize;
96    uint32_t mType;
97    uint64_t mLargeSize;
98    uint8_t* mUserType;
99    uint32_t mBoxLength;
100};
101
102/**
103 * The fullBox class.
104 */
105class FullBox : public Box
106{
107public:
108    /**
109     * constructor for FullBox, used to parse FullBox
110     * \param fullBox  FullBox data
111     */
112    FullBox(const uint8_t* fullBox);
113
114    /** Destructor for FullBox */
115    virtual ~FullBox(){}
116
117    /**
118     * get the version of FullBox
119     * \param none
120     * \return
121     *   the version
122     */
123    uint8_t getVersion(void) const;
124
125    /**
126     * get the flag of FullBox
127     * \param none
128     * \return
129     *   the flag
130     */
131    const uint8_t* getFlag(void) const;
132
133    /**
134     * get the length of FullBox
135     * \param none
136     * \return
137     *   the length
138     */
139    virtual uint32_t getLen(void) const;
140PRIVATE:
141    static const uint32_t FLAG_LEN = 3;
142
143    uint8_t mVersion;
144    uint8_t mFlag[FLAG_LEN];
145    uint32_t mFullBoxLength;
146};
147
148////// textal header class
149class TextualHeader
150{
151public:
152    /** default constructor of DrmInStream */
153    TextualHeader(){};
154
155    /**
156     * constructor for TextualHeader, used to parse textal header
157     * \param inData  textal header data
158     */
159    TextualHeader(const string& inData);
160
161    /**
162     * get the name of textal header
163     * \param none
164     * \return
165     *   the name
166     */
167    string getName() const;
168
169    /**
170     * get the value of textal header
171     * \param none
172     * \return
173     *   the value
174     */
175    string getValue() const;
176
177    /**
178     * get the parameter of textal header
179     * \param none
180     * \return
181     *   the parameter
182     */
183    string getParam() const;
184PRIVATE:
185    string name;
186    string value;
187    string param;
188};
189
190extern int64_t ntoh_int64(int64_t in);
191
192#endif
193