aboutsummaryrefslogtreecommitdiff
path: root/lib/network/xmlrpc.h
blob: 727e1e0e2eb4a479f6d7ced01cdd50bfa4c6edb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#ifndef DISABLE_NETWORK

#ifndef __xmlrpc_h_
#define __xmlrpc_h_

#include <asm/types.h>
#include <map>
#include <vector>
#include <xmltree.h>

#include <lib/base/estring.h>
#include <lib/base/eptrlist.h>
#include <lib/network/httpd.h>

#define INSERT(KEY,VALUE) insert(std::pair<eString, eXMLRPCVariant*>(KEY,VALUE))

class eXMLRPCVariant
{
	std::map<eString,eXMLRPCVariant*> *_struct;
	std::vector<eXMLRPCVariant> *_array;
	__s32 *_i4;
	bool *_boolean;
	eString *_string;
	double *_double;
//	QDateTime *_datetime;
//	QByteArray *_base64;
	void zero();
public:
	eXMLRPCVariant(std::map<eString,eXMLRPCVariant*> *_struct);
	eXMLRPCVariant(std::vector<eXMLRPCVariant> *_array);
	eXMLRPCVariant(__s32 *_i4);
	eXMLRPCVariant(bool *_boolean);
	eXMLRPCVariant(eString *_string);
	eXMLRPCVariant(double *_double);
//	eXMLRPCVariant(QDateTime *_datetime);
//	eXMLRPCVariant(QByteArray *_base64);
	eXMLRPCVariant(const eXMLRPCVariant &c);
	~eXMLRPCVariant();
	
	std::map<eString,eXMLRPCVariant*> *getStruct();
	std::vector<eXMLRPCVariant> *getArray();
	__s32 *getI4();
	bool *getBoolean();
	eString *getString();
	double *getDouble();
//	QDateTime *getDatetime();
//	QByteArray *getBase64();
	
	void toXML(eString &);
};

class eXMLRPCResponse: public eHTTPDataSource
{
	XMLTreeParser parser;
	eString result;
	int size;
	int wptr;
	int doCall();
public:
	eXMLRPCResponse(eHTTPConnection *c);
	~eXMLRPCResponse();
	
	int doWrite(int);
	void haveData(void *data, int len);
};

void xmlrpc_initialize(eHTTPD *httpd);
void xmlrpc_addMethod(eString methodName, int (*)(std::vector<eXMLRPCVariant>&, ePtrList<eXMLRPCVariant>&));
void xmlrpc_fault(ePtrList<eXMLRPCVariant> &res, int faultCode, eString faultString);
int xmlrpc_checkArgs(eString args, std::vector<eXMLRPCVariant>&, ePtrList<eXMLRPCVariant> &res);

class eHTTPXMLRPCResolver: public eHTTPPathResolver
{
public:
	eHTTPXMLRPCResolver();
	eHTTPDataSource *getDataSource(eString request, eString path, eHTTPConnection *conn);
};

#endif

#endif //DISABLE_NETWORK