From 3bf609af182fbd49ea61d284b341d328e6b952be Mon Sep 17 00:00:00 2001 From: rexy712 Date: Thu, 18 Jul 2019 12:39:25 -0700 Subject: [PATCH] Access to http codes added --- doc/TODO | 1 - include/matrix/client.hpp | 10 +++++----- include/matrix/connection.hpp | 1 + include/matrix/syncer.hpp | 2 -- include/matrix/upload_info.hpp | 1 - include/raii/curler.hpp | 2 +- src/matrix/client.cpp | 15 +++++++++------ src/matrix/connection.cpp | 3 +++ src/raii/curler.cpp | 5 +++++ 9 files changed, 24 insertions(+), 16 deletions(-) diff --git a/doc/TODO b/doc/TODO index c4000e7..4123324 100644 --- a/doc/TODO +++ b/doc/TODO @@ -5,7 +5,6 @@ general/other: 1:raii swscontext matrix: - 10: provide access to http status codes after a networked operation 7:server level queries in matrix::session 5:list room members 3:presence diff --git a/include/matrix/client.hpp b/include/matrix/client.hpp index d152189..840271e 100644 --- a/include/matrix/client.hpp +++ b/include/matrix/client.hpp @@ -31,11 +31,9 @@ #include //size_t namespace matrix{ - class session; //main class class client : public connection { - friend class ::matrix::session; public: client(const std::shared_ptr&); client(const client& b) = default; @@ -85,18 +83,20 @@ namespace matrix{ audio_info upload_audio(const raii::string_base& filename, const raii::string_base& alias)const; //send messages + raii::rjp_string send_custom_event(const raii::string_base& room, const raii::string_base& event)const; + raii::rjp_string send_message(const raii::string_base& room, const raii::string_base& text)const; + raii::rjp_string send_file(const raii::string_base& room, const file_info& file)const; raii::rjp_string send_image(const raii::string_base& room, const image_info& image)const; raii::rjp_string send_video(const raii::string_base& room, const video_info& video)const; - raii::rjp_string send_message(const raii::string_base& room, const raii::string_base& text)const; raii::rjp_string send_audio(const raii::string_base& room, const audio_info& audio)const; - raii::rjp_string send_file(const raii::string_base& room, const file_info& file)const; void send_typing(const raii::string_base& room, bool active, int timeout = 5000)const; + void send_read_receipt(const raii::string_base& roomid, const raii::string_base& eventid)const; raii::rjp_string redact_event(const raii::string_base& roomid, const raii::string_base& eventid, const raii::string_base& reason)const; raii::rjp_string redact_event(const raii::string_base& roomid, const raii::string_base& eventid)const; + private: - void _send_read_receipt(const raii::string_base& roomid, const raii::string_base& eventid)const; raii::rjp_string _upload_file(raii::filerd& fp, const raii::curl_llist& header)const; raii::rjp_string _send_message(const raii::string_base& room, const raii::string_base& msg)const; }; diff --git a/include/matrix/connection.hpp b/include/matrix/connection.hpp index cbd7920..ee3311a 100644 --- a/include/matrix/connection.hpp +++ b/include/matrix/connection.hpp @@ -42,6 +42,7 @@ namespace matrix{ public: ~connection(void) = default; + long http_status(void)const; protected: void _set_curl_useragent(const raii::string_base& useragent); diff --git a/include/matrix/syncer.hpp b/include/matrix/syncer.hpp index 4bb13cc..1f43adb 100644 --- a/include/matrix/syncer.hpp +++ b/include/matrix/syncer.hpp @@ -28,10 +28,8 @@ #include //shared_ptr namespace matrix{ - class session; class syncer : public connection { - friend class ::matrix::session; private: raii::rjp_string m_next_batch; //string which tracks where we are in the server history diff --git a/include/matrix/upload_info.hpp b/include/matrix/upload_info.hpp index 0078f97..fd1afec 100644 --- a/include/matrix/upload_info.hpp +++ b/include/matrix/upload_info.hpp @@ -46,7 +46,6 @@ namespace matrix{ }; struct audio_info : public file_info{ using file_info::operator=; - }; } diff --git a/include/raii/curler.hpp b/include/raii/curler.hpp index 208cebc..d6c1a40 100644 --- a/include/raii/curler.hpp +++ b/include/raii/curler.hpp @@ -31,7 +31,6 @@ namespace raii{ { private: CURL* m_curl; - public: curler(void); curler(const curler& c); @@ -65,6 +64,7 @@ namespace raii{ curl_string encode(const char* data, int len = 0); curl_string decode(const char* data, int* outlen = nullptr, int len = 0); + long last_status(void)const; CURL* get(void); const CURL* get(void)const; operator CURL*(void); diff --git a/src/matrix/client.cpp b/src/matrix/client.cpp index f8ad70a..d1698ab 100644 --- a/src/matrix/client.cpp +++ b/src/matrix/client.cpp @@ -255,6 +255,12 @@ namespace matrix{ //send messages + raii::rjp_string client::send_custom_event(const raii::string_base& room, const raii::string_base& event)const{ + return _send_message(room, event); + } + raii::rjp_string client::send_message(const raii::string_base& room, const raii::string_base& text)const{ + return _send_message(room, detail::_message_body(text)); + } raii::rjp_string client::send_file(const raii::string_base& room, const file_info& file)const{ return _send_message(room, detail::_file_body(file)); } @@ -267,15 +273,15 @@ namespace matrix{ raii::rjp_string client::send_audio(const raii::string_base& room, const audio_info& audio)const{ return _send_message(room, detail::_audio_body(audio)); } - raii::rjp_string client::send_message(const raii::string_base& room, const raii::string_base& text)const{ - return _send_message(room, detail::_message_body(text)); - } void client::send_typing(const raii::string_base& room, bool active, int timeout)const{ if(active) _put_curl(raii::string("{\"timeout\":" + raii::itostr(timeout) + ",\"typing\":true}"), m_ses->urls.typing(m_ses->homeserver, m_ses->access_token, m_curl.encode(room), m_curl.encode(m_ses->userid)), raii::curl_llist()); else _put_curl("{\"typing\":false}"_ss, m_ses->urls.typing(m_ses->homeserver, m_ses->access_token, m_curl.encode(room), m_curl.encode(m_ses->userid)), raii::curl_llist()); } + void client::send_read_receipt(const raii::string_base& roomid, const raii::string_base& eventid)const{ + _post_curl(""_ss, m_ses->urls.read_receipt(m_ses->homeserver, m_ses->access_token, m_curl.encode(roomid), m_curl.encode(eventid)), raii::curl_llist()); + } raii::rjp_string client::redact_event(const raii::string_base& roomid, const raii::string_base& eventid, const raii::string_base& reason)const{ auto ret = _put_curl(raii::string("{\"reason\":\"" + reason + "\"}"), m_ses->urls.redact(m_ses->homeserver, m_ses->access_token, m_curl.encode(roomid), m_curl.encode(eventid)), raii::curl_llist()); @@ -295,9 +301,6 @@ namespace matrix{ Internal functions ********************************/ - void client::_send_read_receipt(const raii::string_base& roomid, const raii::string_base& eventid)const{ - _post_curl(""_ss, m_ses->urls.read_receipt(m_ses->homeserver, m_ses->access_token, m_curl.encode(roomid), m_curl.encode(eventid)), raii::curl_llist()); - } raii::rjp_string client::_upload_file(raii::filerd& fp, const raii::curl_llist& header)const{ raii::string fileurl; m_curl.postreq(); diff --git a/src/matrix/connection.cpp b/src/matrix/connection.cpp index e6002c4..89e2e65 100644 --- a/src/matrix/connection.cpp +++ b/src/matrix/connection.cpp @@ -30,6 +30,9 @@ namespace matrix{ { _set_curl_defaults(""_ss); } + long connection::http_status(void)const{ + return m_curl.last_status(); + } void connection::_set_curl_useragent(const raii::string_base& useragent){ m_curl.setuseragent(useragent); } diff --git a/src/raii/curler.cpp b/src/raii/curler.cpp index a973215..8b1724a 100644 --- a/src/raii/curler.cpp +++ b/src/raii/curler.cpp @@ -112,6 +112,11 @@ namespace raii{ return curl_string(tmp, out); } + long curler::last_status(void)const{ + long httpcode; + curl_easy_getinfo(m_curl, CURLINFO_RESPONSE_CODE, &httpcode); + return httpcode; + } CURL* curler::get(void){ return m_curl; }