blob: a759b2d247db6bbbb44dc042509e89fd5d5d6fe8 (
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
|
#include "room.h"
#include "util.h"
#include "curl_util.h"
#include <curl/curl.h>
json_object * get_room_messages(matrix_session *sess, const char *roomid, query_param *param)
{
json_object *resp;
const char *req[100];
char dirs[] = "dir=b&";
char limit[40];
char *esc_roomid = NULL;
char *esc_filter = NULL;
int rn;
req[0] = sess->url;
req[1] = "/_matrix/client/r0/rooms/";
if (roomid[0] != '%') {
esc_roomid = curl_easy_escape(sess->curl, roomid, strlen(roomid));
req[2] = esc_roomid;
} else {
req[2] = roomid;
}
req[3] = "/messages?";
rn = 4;
if (param != NULL) {
if (param->from) {
req[rn] = "from=";
req[rn+1] = param->from;
req[rn+2] = "&";
rn += 3;
}
if (param->to) {
req[rn] = "to=";
req[rn+1] = param->to;
req[rn+2] = "&";
rn += 3;
}
switch (param->dir) {
case 'f':
case 'b':
dirs[4] = param->dir;
req[rn] = dirs;
rn++;
break;
default:
break;
}
if (param->limit > 0) {
sprintf(limit, "limit=%d&", param->limit);
req[rn] = limit;
rn++;
}
if (param->filter) {
if (param->filter[0] != '%') {
esc_filter = curl_easy_escape(sess->curl, param->filter, strlen(param->filter));
req[rn] = esc_filter;
} else {
req[rn] = param->filter;
}
req[rn+1] = "&";
rn += 2;
}
}
req[rn] = "access_token=";
req[rn+1] = sess->token;
req[rn+2] = NULL;
char *requrl = alloc_build_string(req);
_curl_get(sess->curl, requrl, &resp);
if (esc_roomid)
curl_free(esc_roomid);
if (esc_filter)
curl_free(esc_filter);
free(requrl);
return resp;
}
|