diff options
author | Iru Cai <mytbk920423@gmail.com> | 2018-06-29 13:44:41 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2018-06-29 13:44:41 +0800 |
commit | 40164b64876f25c9cf53b2b288dabc91e23551d0 (patch) | |
tree | 041c35001b8d091cc7bf8ad8219bc174545ba152 /room.c | |
parent | 1719796a3a10eccf91eadb38c019829110e96294 (diff) | |
download | matrix-curl-40164b64876f25c9cf53b2b288dabc91e23551d0.tar.xz |
room/message
Diffstat (limited to 'room.c')
-rw-r--r-- | room.c | 81 |
1 files changed, 81 insertions, 0 deletions
@@ -0,0 +1,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; +} |