/* ==================================================================== * The Kannel Software License, Version 1.0 * * Copyright (c) 2001-2005 Kannel Group * Copyright (c) 1998-2001 WapIT Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Kannel Group (http://www.kannel.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Kannel" and "Kannel Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please * contact org@kannel.org. * * 5. Products derived from this software may not be called "Kannel", * nor may "Kannel" appear in their name, without prior written * permission of the Kannel Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Kannel Group. For more information on * the Kannel Group, please see . * * Portions of this software are based upon software originally written at * WapIT Ltd., Helsinki, Finland for the Kannel project. */ /* * decompile.h - Declarations and types used by decompile.c * * Author: Chris Wulff, Vanteon (cwulff@vanteon.com) * */ #ifndef DECOMPILE_H_INCLUDED #define DECOMPILE_H_INCLUDED /* Global Tags */ #define TAG_SWITCH_PAGE 0x00 #define TAG_END 0x01 #define TAG_ENTITY 0x02 #define TAG_STR_I 0x03 #define TAG_LITERAL 0x04 #define TAG_EXT_I_0 0x40 #define TAG_EXT_I_1 0x41 #define TAG_EXT_I_2 0x42 #define TAG_PI 0x43 #define TAG_LITERAL_C 0x44 #define TAG_EXT_T_0 0x80 #define TAG_EXT_T_1 0x81 #define TAG_EXT_T_2 0x82 #define TAG_STR_T 0x83 #define TAG_LITERAL_A 0x84 #define TAG_EXT_0 0xc0 #define TAG_EXT_1 0xc1 #define TAG_EXT_2 0xc2 #define TAG_OPAQUE 0xc3 #define TAG_LITERAL_AC 0xc4 /* Codepage tag masks */ #define CODEPAGE_TAG_MASK ((WBXML_TAG) 0x3f) #define CODEPAGE_TAG_HAS_CONTENT ((WBXML_TAG) 0x40) #define CODEPAGE_TAG_HAS_ATTRS ((WBXML_TAG) 0x80) /* Sizes */ #define SWITCHPAGE_SIZE 2 /* Codepage Tag Types */ typedef enum tagCP_TYPES { CP_TAG_TAG, CP_TAG_ATTRSTART, CP_TAG_ATTRVALUE } CP_TAG_TYPE; /* Datatypes */ typedef int BOOL; #define FALSE 0 #define TRUE 1 typedef unsigned char WBXML; typedef WBXML* P_WBXML; typedef P_WBXML* PP_WBXML; typedef unsigned char WBXML_TAG; typedef WBXML_TAG* P_WBXML_TAG; typedef unsigned char WBXML_CODEPAGE; typedef unsigned long WBXML_LENGTH; typedef enum { NODE_CODEPAGE_TAG, NODE_CODEPAGE_LITERAL_TAG, NODE_ATTRSTART, NODE_ATTRSTART_LITERAL, NODE_ATTRVALUE, NODE_ATTREND, NODE_STRING, NODE_DTD_TYPE, NODE_STRING_TABLE, NODE_VARIABLE_STRING, NODE_VARIABLE_INDEX } WBXML_NODE_TYPE; typedef struct tagWBXML_NODE { void* m_prev; /* (P_WBXML_NODE) the previous sibling */ void* m_next; /* (P_WBXML_NODE) the next sibling */ void* m_child; /* (P_WBXML_NODE) the first child */ void* m_parent; /* (P_WBXML_NODE) the parent */ WBXML_NODE_TYPE m_type; /* type of this node */ WBXML_CODEPAGE m_page; /* the codepage for this node */ void* m_data; /* type specific node data */ } WBXML_NODE; typedef WBXML_NODE* P_WBXML_NODE; typedef enum { VAR_ESCAPED, VAR_UNESCAPED, VAR_UNCHANGED } WBXML_VARIABLE_TYPE; typedef unsigned char WBXML_U_INT8; typedef WBXML_U_INT8* P_WBXML_U_INT8; #define MAX_MB_U_INT32_BYTES 4 typedef unsigned char WBXML_MB_U_INT32[MAX_MB_U_INT32_BYTES]; typedef WBXML_MB_U_INT32* P_WBXML_MB_U_INT32; extern const WBXML_MB_U_INT32 ZERO_WBXML_MB_U_INT32; typedef WBXML_MB_U_INT32 WBXML_STRING_INDEX; typedef WBXML_STRING_INDEX* P_WBXML_STRING_INDEX; typedef unsigned char* WBXML_BYTES; typedef WBXML_BYTES* P_WBXML_BYTES; typedef WBXML_MB_U_INT32 WBXML_DTD_TYPE; typedef struct tagDTD_NODE_DATA { WBXML_DTD_TYPE m_dtdnum; /* DTD number */ WBXML_MB_U_INT32 m_index; /* DTD string table index (for DTD# 0) */ } DTD_NODE_DATA; typedef struct tagWBXML_INFO { P_WBXML m_start; /* Beginning of the binary buffer */ P_WBXML m_curpos; /* Current binary buffer position */ WBXML_LENGTH m_length; /* Length of the binary data */ P_WBXML_NODE m_tree; /* WBXML parse tree */ P_WBXML_NODE m_curnode; /* current parse tree node */ WBXML_CODEPAGE m_curpage; /* the current codepage */ } WBXML_INFO; typedef WBXML_INFO* P_WBXML_INFO; typedef struct tagWBXML_STRING_TABLE { WBXML_MB_U_INT32 m_length; WBXML_BYTES m_strings; } WBXML_STRING_TABLE; typedef WBXML_STRING_TABLE* P_WBXML_STRING_TABLE; typedef enum tagWBXML_PARSE_ERROR { ERR_END_OF_DATA, ERR_INTERNAL_BAD_PARAM, ERR_TAG_NOT_FOUND, ERR_FILE_NOT_FOUND, ERR_FILE_NOT_READ, ERR_NOT_ENOUGH_MEMORY } WBXML_PARSE_ERROR; typedef enum tagWBXML_PARSE_WARNING { WARN_FUTURE_EXPANSION_EXT_0, WARN_FUTURE_EXPANSION_EXT_1, WARN_FUTURE_EXPANSION_EXT_2 } WBXML_PARSE_WARNING; typedef struct tagDTD_TYPE_LIST { long m_id; char* m_name; } DTD_TYPE_LIST; typedef struct tagCODEPAGE_TAG_NAME_LIST { long m_dtd_id; char* m_name; WBXML_CODEPAGE m_page; WBXML_TAG m_tag; } CODEPAGE_TAG_NAME_LIST; typedef CODEPAGE_TAG_NAME_LIST* P_CODEPAGE_TAG_NAME_LIST; typedef struct tagCODEPAGE_ATTRSTART_NAME_LIST { long m_dtd_id; char* m_name; char* m_valueprefix; WBXML_CODEPAGE m_page; WBXML_TAG m_tag; } CODEPAGE_ATTRSTART_NAME_LIST; typedef CODEPAGE_ATTRSTART_NAME_LIST* P_CODEPAGE_ATTRSTART_NAME_LIST; typedef struct tagCODEPAGE_ATTRVALUE_NAME_LIST { long m_dtd_id; char* m_name; WBXML_CODEPAGE m_page; WBXML_TAG m_tag; } CODEPAGE_ATTRVALUE_NAME_LIST; typedef CODEPAGE_ATTRVALUE_NAME_LIST* P_CODEPAGE_ATTRVALUE_NAME_LIST; /* Flow Control Prototypes */ void Message(char* msg); void ParseError(WBXML_PARSE_ERROR error); void ParseWarning(WBXML_PARSE_WARNING warning); WBXML_LENGTH BytesLeft(P_WBXML_INFO buffer); BOOL IsTag(P_WBXML_INFO buffer, WBXML_TAG tag); BOOL IsCodepageTag(P_WBXML_INFO buffer, CP_TAG_TYPE type); BOOL Is_attrValue (P_WBXML_INFO buffer); BOOL Is_extension (P_WBXML_INFO buffer); BOOL Is_string (P_WBXML_INFO buffer); BOOL Is_switchPage (P_WBXML_INFO buffer); BOOL Is_inline (P_WBXML_INFO buffer); BOOL Is_tableref (P_WBXML_INFO buffer); BOOL Is_entity (P_WBXML_INFO buffer); BOOL Is_pi (P_WBXML_INFO buffer); BOOL Is_opaque (P_WBXML_INFO buffer); BOOL Is_zero (P_WBXML_INFO buffer); /* Basic Type Decoder Prototypes */ void Read_u_int8 (P_WBXML_INFO buffer, P_WBXML_U_INT8 result); void Read_mb_u_int32 (P_WBXML_INFO buffer, P_WBXML_MB_U_INT32 result); void Read_bytes (P_WBXML_INFO buffer, WBXML_LENGTH length, P_WBXML_BYTES result); void ReadFixedTag (P_WBXML_INFO buffer, WBXML_TAG tag); WBXML_TAG ReadCodepageTag (P_WBXML_INFO buffer, CP_TAG_TYPE type); /* Basic Type Conversion Prototypes */ long mb_u_int32_to_long(P_WBXML_MB_U_INT32 value); /* Document Structure Decoder Prototypes */ void Read_start (P_WBXML_INFO buffer); void Read_strtbl (P_WBXML_INFO buffer); void Read_body (P_WBXML_INFO buffer); void Read_element (P_WBXML_INFO buffer); void Read_content (P_WBXML_INFO buffer); WBXML_TAG Read_stag (P_WBXML_INFO buffer); void Read_attribute (P_WBXML_INFO buffer); void Read_attrStart (P_WBXML_INFO buffer); void Read_attrValue (P_WBXML_INFO buffer); void Read_extension (P_WBXML_INFO buffer); void Read_string (P_WBXML_INFO buffer); void Read_switchPage (P_WBXML_INFO buffer); void Read_inline (P_WBXML_INFO buffer); void Read_tableref (P_WBXML_INFO buffer); void Read_entity (P_WBXML_INFO buffer); void Read_entcode (P_WBXML_INFO buffer); void Read_pi (P_WBXML_INFO buffer); void Read_opaque (P_WBXML_INFO buffer); void Read_version (P_WBXML_INFO buffer); void Read_publicid (P_WBXML_INFO buffer); void Read_charset (P_WBXML_INFO buffer); void Read_termstr (P_WBXML_INFO buffer); void Read_termstr_rtn(P_WBXML_INFO buffer, char** result); void Read_index (P_WBXML_INFO buffer, P_WBXML_MB_U_INT32 result); void Read_length (P_WBXML_INFO buffer, P_WBXML_MB_U_INT32 result); void Read_zero (P_WBXML_INFO buffer); void Read_pageindex (P_WBXML_INFO buffer, P_WBXML_U_INT8 result); #endif /* _DECOMPILE_H_INCLUDED_ */