• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 __XML_TINYPARSER_H__
18 #define __XML_TINYPARSER_H__
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #include <drm_common_types.h>
25 
26 #define XML_DOM_PARSER
27 #define WBXML_DOM_PARSER
28 #define XML_DOM_CHECK_ENDTAG
29 #define XML_ENABLE_ERRNO
30 #define WBXML_OLD_VERSION /* for drm only */
31 
32 #ifdef DEBUG_MODE
33 void XML_PrintMallocInfo();
34 #endif /* DEBUG_MODE */
35 
36 #define XML_TRUE                                             1
37 #define XML_FALSE                                            0
38 #define XML_EOF                                              0
39 #define XML_TAG_START                                        0
40 #define XML_TAG_END                                          1
41 #define XML_TAG_SELF                                         2
42 
43 #define XML_MAX_PROPERTY_LEN                                 256
44 #define XML_MAX_ATTR_NAME_LEN                                256
45 #define XML_MAX_ATTR_VALUE_LEN                               256
46 #define XML_MAX_VALUE_LEN                                    256
47 
48 #define XML_ERROR_OK                                         0
49 #define XML_ERROR_BUFFER_NULL                                -1
50 #define XML_ERROR_ATTR_NAME                                  -2
51 #define XML_ERROR_ATTR_MISSED_EQUAL                          -3
52 #define XML_ERROR_PROPERTY_NAME                              -4
53 #define XML_ERROR_ATTR_VALUE                                 -5
54 #define XML_ERROR_ENDTAG                                     -6
55 #define XML_ERROR_NO_SUCH_NODE                               -7
56 #define XML_ERROR_PROPERTY_END                               -8
57 #define XML_ERROR_VALUE                                      -9
58 #define XML_ERROR_NO_START_TAG                               -14
59 #define XML_ERROR_NOVALUE                                    -15
60 
61 #define WBXML_ERROR_MISSED_CONTENT                           -10
62 #define WBXML_ERROR_MBUINT32                                 -11
63 #define WBXML_ERROR_MISSED_STARTTAG                          -12
64 #define WBXML_ERROR_MISSED_ENDTAG                            -13
65 
66 #ifdef XML_ENABLE_ERRNO
67 extern int32_t xml_errno;
68 #define XML_ERROR(x) do { xml_errno = x; } while (0)
69 #else  /* XML_ENABLE_ERRNO */
70 #define XML_ERROR
71 #endif /* XML_ENABLE_ERRNO */
72 
73 #ifdef XML_DOM_PARSER
74 uint8_t *XML_DOM_getNode(uint8_t *buffer, const uint8_t *const node);
75 uint8_t *XML_DOM_getNodeValue(uint8_t *buffer, uint8_t *node,
76                            uint8_t **value, int32_t *valueLen);
77 
78 uint8_t *XML_DOM_getValue(uint8_t *buffer, uint8_t **pValue, int32_t *valueLen);
79 uint8_t *XML_DOM_getAttr(uint8_t *buffer, uint8_t **pName, int32_t *nameLen,
80                       uint8_t **pValue, int32_t *valueLen);
81 
82 uint8_t *XML_DOM_getNextNode(uint8_t *buffer, uint8_t **pNodeName,
83                           int32_t *nodenameLen);
84 
85 uint8_t *XML_DOM_getTag(uint8_t *buffer, int32_t *tagLen, int32_t *tagType);
86 #endif /* XML_DOM_PARSER */
87 
88 #ifdef WBXML_DOM_PARSER
89 
90 #define WBXML_WITH_ATTR                                      0x80
91 #define WBXML_WITH_CONTENT                                   0x40
92 #define WBXML_ATTR_END                                       0x01
93 #define WBXML_CONTENT_END                                    0x01
94 
95 #define WBXML_SWITCH_PAGE                                    0x00
96 #define WBXML_STR_I                                          0x03
97 #define WBXML_END                                            0x00
98 #define WBXML_OPAUE                                          0xC3
99 #define WBXML_STR_T                                          0x83
100 #define WBXML_OPAQUE                                         0xC3
101 
102 #define WBXML_GET_TAG(x) ((x) & 0x3F) /* get 6-digits */
103 #define WBXML_HAS_ATTR(x) ((x) & WBXML_WITH_ATTR)
104 #define WBXML_HAS_CONTENT(x) ((x) & WBXML_WITH_CONTENT)
105 
106 typedef struct _WBXML {
107     uint8_t version;
108     uint8_t unUsed[3];
109     uint32_t publicid;
110     uint32_t charset;
111     int32_t strTableLen;
112     uint8_t *strTable;
113     uint8_t *Content;
114     uint8_t *End;
115     uint8_t *curPtr;
116     int32_t depth;
117 } WBXML;
118 
119 typedef int32_t XML_BOOL;
120 
121 #ifdef WBXML_OLD_VERSION
122 uint8_t *WBXML_DOM_getNode(uint8_t *buffer, int32_t bufferLen,
123                                  uint8_t *node);
124 uint8_t *WBXML_DOM_getNodeValue(uint8_t *buffer, int32_t bufferLen,
125                                       uint8_t *node,
126                                       uint8_t **value,
127                                       int32_t *valueLen);
128 #endif /* WBXML_OLD_VERSION */
129 
130 XML_BOOL WBXML_DOM_Init(WBXML * pWbxml, uint8_t *buffer,
131                         int32_t bufferLen);
132 XML_BOOL WBXML_DOM_Eof(WBXML * pWbxml);
133 uint8_t WBXML_DOM_GetTag(WBXML * pWbxml);
134 uint8_t WBXML_DOM_GetChar(WBXML * pWbxml);
135 uint8_t WBXML_DOM_GetUIntVar(WBXML * pWbxml);
136 void WBXML_DOM_Rewind(WBXML * pWbxml);
137 void WBXML_DOM_Seek(WBXML * pWbxml, int32_t offset);
138 int32_t WBXML_GetUintVar(const uint8_t *const buffer, int32_t *len);
139 
140 #endif /* WBXML_DOM_PARSER */
141 
142 #ifdef XML_TREE_STRUCTURE
143 
144 typedef struct _XML_TREE_ATTR XML_TREE_ATTR;
145 struct _XML_TREE_ATTR {
146     uint8_t name[XML_MAX_ATTR_VALUE_LEN];
147     uint8_t value[XML_MAX_ATTR_VALUE_LEN];
148     XML_TREE_ATTR *next;
149 };
150 
151 typedef struct _XML_TREE XML_TREE;
152 struct _XML_TREE {
153     uint8_t tag[XML_MAX_PROPERTY_LEN];
154     uint8_t value[XML_MAX_VALUE_LEN];
155     XML_TREE_ATTR *attr;
156     XML_TREE_ATTR *last_attr;
157     XML_TREE *brother;
158     XML_TREE *last_brother;
159     XML_TREE *child;
160 };
161 
162 XML_TREE *XML_makeTree(uint8_t **buf);
163 void XML_freeTree(XML_TREE * pTree);
164 
165 #endif /* XML_TREE_STRUCTURE */
166 
167 #ifdef __cplusplus
168 }
169 #endif
170 
171 #endif /* __XML_TINYPARSER_H__ */
172