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 __XML_TINYPARSER_H__
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __XML_TINYPARSER_H__
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef __cplusplus
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern "C" {
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <drm_common_types.h>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_DOM_PARSER
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_DOM_PARSER
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_DOM_CHECK_ENDTAG
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ENABLE_ERRNO
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_OLD_VERSION /* for drm only */
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef DEBUG_MODE
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid XML_PrintMallocInfo();
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* DEBUG_MODE */
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_TRUE                                             1
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_FALSE                                            0
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_EOF                                              0
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_TAG_START                                        0
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_TAG_END                                          1
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_TAG_SELF                                         2
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_MAX_PROPERTY_LEN                                 256
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_MAX_ATTR_NAME_LEN                                256
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_MAX_ATTR_VALUE_LEN                               256
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_MAX_VALUE_LEN                                    256
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_OK                                         0
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_BUFFER_NULL                                -1
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_ATTR_NAME                                  -2
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_ATTR_MISSED_EQUAL                          -3
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_PROPERTY_NAME                              -4
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_ATTR_VALUE                                 -5
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_ENDTAG                                     -6
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_NO_SUCH_NODE                               -7
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_PROPERTY_END                               -8
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_VALUE                                      -9
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_NO_START_TAG                               -14
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR_NOVALUE                                    -15
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_ERROR_MISSED_CONTENT                           -10
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_ERROR_MBUINT32                                 -11
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_ERROR_MISSED_STARTTAG                          -12
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_ERROR_MISSED_ENDTAG                            -13
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef XML_ENABLE_ERRNO
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern int32_t xml_errno;
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR(x) do { xml_errno = x; } while (0)
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#else  /* XML_ENABLE_ERRNO */
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_ERROR
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* XML_ENABLE_ERRNO */
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef XML_DOM_PARSER
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t *XML_DOM_getNode(uint8_t *buffer, const uint8_t *const node);
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t *XML_DOM_getNodeValue(uint8_t *buffer, uint8_t *node,
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                           uint8_t **value, int32_t *valueLen);
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t *XML_DOM_getValue(uint8_t *buffer, uint8_t **pValue, int32_t *valueLen);
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t *XML_DOM_getAttr(uint8_t *buffer, uint8_t **pName, int32_t *nameLen,
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                      uint8_t **pValue, int32_t *valueLen);
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t *XML_DOM_getNextNode(uint8_t *buffer, uint8_t **pNodeName,
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                          int32_t *nodenameLen);
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t *XML_DOM_getTag(uint8_t *buffer, int32_t *tagLen, int32_t *tagType);
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* XML_DOM_PARSER */
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef WBXML_DOM_PARSER
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_WITH_ATTR                                      0x80
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_WITH_CONTENT                                   0x40
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_ATTR_END                                       0x01
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_CONTENT_END                                    0x01
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_SWITCH_PAGE                                    0x00
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_STR_I                                          0x03
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_END                                            0x00
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_OPAUE                                          0xC3
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_STR_T                                          0x83
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_OPAQUE                                         0xC3
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_GET_TAG(x) ((x) & 0x3F) /* get 6-digits */
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_HAS_ATTR(x) ((x) & WBXML_WITH_ATTR)
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WBXML_HAS_CONTENT(x) ((x) & WBXML_WITH_CONTENT)
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _WBXML {
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t version;
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t unUsed[3];
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint32_t publicid;
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint32_t charset;
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t strTableLen;
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t *strTable;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t *Content;
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t *End;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t *curPtr;
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t depth;
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} WBXML;
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef int32_t XML_BOOL;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef WBXML_OLD_VERSION
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t *WBXML_DOM_getNode(uint8_t *buffer, int32_t bufferLen,
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                 uint8_t *node);
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t *WBXML_DOM_getNodeValue(uint8_t *buffer, int32_t bufferLen,
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                      uint8_t *node,
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                      uint8_t **value,
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                      int32_t *valueLen);
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* WBXML_OLD_VERSION */
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectXML_BOOL WBXML_DOM_Init(WBXML * pWbxml, uint8_t *buffer,
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        int32_t bufferLen);
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectXML_BOOL WBXML_DOM_Eof(WBXML * pWbxml);
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t WBXML_DOM_GetTag(WBXML * pWbxml);
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t WBXML_DOM_GetChar(WBXML * pWbxml);
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectuint8_t WBXML_DOM_GetUIntVar(WBXML * pWbxml);
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid WBXML_DOM_Rewind(WBXML * pWbxml);
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid WBXML_DOM_Seek(WBXML * pWbxml, int32_t offset);
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t WBXML_GetUintVar(const uint8_t *const buffer, int32_t *len);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* WBXML_DOM_PARSER */
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef XML_TREE_STRUCTURE
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _XML_TREE_ATTR XML_TREE_ATTR;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct _XML_TREE_ATTR {
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t name[XML_MAX_ATTR_VALUE_LEN];
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t value[XML_MAX_ATTR_VALUE_LEN];
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    XML_TREE_ATTR *next;
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _XML_TREE XML_TREE;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct _XML_TREE {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t tag[XML_MAX_PROPERTY_LEN];
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t value[XML_MAX_VALUE_LEN];
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    XML_TREE_ATTR *attr;
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    XML_TREE_ATTR *last_attr;
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    XML_TREE *brother;
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    XML_TREE *last_brother;
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    XML_TREE *child;
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectXML_TREE *XML_makeTree(uint8_t **buf);
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid XML_freeTree(XML_TREE * pTree);
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* XML_TREE_STRUCTURE */
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef __cplusplus
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* __XML_TINYPARSER_H__ */
172