From 40164b64876f25c9cf53b2b288dabc91e23551d0 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Fri, 29 Jun 2018 13:44:41 +0800 Subject: room/message --- room.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 room.c (limited to 'room.c') diff --git a/room.c b/room.c new file mode 100644 index 0000000..a759b2d --- /dev/null +++ b/room.c @@ -0,0 +1,81 @@ +#include "room.h" +#include "util.h" +#include "curl_util.h" +#include + +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; +} -- cgit v1.2.3