55#include <boost/thread/mutex.hpp>
56#include <boost/thread/thread.hpp>
57#include <boost/thread/condition_variable.hpp>
58#include <boost/property_tree/ptree.hpp>
59#include <boost/property_tree/json_parser.hpp>
60#include "rapidjson/document.h"
61#include "rapidjson/writer.h"
62#include "rapidjson/stringbuffer.h"
64#include "daemon/monero_daemon_model.h"
75 monero_request_params() { }
77 rapidjson::Value
to_rapidjson_val(rapidjson::Document::AllocatorType& allocator)
const override;
84 boost::optional<std::string> m_id;
85 boost::optional<std::string> m_version;
86 boost::optional<std::string> m_method;
87 std::shared_ptr<serializable_struct> m_params;
89 monero_rpc_request() { }
90 monero_rpc_request(
const std::string& method,
const std::shared_ptr<serializable_struct>& params,
bool json_rpc =
true);
92 bool is_json_rpc()
const {
return m_id != boost::none && m_version != boost::none; }
94 rapidjson::Value
to_rapidjson_val(rapidjson::Document::AllocatorType& allocator)
const override;
101 boost::optional<std::string> m_jsonrpc;
102 boost::optional<boost::property_tree::ptree> m_result;
103 boost::optional<boost::property_tree::ptree> m_response;
104 boost::optional<std::string> m_binary;
112 boost::optional<std::string> m_uri;
113 boost::optional<std::string> m_username;
114 boost::optional<std::string> m_password;
115 boost::optional<std::string> m_proxy_uri;
116 boost::optional<std::string> m_zmq_uri;
117 boost::optional<uint32_t> m_timeout_ms;
118 boost::optional<uint64_t> m_response_time;
121 static std::shared_ptr<monero_rpc_connection> from_property_tree(
const boost::property_tree::ptree& node);
129 static bool compare(
int p1,
int p2);
142 monero_rpc_connection(
const std::string& uri =
"",
const std::string& username =
"",
const std::string& password =
"",
const std::string& proxy_uri =
"",
const std::string& zmq_uri =
"",
int priority = 0,
const boost::optional<uint32_t>& timeout_ms = boost::none);
171 void set_credentials(
const std::string& username,
const std::string& password);
179 void set_attribute(
const std::string& key,
const std::string& val);
216 bool check_connection(
const boost::optional<uint32_t>& timeout_ms = boost::none);
225 boost::property_tree::ptree
send_json_request(
const std::string& path,
const std::shared_ptr<serializable_struct>& params =
nullptr,
const boost::optional<uint32_t>& timeout_ms = boost::none)
const;
245 boost::property_tree::ptree
send_path_request(
const std::string& path,
const std::shared_ptr<serializable_struct>& params =
nullptr,
const boost::optional<uint32_t>& timeout_ms = boost::none)
const;
265 rapidjson::Value
to_rapidjson_val(rapidjson::Document::AllocatorType& allocator)
const override;
269 mutable boost::recursive_mutex m_mutex;
270 boost::optional<bool> m_is_online;
271 boost::optional<bool> m_is_authenticated;
272 mutable std::unique_ptr<epee::net_utils::http::abstract_http_client> m_http_client;
273 std::unordered_map<std::string, std::string> m_attributes;
274 mutable std::tuple<std::string, std::string, std::string, std::string> m_applied;
276 void ensure_configured()
const;
277 std::string invoke_post(
const boost::string_ref uri,
const std::string& body,
const boost::optional<uint32_t>& timeout_ms = boost::none)
const;
278 void send_rpc_request(
const boost::string_ref uri,
const monero_rpc_request& request,
monero_rpc_response& response,
const boost::optional<uint32_t>& timeout_ms = boost::none,
bool binary =
false)
const;
boost::property_tree::ptree send_json_request(const std::string &path, const std::shared_ptr< serializable_struct > ¶ms=nullptr, const boost::optional< uint32_t > &timeout_ms=boost::none) const
Definition monero_rpc_connection.cpp:264
void set_credentials(const std::string &username, const std::string &password)
Definition monero_rpc_connection.cpp:152
bool is_onion() const
Definition monero_rpc_connection.cpp:138
boost::optional< bool > is_authenticated() const
Definition monero_rpc_connection.cpp:210
bool is_i2p() const
Definition monero_rpc_connection.cpp:145
std::string get_attribute(const std::string &key) const
Definition monero_rpc_connection.cpp:196
void set_attribute(const std::string &key, const std::string &val)
Definition monero_rpc_connection.cpp:191
boost::property_tree::ptree send_path_request(const std::string &path, const std::shared_ptr< serializable_struct > ¶ms=nullptr, const boost::optional< uint32_t > &timeout_ms=boost::none) const
Definition monero_rpc_connection.cpp:285
monero_rpc_connection(const std::string &uri="", const std::string &username="", const std::string &password="", const std::string &proxy_uri="", const std::string &zmq_uri="", int priority=0, const boost::optional< uint32_t > &timeout_ms=boost::none)
Definition monero_rpc_connection.cpp:85
boost::optional< bool > is_connected() const
Definition monero_rpc_connection.cpp:215
bool check_connection(const boost::optional< uint32_t > &timeout_ms=boost::none)
Definition monero_rpc_connection.cpp:221
monero_rpc_response send_binary_request(const monero_rpc_request &request, const boost::optional< uint32_t > &timeout_ms=boost::none) const
Definition monero_rpc_connection.cpp:309
static bool compare(int p1, int p2)
Definition monero_rpc_connection.cpp:77
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const override
Definition monero_rpc_connection.cpp:111
boost::optional< bool > is_online() const
Definition monero_rpc_connection.cpp:205
Definition monero_error.h:61
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const override
Definition monero_rpc_connection.cpp:13
Definition monero_rpc_connection.h:83
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType &allocator) const override
Definition monero_rpc_connection.cpp:28
Definition monero_rpc_connection.h:100
Definition monero_daemon_model.h:70