#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; }