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