Access to http codes added

This commit is contained in:
rexy712 2019-07-18 12:39:25 -07:00
parent f77a8292d6
commit 3bf609af18
9 changed files with 24 additions and 16 deletions

View File

@ -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

View File

@ -31,11 +31,9 @@
#include <cstdlib> //size_t
namespace matrix{
class session;
//main class
class client : public connection
{
friend class ::matrix::session;
public:
client(const std::shared_ptr<internal::session_info>&);
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;
};

View File

@ -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);

View File

@ -28,10 +28,8 @@
#include <memory> //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

View File

@ -46,7 +46,6 @@ namespace matrix{
};
struct audio_info : public file_info{
using file_info::operator=;
};
}

View File

@ -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);

View File

@ -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();

View File

@ -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);
}

View File

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