trunk 20080912
[gitenigma.git] / include / lib / system / xmlrpc.h
blob3ab63dbbe30f4a09ba1c7b45e077b7266d4862c3
1 #ifndef DISABLE_NETWORK
3 #ifndef __xmlrpc_h_
4 #define __xmlrpc_h_
6 #include <asm/types.h>
7 #include <map>
8 #include <vector>
9 #include <xmltree.h>
11 #include <lib/base/estring.h>
12 #include <lib/base/eptrlist.h>
13 #include <lib/system/httpd.h>
15 #define INSERT(KEY,VALUE) insert(std::pair<eString, eXMLRPCVariant*>(KEY,VALUE))
17 class eXMLRPCVariant
19 union
21 std::map<eString,eXMLRPCVariant*> *_struct;
22 std::vector<eXMLRPCVariant> *_array;
23 __s32 *_i4;
24 bool *_boolean;
25 eString *_string;
26 double *_double;
27 // QDateTime *_datetime;
28 // QByteArray *_base64;
30 public:
31 enum XMLRPCType { STRUCT, ARRAY, I4, BOOLEAN, STRING, DOUBLE };
32 eXMLRPCVariant(std::map<eString,eXMLRPCVariant*> *_struct);
33 eXMLRPCVariant(std::vector<eXMLRPCVariant> *_array);
34 eXMLRPCVariant(__s32 *_i4);
35 eXMLRPCVariant(bool *_boolean);
36 eXMLRPCVariant(eString *_string);
37 eXMLRPCVariant(double *_double);
38 // eXMLRPCVariant(QDateTime *_datetime);
39 // eXMLRPCVariant(QByteArray *_base64);
40 eXMLRPCVariant(const eXMLRPCVariant &c);
41 ~eXMLRPCVariant();
43 std::map<eString,eXMLRPCVariant*> *getStruct();
44 std::vector<eXMLRPCVariant> *getArray();
45 __s32 *getI4();
46 bool *getBoolean();
47 eString *getString();
48 double *getDouble();
49 // inline QDateTime *getDatetime();
50 // inline QByteArray *getBase64();
52 void toXML(eString &);
53 private:
54 XMLRPCType type;
55 public:
56 XMLRPCType getType() { return type; }
59 inline eXMLRPCVariant::eXMLRPCVariant(std::map<eString,eXMLRPCVariant*> *__struct)
60 :_struct(__struct), type( STRUCT )
64 inline eXMLRPCVariant::eXMLRPCVariant(std::vector<eXMLRPCVariant> *__array)
65 :_array( __array ), type( ARRAY )
69 inline eXMLRPCVariant::eXMLRPCVariant(__s32 *__i4)
70 :_i4(__i4), type(I4)
74 inline eXMLRPCVariant::eXMLRPCVariant(bool *__boolean)
75 :_boolean(__boolean), type(BOOLEAN)
79 inline eXMLRPCVariant::eXMLRPCVariant(eString *__string)
80 :_string(__string), type(STRING)
84 inline eXMLRPCVariant::eXMLRPCVariant(double *__double)
85 :_double(__double), type(DOUBLE)
89 /*inline eXMLRPCVariant::eXMLRPCVariant(QDateTime *__datetime)
90 :_datetime(__datetime), type(DATETIME)
92 } */
94 /*inline eXMLRPCVariant::eXMLRPCVariant(QByteArray *__base64)
95 :_base64(__base64), type(BASE64)
97 } */
99 inline std::map<eString,eXMLRPCVariant*> *eXMLRPCVariant::getStruct()
101 return _struct;
104 inline std::vector<eXMLRPCVariant> *eXMLRPCVariant::getArray()
106 return _array;
109 inline __s32 *eXMLRPCVariant::getI4()
111 return _i4;
114 inline bool *eXMLRPCVariant::getBoolean()
116 return _boolean;
119 inline eString *eXMLRPCVariant::getString()
121 return _string;
124 inline double *eXMLRPCVariant::getDouble()
126 return _double;
129 /*inline QDateTime *eXMLRPCVariant::getDatetime()
131 return _datetime;
132 } */
134 /*inline QByteArray *eXMLRPCVariant::getBase64()
136 return _base64;
137 } */
139 class eXMLRPCResponse: public eHTTPDataSource
141 XMLTreeParser parser;
142 eString result;
143 int size;
144 int wptr;
145 int doCall();
146 public:
147 eXMLRPCResponse(eHTTPConnection *c);
148 ~eXMLRPCResponse();
150 int doWrite(int);
151 void haveData(void *data, int len);
154 void xmlrpc_initialize(eHTTPD *httpd);
155 void xmlrpc_addMethod(eString methodName, int (*)(std::vector<eXMLRPCVariant>&, ePtrList<eXMLRPCVariant>&));
156 void xmlrpc_fault(ePtrList<eXMLRPCVariant> &res, int faultCode, eString faultString);
157 int xmlrpc_checkArgs(eString args, std::vector<eXMLRPCVariant>&, ePtrList<eXMLRPCVariant> &res);
159 class eHTTPXMLRPCResolver: public eHTTPPathResolver
161 public:
162 eHTTPXMLRPCResolver();
163 eHTTPDataSource *getDataSource(eString request, eString path, eHTTPConnection *conn);
166 #endif
168 #endif //DISABLE_NETWORK