aboutsummaryrefslogtreecommitdiff
path: root/lib/network/xmlrpc.h
blob: b43e8e3d556373468cca57d96e59890a3f7d376d (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
82
#ifndef DISABLE_NETWORK

#ifndef __xmlrpc_h_
#define __xmlrpc_h_

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

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

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

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

class eXMLRPCResponse: public eHTTPDataSource
{
	XMLTreeParser parser;
	std::string 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(std::string methodName, int (*)(std::vector<eXMLRPCVariant>&, ePtrList<eXMLRPCVariant>&));
void xmlrpc_fault(ePtrList<eXMLRPCVariant> &res, int faultCode, std::string faultString);
int xmlrpc_checkArgs(std::string args, std::vector<eXMLRPCVariant>&, ePtrList<eXMLRPCVariant> &res);

class eHTTPXMLRPCResolver: public iHTTPPathResolver
{
	DECLARE_REF(eHTTPXMLRPCResolver);
public:
	eHTTPXMLRPCResolver();
	eHTTPDataSource *getDataSource(std::string request, std::string path, eHTTPConnection *conn);
};

#endif

#endif //DISABLE_NETWORK