/*
 * Copyright 2015 Hans Leidekker for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "winhttp.h"

struct xmlbuf
{
    WS_HEAP                     *heap;
    WS_BYTES                     bytes;
    SIZE_T                       size;
    WS_XML_WRITER_ENCODING_TYPE  encoding;
    WS_CHARSET                   charset;
    const WS_XML_DICTIONARY     *dict_static;
    WS_XML_DICTIONARY           *dict;
};

void *ws_alloc( WS_HEAP *, SIZE_T ) DECLSPEC_HIDDEN;
void *ws_alloc_zero( WS_HEAP *, SIZE_T ) DECLSPEC_HIDDEN;
void *ws_realloc( WS_HEAP *, void *, SIZE_T, SIZE_T ) DECLSPEC_HIDDEN;
void *ws_realloc_zero( WS_HEAP *, void *, SIZE_T, SIZE_T ) DECLSPEC_HIDDEN;
void ws_free( WS_HEAP *, void *, SIZE_T ) DECLSPEC_HIDDEN;
struct xmlbuf *alloc_xmlbuf( WS_HEAP *, SIZE_T, WS_XML_WRITER_ENCODING_TYPE, WS_CHARSET,
                             const WS_XML_DICTIONARY *, WS_XML_DICTIONARY * ) DECLSPEC_HIDDEN;
void free_xmlbuf( struct xmlbuf * ) DECLSPEC_HIDDEN;

struct dictionary
{
    WS_XML_DICTIONARY  dict;
    ULONG             *sorted;
    ULONG              size;
};
struct dictionary dict_builtin DECLSPEC_HIDDEN;
const struct dictionary dict_builtin_static DECLSPEC_HIDDEN;

int find_string( const struct dictionary *, const unsigned char *, ULONG, ULONG * ) DECLSPEC_HIDDEN;
HRESULT insert_string( struct dictionary *, unsigned char *, ULONG, int, ULONG * ) DECLSPEC_HIDDEN;
HRESULT CALLBACK insert_string_cb( void *, const WS_XML_STRING *, BOOL *, ULONG *, WS_ERROR * ) DECLSPEC_HIDDEN;
void clear_dict( struct dictionary * ) DECLSPEC_HIDDEN;
HRESULT writer_enable_lookup( WS_XML_WRITER * ) DECLSPEC_HIDDEN;

const char *debugstr_xmlstr( const WS_XML_STRING * ) DECLSPEC_HIDDEN;
WS_XML_STRING *alloc_xml_string( const unsigned char *, ULONG ) DECLSPEC_HIDDEN;
WS_XML_STRING *dup_xml_string( const WS_XML_STRING *, BOOL ) DECLSPEC_HIDDEN;
HRESULT add_xml_string( WS_XML_STRING * ) DECLSPEC_HIDDEN;
void free_xml_string( WS_XML_STRING * ) DECLSPEC_HIDDEN;
HRESULT append_attribute( WS_XML_ELEMENT_NODE *, WS_XML_ATTRIBUTE * ) DECLSPEC_HIDDEN;
void free_attribute( WS_XML_ATTRIBUTE * ) DECLSPEC_HIDDEN;
WS_TYPE map_value_type( WS_VALUE_TYPE ) DECLSPEC_HIDDEN;
BOOL set_fpword( unsigned short, unsigned short * ) DECLSPEC_HIDDEN;
void restore_fpword( unsigned short ) DECLSPEC_HIDDEN;
ULONG get_type_size( WS_TYPE, const void * ) DECLSPEC_HIDDEN;
HRESULT read_header( WS_XML_READER *, const WS_XML_STRING *, const WS_XML_STRING *, WS_TYPE,
                     const void *, WS_READ_OPTION, WS_HEAP *, void *, ULONG ) DECLSPEC_HIDDEN;
HRESULT create_header_buffer( WS_XML_READER *, WS_HEAP *, WS_XML_BUFFER ** ) DECLSPEC_HIDDEN;

WS_XML_UTF8_TEXT *alloc_utf8_text( const BYTE *, ULONG ) DECLSPEC_HIDDEN;
WS_XML_BASE64_TEXT *alloc_base64_text( const BYTE *, ULONG ) DECLSPEC_HIDDEN;
WS_XML_BOOL_TEXT *alloc_bool_text( BOOL ) DECLSPEC_HIDDEN;
WS_XML_INT32_TEXT *alloc_int32_text( INT32 ) DECLSPEC_HIDDEN;
WS_XML_INT64_TEXT *alloc_int64_text( INT64 ) DECLSPEC_HIDDEN;
WS_XML_UINT64_TEXT *alloc_uint64_text( UINT64 ) DECLSPEC_HIDDEN;
WS_XML_FLOAT_TEXT *alloc_float_text( float ) DECLSPEC_HIDDEN;
WS_XML_DOUBLE_TEXT *alloc_double_text( double ) DECLSPEC_HIDDEN;
WS_XML_GUID_TEXT *alloc_guid_text( const GUID * ) DECLSPEC_HIDDEN;
WS_XML_UNIQUE_ID_TEXT *alloc_unique_id_text( const GUID * ) DECLSPEC_HIDDEN;
WS_XML_DATETIME_TEXT *alloc_datetime_text( const WS_DATETIME * ) DECLSPEC_HIDDEN;

#define INVALID_PARAMETER_INDEX 0xffff
HRESULT get_param_desc( const WS_STRUCT_DESCRIPTION *, USHORT, const WS_FIELD_DESCRIPTION ** ) DECLSPEC_HIDDEN;
HRESULT write_input_params( WS_XML_WRITER *, const WS_ELEMENT_DESCRIPTION *,
                            const WS_PARAMETER_DESCRIPTION *, ULONG, const void ** ) DECLSPEC_HIDDEN;
HRESULT read_output_params( WS_XML_READER *, WS_HEAP *, const WS_ELEMENT_DESCRIPTION *,
                            const WS_PARAMETER_DESCRIPTION *, ULONG, const void ** ) DECLSPEC_HIDDEN;

enum node_flag
{
    NODE_FLAG_IGNORE_TRAILING_ELEMENT_CONTENT   = 0x1,
    NODE_FLAG_TEXT_WITH_IMPLICIT_END_ELEMENT    = 0x2,
};

struct node
{
    WS_XML_ELEMENT_NODE hdr;
    struct list         entry;
    struct node        *parent;
    struct list         children;
    ULONG               flags;
};

struct node *alloc_node( WS_XML_NODE_TYPE ) DECLSPEC_HIDDEN;
void free_node( struct node * ) DECLSPEC_HIDDEN;
void destroy_nodes( struct node * ) DECLSPEC_HIDDEN;
HRESULT copy_node( WS_XML_READER *, struct node ** ) DECLSPEC_HIDDEN;

static inline WS_XML_NODE_TYPE node_type( const struct node *node )
{
    return node->hdr.node.nodeType;
}

BOOL move_to_root_element( struct node *, struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_next_element( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_prev_element( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_child_element( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_end_element( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_parent_element( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_first_node( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_next_node( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_prev_node( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_bof( struct node *, struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_eof( struct node *, struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_child_node( struct node ** ) DECLSPEC_HIDDEN;
BOOL move_to_parent_node( struct node ** ) DECLSPEC_HIDDEN;

struct prop_desc
{
    ULONG size;
    BOOL  readonly;
    BOOL  writeonly;
};

struct prop
{
    void  *value;
    ULONG  size;
    BOOL   readonly;
    BOOL   writeonly;
};

ULONG prop_size( const struct prop_desc *, ULONG ) DECLSPEC_HIDDEN;
void prop_init( const struct prop_desc *, ULONG, struct prop *, void * ) DECLSPEC_HIDDEN;
HRESULT prop_set( const struct prop *, ULONG, ULONG, const void *, ULONG ) DECLSPEC_HIDDEN;
HRESULT prop_get( const struct prop *, ULONG, ULONG, void *, ULONG ) DECLSPEC_HIDDEN;

HRESULT message_set_action( WS_MESSAGE *, const WS_XML_STRING * ) DECLSPEC_HIDDEN;
HRESULT message_get_id( WS_MESSAGE *, GUID * ) DECLSPEC_HIDDEN;
HRESULT message_set_request_id( WS_MESSAGE *, const GUID * ) DECLSPEC_HIDDEN;
void message_set_send_context( WS_MESSAGE *, const WS_PROXY_MESSAGE_CALLBACK_CONTEXT * ) DECLSPEC_HIDDEN;
void message_set_receive_context( WS_MESSAGE *, const WS_PROXY_MESSAGE_CALLBACK_CONTEXT * ) DECLSPEC_HIDDEN;
void message_do_send_callback( WS_MESSAGE * ) DECLSPEC_HIDDEN;
void message_do_receive_callback( WS_MESSAGE * ) DECLSPEC_HIDDEN;
HRESULT message_insert_http_headers( WS_MESSAGE *, HINTERNET ) DECLSPEC_HIDDEN;

HRESULT channel_send_message( WS_CHANNEL *, WS_MESSAGE * ) DECLSPEC_HIDDEN;
HRESULT channel_receive_message( WS_CHANNEL * ) DECLSPEC_HIDDEN;
HRESULT channel_get_reader( WS_CHANNEL *, WS_XML_READER ** ) DECLSPEC_HIDDEN;

HRESULT parse_url( const WS_STRING *, WS_URL_SCHEME_TYPE *, WCHAR **, USHORT * ) DECLSPEC_HIDDEN;

enum record_type
{
    /* 0x00 reserved */
    RECORD_ENDELEMENT                            = 0x01,
    RECORD_COMMENT                               = 0x02,
    RECORD_ARRAY                                 = 0x03,
    RECORD_SHORT_ATTRIBUTE                       = 0x04,
    RECORD_ATTRIBUTE                             = 0x05,
    RECORD_SHORT_DICTIONARY_ATTRIBUTE            = 0x06,
    RECORD_DICTIONARY_ATTRIBUTE                  = 0x07,
    RECORD_SHORT_XMLNS_ATTRIBUTE                 = 0x08,
    RECORD_XMLNS_ATTRIBUTE                       = 0x09,
    RECORD_SHORT_DICTIONARY_XMLNS_ATTRIBUTE      = 0x0a,
    RECORD_DICTIONARY_XMLNS_ATTRIBUTE            = 0x0b,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_A         = 0x0c,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_B         = 0x0d,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_C         = 0x0e,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_D         = 0x0f,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_E         = 0x10,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_F         = 0x11,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_G         = 0x12,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_H         = 0x13,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_I         = 0x14,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_J         = 0x15,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_K         = 0x16,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_L         = 0x17,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_M         = 0x18,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_N         = 0x19,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_O         = 0x1a,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_P         = 0x1b,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_Q         = 0x1c,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_R         = 0x1d,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_S         = 0x1e,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_T         = 0x1f,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_U         = 0x20,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_V         = 0x21,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_W         = 0x22,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_X         = 0x23,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_Y         = 0x24,
    RECORD_PREFIX_DICTIONARY_ATTRIBUTE_Z         = 0x25,
    RECORD_PREFIX_ATTRIBUTE_A                    = 0x26,
    RECORD_PREFIX_ATTRIBUTE_B                    = 0x27,
    RECORD_PREFIX_ATTRIBUTE_C                    = 0x28,
    RECORD_PREFIX_ATTRIBUTE_D                    = 0x29,
    RECORD_PREFIX_ATTRIBUTE_E                    = 0x2a,
    RECORD_PREFIX_ATTRIBUTE_F                    = 0x2b,
    RECORD_PREFIX_ATTRIBUTE_G                    = 0x2c,
    RECORD_PREFIX_ATTRIBUTE_H                    = 0x2d,
    RECORD_PREFIX_ATTRIBUTE_I                    = 0x2e,
    RECORD_PREFIX_ATTRIBUTE_J                    = 0x2f,
    RECORD_PREFIX_ATTRIBUTE_K                    = 0x30,
    RECORD_PREFIX_ATTRIBUTE_L                    = 0x31,
    RECORD_PREFIX_ATTRIBUTE_M                    = 0x32,
    RECORD_PREFIX_ATTRIBUTE_N                    = 0x33,
    RECORD_PREFIX_ATTRIBUTE_O                    = 0x34,
    RECORD_PREFIX_ATTRIBUTE_P                    = 0x35,
    RECORD_PREFIX_ATTRIBUTE_Q                    = 0x36,
    RECORD_PREFIX_ATTRIBUTE_R                    = 0x37,
    RECORD_PREFIX_ATTRIBUTE_S                    = 0x38,
    RECORD_PREFIX_ATTRIBUTE_T                    = 0x39,
    RECORD_PREFIX_ATTRIBUTE_U                    = 0x3a,
    RECORD_PREFIX_ATTRIBUTE_V                    = 0x3b,
    RECORD_PREFIX_ATTRIBUTE_W                    = 0x3c,
    RECORD_PREFIX_ATTRIBUTE_X                    = 0x3d,
    RECORD_PREFIX_ATTRIBUTE_Y                    = 0x3e,
    RECORD_PREFIX_ATTRIBUTE_Z                    = 0x3f,
    RECORD_SHORT_ELEMENT                         = 0x40,
    RECORD_ELEMENT                               = 0x41,
    RECORD_SHORT_DICTIONARY_ELEMENT              = 0x42,
    RECORD_DICTIONARY_ELEMENT                    = 0x43,
    RECORD_PREFIX_DICTIONARY_ELEMENT_A           = 0x44,
    RECORD_PREFIX_DICTIONARY_ELEMENT_B           = 0x45,
    RECORD_PREFIX_DICTIONARY_ELEMENT_C           = 0x46,
    RECORD_PREFIX_DICTIONARY_ELEMENT_D           = 0x47,
    RECORD_PREFIX_DICTIONARY_ELEMENT_E           = 0x48,
    RECORD_PREFIX_DICTIONARY_ELEMENT_F           = 0x49,
    RECORD_PREFIX_DICTIONARY_ELEMENT_G           = 0x4a,
    RECORD_PREFIX_DICTIONARY_ELEMENT_H           = 0x4b,
    RECORD_PREFIX_DICTIONARY_ELEMENT_I           = 0x4c,
    RECORD_PREFIX_DICTIONARY_ELEMENT_J           = 0x4d,
    RECORD_PREFIX_DICTIONARY_ELEMENT_K           = 0x4e,
    RECORD_PREFIX_DICTIONARY_ELEMENT_L           = 0x4f,
    RECORD_PREFIX_DICTIONARY_ELEMENT_M           = 0x50,
    RECORD_PREFIX_DICTIONARY_ELEMENT_N           = 0x51,
    RECORD_PREFIX_DICTIONARY_ELEMENT_O           = 0x52,
    RECORD_PREFIX_DICTIONARY_ELEMENT_P           = 0x53,
    RECORD_PREFIX_DICTIONARY_ELEMENT_Q           = 0x54,
    RECORD_PREFIX_DICTIONARY_ELEMENT_R           = 0x55,
    RECORD_PREFIX_DICTIONARY_ELEMENT_S           = 0x56,
    RECORD_PREFIX_DICTIONARY_ELEMENT_T           = 0x57,
    RECORD_PREFIX_DICTIONARY_ELEMENT_U           = 0x58,
    RECORD_PREFIX_DICTIONARY_ELEMENT_V           = 0x59,
    RECORD_PREFIX_DICTIONARY_ELEMENT_W           = 0x5a,
    RECORD_PREFIX_DICTIONARY_ELEMENT_X           = 0x5b,
    RECORD_PREFIX_DICTIONARY_ELEMENT_Y           = 0x5c,
    RECORD_PREFIX_DICTIONARY_ELEMENT_Z           = 0x5d,
    RECORD_PREFIX_ELEMENT_A                      = 0x5e,
    RECORD_PREFIX_ELEMENT_B                      = 0x5f,
    RECORD_PREFIX_ELEMENT_C                      = 0x60,
    RECORD_PREFIX_ELEMENT_D                      = 0x61,
    RECORD_PREFIX_ELEMENT_E                      = 0x62,
    RECORD_PREFIX_ELEMENT_F                      = 0x63,
    RECORD_PREFIX_ELEMENT_G                      = 0x64,
    RECORD_PREFIX_ELEMENT_H                      = 0x65,
    RECORD_PREFIX_ELEMENT_I                      = 0x66,
    RECORD_PREFIX_ELEMENT_J                      = 0x67,
    RECORD_PREFIX_ELEMENT_K                      = 0x68,
    RECORD_PREFIX_ELEMENT_L                      = 0x69,
    RECORD_PREFIX_ELEMENT_M                      = 0x6a,
    RECORD_PREFIX_ELEMENT_N                      = 0x6b,
    RECORD_PREFIX_ELEMENT_O                      = 0x6c,
    RECORD_PREFIX_ELEMENT_P                      = 0x6d,
    RECORD_PREFIX_ELEMENT_Q                      = 0x6e,
    RECORD_PREFIX_ELEMENT_R                      = 0x6f,
    RECORD_PREFIX_ELEMENT_S                      = 0x70,
    RECORD_PREFIX_ELEMENT_T                      = 0x71,
    RECORD_PREFIX_ELEMENT_U                      = 0x72,
    RECORD_PREFIX_ELEMENT_V                      = 0x73,
    RECORD_PREFIX_ELEMENT_W                      = 0x74,
    RECORD_PREFIX_ELEMENT_X                      = 0x75,
    RECORD_PREFIX_ELEMENT_Y                      = 0x76,
    RECORD_PREFIX_ELEMENT_Z                      = 0x77,
    /* 0x78 ... 0x7f reserved */
    RECORD_ZERO_TEXT                             = 0x80,
    RECORD_ZERO_TEXT_WITH_ENDELEMENT             = 0x81,
    RECORD_ONE_TEXT                              = 0x82,
    RECORD_ONE_TEXT_WITH_ENDELEMENT              = 0x83,
    RECORD_FALSE_TEXT                            = 0x84,
    RECORD_FALSE_TEXT_WITH_ENDELEMENT            = 0x85,
    RECORD_TRUE_TEXT                             = 0x86,
    RECORD_TRUE_TEXT_WITH_ENDELEMENT             = 0x87,
    RECORD_INT8_TEXT                             = 0x88,
    RECORD_INT8_TEXT_WITH_ENDELEMENT             = 0x89,
    RECORD_INT16_TEXT                            = 0x8a,
    RECORD_INT16_TEXT_WITH_ENDELEMENT            = 0x8b,
    RECORD_INT32_TEXT                            = 0x8c,
    RECORD_INT32_TEXT_WITH_ENDELEMENT            = 0x8d,
    RECORD_INT64_TEXT                            = 0x8e,
    RECORD_INT64_TEXT_WITH_ENDELEMENT            = 0x8f,
    RECORD_FLOAT_TEXT                            = 0x90,
    RECORD_FLOAT_TEXT_WITH_ENDELEMENT            = 0x91,
    RECORD_DOUBLE_TEXT                           = 0x92,
    RECORD_DOUBLE_TEXT_WITH_ENDELEMENT           = 0x93,
    RECORD_DECIMAL_TEXT                          = 0x94,
    RECORD_DECIMAL_TEXT_WITH_ENDELEMENT          = 0x95,
    RECORD_DATETIME_TEXT                         = 0x96,
    RECORD_DATETIME_TEXT_WITH_ENDELEMENT         = 0x97,
    RECORD_CHARS8_TEXT                           = 0x98,
    RECORD_CHARS8_TEXT_WITH_ENDELEMENT           = 0x99,
    RECORD_CHARS16_TEXT                          = 0x9a,
    RECORD_CHARS16_TEXT_WITH_ENDELEMENT          = 0x9b,
    RECORD_CHARS32_TEXT                          = 0x9c,
    RECORD_CHARS32_TEXT_WITH_ENDELEMENT          = 0x9d,
    RECORD_BYTES8_TEXT                           = 0x9e,
    RECORD_BYTES8_TEXT_WITH_ENDELEMENT           = 0x9f,
    RECORD_BYTES16_TEXT                          = 0xa0,
    RECORD_BYTES16_TEXT_WITH_ENDELEMENT          = 0xa1,
    RECORD_BYTES32_TEXT                          = 0xa2,
    RECORD_BYTES32_TEXT_WITH_ENDELEMENT          = 0xa3,
    RECORD_STARTLIST_TEXT                        = 0xa4,
    /* 0xa5 reserved */
    RECORD_ENDLIST_TEXT                          = 0xa6,
    /* 0xa7 reserved */
    RECORD_EMPTY_TEXT                            = 0xa8,
    RECORD_EMPTY_TEXT_WITH_ENDELEMENT            = 0xa9,
    RECORD_DICTIONARY_TEXT                       = 0xaa,
    RECORD_DICTIONARY_TEXT_WITH_ENDELEMENT       = 0xab,
    RECORD_UNIQUE_ID_TEXT                        = 0xac,
    RECORD_UNIQUE_ID_TEXT_WITH_ENDELEMENT        = 0xad,
    RECORD_TIMESPAN_TEXT                         = 0xae,
    RECORD_TIMESPAN_TEXT_WITH_ENDELEMENT         = 0xaf,
    RECORD_GUID_TEXT                             = 0xb0,
    RECORD_GUID_TEXT_WITH_ENDELEMENT             = 0xb1,
    RECORD_UINT64_TEXT                           = 0xb2,
    RECORD_UINT64_TEXT_WITH_ENDELEMENT           = 0xb3,
    RECORD_BOOL_TEXT                             = 0xb4,
    RECORD_BOOL_TEXT_WITH_ENDELEMENT             = 0xb5,
    RECORD_UNICODE_CHARS8_TEXT                   = 0xb6,
    RECORD_UNICODE_CHARS8_TEXT_WITH_ENDELEMENT   = 0xb7,
    RECORD_UNICODE_CHARS16_TEXT                  = 0xb8,
    RECORD_UNICODE_CHARS16_TEXT_WITH_ENDELEMENT  = 0xb9,
    RECORD_UNICODE_CHARS32_TEXT                  = 0xba,
    RECORD_UNICODE_CHARS32_TEXT_WITH_ENDELEMENT  = 0xbb,
    RECORD_QNAME_DICTIONARY_TEXT                 = 0xbc,
    RECORD_QNAME_DICTIONARY_TEXT_WITH_ENDELEMENT = 0xbd,
    /* 0xbe ... 0xff reserved */
};

#define MAX_INT8    0x7f
#define MIN_INT8    (-MAX_INT8 - 1)
#define MAX_INT16   0x7fff
#define MIN_INT16   (-MAX_INT16 - 1)
#define MAX_INT32   0x7fffffff
#define MIN_INT32   (-MAX_INT32 - 1)
#define MAX_INT64   (((INT64)0x7fffffff << 32) | 0xffffffff)
#define MIN_INT64   (-MAX_INT64 - 1)
#define MAX_UINT8   0xff
#define MAX_UINT16  0xffff
#define MAX_UINT32  0xffffffff
#define MAX_UINT64  (((UINT64)0xffffffff << 32) | 0xffffffff)

#define TICKS_PER_SEC       10000000
#define TICKS_PER_MIN       (60 * (ULONGLONG)TICKS_PER_SEC)
#define TICKS_PER_HOUR      (3600 * (ULONGLONG)TICKS_PER_SEC)
#define TICKS_PER_DAY       (86400 * (ULONGLONG)TICKS_PER_SEC)
#define TICKS_MAX           3155378975999999999
#define TICKS_1601_01_01    504911232000000000

static const int month_days[2][12] =
{
    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

static inline int leap_year( int year )
{
    return !(year % 4) && (year % 100 || !(year % 400));
}

static inline BOOL is_nil_value( const char *value, ULONG size )
{
    ULONG i;
    for (i = 0; i < size; i++) if (value[i]) return FALSE;
    return TRUE;
}

static inline BOOL is_valid_parent( const struct node *node )
{
    if (!node) return FALSE;
    return (node_type( node ) == WS_XML_NODE_TYPE_ELEMENT || node_type( node ) == WS_XML_NODE_TYPE_BOF);
}

static inline void* __WINE_ALLOC_SIZE(1) heap_alloc(size_t size)
{
    return HeapAlloc(GetProcessHeap(), 0, size);
}

static inline void* __WINE_ALLOC_SIZE(1) heap_alloc_zero(size_t size)
{
    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
}

static inline void* __WINE_ALLOC_SIZE(2) heap_realloc(void *mem, size_t size)
{
    return HeapReAlloc(GetProcessHeap(), 0, mem, size);
}

static inline void* __WINE_ALLOC_SIZE(2) heap_realloc_zero(void *mem, size_t size)
{
    return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, size);
}

static inline BOOL heap_free(void *mem)
{
    return HeapFree(GetProcessHeap(), 0, mem);
}
