summaryrefslogtreecommitdiff
path: root/protocols/ICQ-WIM/src/http.h
blob: 9f9270486cac3a95a83cc2a991262b25b7b1e69f (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

class CIcqProto;

enum IcqConnection
{
	CONN_NONE = -1, CONN_MAIN = 0, CONN_FETCH = 1, CONN_RAPI = 2, CONN_LAST = 3
};

struct AsyncHttpRequest : public MTHttpRequest<CIcqProto>
{
	IcqConnection m_conn;
	MCONTACT hContact;
	char m_reqId[50];

	AsyncHttpRequest(IcqConnection, int type, const char *szUrl, MTHttpRequestHandler pFunc = nullptr);

	void ReplaceJsonParam(const JSONNode&);
};

/////////////////////////////////////////////////////////////////////////////////////////

struct GROUP_PARAM : public WCHAR_PARAM
{
	__forceinline GROUP_PARAM(const char *p1, const wchar_t *p2) :
		WCHAR_PARAM(p1, p2)
	{}
};

MHttpRequest* operator<<(MHttpRequest *pReq, const GROUP_PARAM &param);

/////////////////////////////////////////////////////////////////////////////////////////

class JsonReply
{
	JSONNode *m_root = nullptr;
	int m_errorCode = 0, m_detailCode = 0;
	JSONNode* m_data = nullptr;
	CMStringA m_requestId;

public:
	JsonReply(NETLIBHTTPREQUEST*);
	~JsonReply();

	__forceinline const CMStringA& requestId() const { return m_requestId; }
	__forceinline JSONNode& data() const { return *m_data; }
	__forceinline int error() const { return m_errorCode; }
	__forceinline int detail() const { return m_detailCode; }
};

class FileReply
{
	JSONNode *m_root = nullptr;
	int m_errorCode = 0;
	JSONNode* m_data = nullptr;

public:
	FileReply(NETLIBHTTPREQUEST*);
	~FileReply();

	__forceinline JSONNode& data() const { return *m_data; }
	__forceinline int error() const { return m_errorCode; }
};

class RobustReply
{
	JSONNode *m_root = nullptr;
	int m_errorCode = 0;
	JSONNode* m_results = nullptr;

public:
	RobustReply(NETLIBHTTPREQUEST*);
	~RobustReply();

	__forceinline JSONNode& results() const { return *m_results; }
	__forceinline int error() const { return m_errorCode; }
};