Monero C++ Library
Loading...
Searching...
No Matches
monero_rpc_connection.h
1
52
53#pragma once
54
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"
63#include "net/http.h"
64#include "daemon/monero_daemon_model.h"
65
69namespace monero {
70
74 struct monero_request_params : public serializable_struct {
75 monero_request_params() { }
76
77 rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const override;
78 };
79
83 struct monero_rpc_request : public serializable_struct {
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;
88
89 monero_rpc_request() { }
90 monero_rpc_request(const std::string& method, const std::shared_ptr<serializable_struct>& params, bool json_rpc = true);
91
92 bool is_json_rpc() const { return m_id != boost::none && m_version != boost::none; }
93
94 rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const override;
95 };
96
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;
105 };
106
111 public:
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; // TODO: implement zmq listener
117 boost::optional<uint32_t> m_timeout_ms; // RPC request timeout in milliseconds
118 boost::optional<uint64_t> m_response_time; // automatically set by calling check_connection()
119 int m_priority; // priority relative to other connections where 1 is highest, then 2, etc, and 0 is lowest (default)
120
121 static std::shared_ptr<monero_rpc_connection> from_property_tree(const boost::property_tree::ptree& node);
122
129 static bool compare(int p1, int p2);
130
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);
143
150
156 bool is_onion() const;
157
163 bool is_i2p() const;
164
171 void set_credentials(const std::string& username, const std::string& password);
172
179 void set_attribute(const std::string& key, const std::string& val);
180
187 std::string get_attribute(const std::string& key) const;
188
194 boost::optional<bool> is_online() const;
195
201 boost::optional<bool> is_authenticated() const;
202
208 boost::optional<bool> is_connected() const;
209
216 bool check_connection(const boost::optional<uint32_t>& timeout_ms = boost::none);
217
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;
226
234 monero_rpc_response send_json_request(const monero_rpc_request &request, const boost::optional<uint32_t>& timeout_ms = boost::none) const;
235
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;
246
254 monero_rpc_response send_path_request(const monero_rpc_request &request, const boost::optional<uint32_t>& timeout_ms = boost::none) const;
255
263 monero_rpc_response send_binary_request(const monero_rpc_request &request, const boost::optional<uint32_t>& timeout_ms = boost::none) const;
264
265 rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const override;
266
267 protected:
268 // instance variables
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;
275
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;
279 };
280
281}
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
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 > &params=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