OpenMoHAA 0.82.0
Loading...
Searching...
No Matches
gsXML.h
1
3#ifndef __GSXML_H__
4#define __GSXML_H__
5
6
7#include "gsPlatform.h"
8#include "gsLargeInt.h" // so that it can write large ints
9
10
11#if defined(__cplusplus)
12extern "C"
13{
14#endif
15
16
19// GameSpy XML parser for soap messages
20// Create the stream object and attach to an XML text buffer.
21// The stream will not modify the buffer.
22// The buffer should not be released until after the stream is destroyed
23//
24//
25// Limitations:
26// Processing instructions other than '<?xml' are not supported.
27// CDATA sections are not supported.
28// XML versions other than '1.0' are not supported.
29// Encoding types other than 'UTF-8' are not supported.
30// Element names may contain only alphanumeric characters or '_'
31// Elements may contain values OR child elements, not both.
32
33
36// XML does not have set size restrictions on many string items. We set some
37// reasonable length limitations for parsing efficiency.
38#define GS_XML_MAX_ELEMENT_NAME_LENGTH 128
39#define GS_XML_MAX_ATTRIBUTE_NAME_LENGTH 128
40#define GS_XML_MAX_ATTRIBUTE_VALUE_LENGTH 1024
41
42
45typedef void* GSXmlStreamReader;
46typedef void* GSXmlStreamWriter;
47
48struct gsLargeInt_s; // forward declare in case of header order problems
49
50
53GSXmlStreamWriter gsXmlCreateStreamWriter(const char ** namespaces, int count);
54GSXmlStreamReader gsXmlCreateStreamReader();
55void gsXmlFreeReader(GSXmlStreamReader stream);
56void gsXmlFreeWriter(GSXmlStreamWriter stream);
57
58void gsXmlResetReader(GSXmlStreamReader stream); // prepare reader for re-use
59
60// Write utilities
61const char * gsXmlWriterGetData (GSXmlStreamWriter stream);
62int gsXmlWriterGetDataLength (GSXmlStreamWriter stream);
63gsi_bool gsXmlCloseWriter (GSXmlStreamWriter stream);
64gsi_bool gsXmlWriteStringElement(GSXmlStreamWriter stream, const char * namespaceName, const char * tag, const char * value);
65gsi_bool gsXmlWriteAsciiStringElement(GSXmlStreamWriter stream, const char * namespaceName, const char * tag, const gsi_char * value);
66gsi_bool gsXmlWriteUnicodeStringElement(GSXmlStreamWriter stream, const char * namespaceName, const char * tag, const unsigned short * value);
67gsi_bool gsXmlWriteIntElement (GSXmlStreamWriter stream, const char * namespaceName, const char * tag, gsi_u32 value);
68gsi_bool gsXmlWriteInt64Element (GSXmlStreamWriter stream, const char * namespaceName, const char * tag, gsi_i64 value);
69gsi_bool gsXmlWriteFloatElement (GSXmlStreamWriter stream, const char * namespaceName, const char * tag, float value);
70gsi_bool gsXmlWriteHexBinaryElement(GSXmlStreamWriter stream, const char * namespaceName, const char * tag, const gsi_u8 * data, int len);
71gsi_bool gsXmlWriteBase64BinaryElement(GSXmlStreamWriter stream, const char * namespaceName, const char * tag, const gsi_u8 * data, int len);
72gsi_bool gsXmlWriteDateTimeElement(GSXmlStreamWriter stream, const char * namespaceName, const char * tag, time_t value);
73gsi_bool gsXmlWriteLargeIntElement(GSXmlStreamWriter stream, const char * namespaceName, const char * tag, const struct gsLargeInt_s * lint);
74gsi_bool gsXmlWriteOpenTag (GSXmlStreamWriter stream, const char * namespaceName, const char * tag);
75gsi_bool gsXmlWriteCloseTag (GSXmlStreamWriter stream, const char * namespaceName, const char * tag);
76
77// Read utilities
78gsi_bool gsXmlParseBuffer (GSXmlStreamReader stream, char * buffer, int len);
79// Move:
80gsi_bool gsXmlMoveToStart (GSXmlStreamReader stream);
81gsi_bool gsXmlMoveToParent (GSXmlStreamReader stream);
82gsi_bool gsXmlMoveToNext (GSXmlStreamReader stream, const char * matchtag);
83gsi_bool gsXmlMoveToSibling (GSXmlStreamReader stream, const char * matchtag);
84gsi_bool gsXmlMoveToChild (GSXmlStreamReader stream, const char * matchtag);
85// Read child values: (separate read position from above)
86gsi_bool gsXmlReadChildAsString (GSXmlStreamReader stream, const char * matchtag, const char ** valueOut, int * lenOut);
87gsi_bool gsXmlReadChildAsStringNT (GSXmlStreamReader stream, const char * matchtag, char valueOut[], int maxLen);
88//gsi_bool gsXmlReadChildAsUnicodeString (GSXmlStreamReader stream, const char * matchtag, gsi_char ** valueOut, int * lenOut);
89gsi_bool gsXmlReadChildAsUnicodeStringNT (GSXmlStreamReader stream, const char * matchtag, gsi_char valueOut[], int maxLen);
90gsi_bool gsXmlReadChildAsInt (GSXmlStreamReader stream, const char * matchtag, int * valueOut);
91gsi_bool gsXmlReadChildAsInt64 (GSXmlStreamReader stream, const char * matchtag, gsi_i64 * valueOut);
92gsi_bool gsXmlReadChildAsFloat (GSXmlStreamReader stream, const char * matchtag, float * valueOut);
93gsi_bool gsXmlReadChildAsDateTimeElement(GSXmlStreamReader stream, const char * matchtag, time_t * valueOut);
94gsi_bool gsXmlResetChildReadPosition(GSXmlStreamReader stream); // reset child read position to first child of current element
95
96// NOTE: HexStrings are BIG-endian, the valueout will also be BIG-endian.
97// NOTE: Call with NULL valueOut to get the lenOut. Doing this will not move read position.
98gsi_bool gsXmlReadChildAsHexBinary(GSXmlStreamReader stream, const char * matchtag, gsi_u8 valueOut[], int maxLen, int * lenOut);
99
100// NOTE: Call with NULL valueOut to get the lenOut. Doing this will not move read position
101gsi_bool gsXmlReadChildAsBase64Binary(GSXmlStreamReader stream, const char * matchtag, gsi_u8 valueOut[], int * lenOut);
102
103// NOTE: gsLargeInt_t is transmitted as HexString, but must be converted to little-endian.
104gsi_bool gsXmlReadChildAsLargeInt(GSXmlStreamReader stream, const char * matchtag, struct gsLargeInt_s * valueOut);
105
106// Count:
107int gsXmlCountChildren (GSXmlStreamReader stream, const char * matchtag);
108
109// Unicode compatible string read/write functions
110#ifdef GSI_UNICODE
111 #define gsXmlWriteTStringElement(s,n,t,v) gsXmlWriteUnicodeStringElement(s,n,t,v)
112 //#define gsXmlReadChildAsTString(s,m,v,l) gsXmlReadChildAsUnicodeString(s,m,v,l)
113 #define gsXmlReadChildAsTStringNT(s,m,v,l) gsXmlReadChildAsUnicodeStringNT(s,m,v,l)
114#else
115 #define gsXmlWriteTStringElement(s,n,t,v) gsXmlWriteStringElement(s,n,t,v)
116 //#define gsXmlReadChildAsTString(s,m,v,l) gsXmlReadChildAsString(s,m,v,l)
117 #define gsXmlReadChildAsTStringNT(s,m,v,l) gsXmlReadChildAsStringNT(s,m,v,l)
118#endif
119
120
123#if defined(__cplusplus)
124} // extern "C"
125#endif
126
127#endif // __GSXML_H__
Definition gsLargeInt.h:43