get_daemon_connection() returns boost::optional;

monero_rpc_connection extends serializable_struct
This commit is contained in:
woodser
2020-01-13 08:38:03 -05:00
parent 5d258df4f7
commit 710b16d1ca
5 changed files with 38 additions and 20 deletions
+17
View File
@@ -106,6 +106,23 @@ namespace monero {
return root;
}
// --------------------------- MONERO RPC VERSION ---------------------------
rapidjson::Value monero_rpc_connection::to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const {
// create root
rapidjson::Value root(rapidjson::kObjectType);
// set string values
rapidjson::Value value_str(rapidjson::kStringType);
if (m_uri != boost::none) monero_utils::addJsonMember("uri", m_uri.get(), allocator, root, value_str);
if (m_username != boost::none) monero_utils::addJsonMember("username", m_username.get(), allocator, root, value_str);
if (m_password != boost::none) monero_utils::addJsonMember("password", m_password.get(), allocator, root, value_str);
// return root
return root;
}
// ------------------------- MONERO BLOCK HEADER ----------------------------
rapidjson::Value monero_block_header::to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const {
+5 -5
View File
@@ -107,14 +107,14 @@ namespace monero {
/**
* Models a connection to a daemon.
*
* TODO: switch to boost::optional<string>
*/
struct monero_rpc_connection {
string m_uri;
struct monero_rpc_connection : public serializable_struct {
boost::optional<string> m_uri;
boost::optional<string> m_username;
boost::optional<string> m_password;
monero_rpc_connection(const string& uri = "", const boost::optional<string>& username = boost::none, const boost::optional<string>& password = boost::none) : m_uri(uri), m_username(username), m_password(password) {}
monero_rpc_connection(const boost::optional<string>& uri = boost::none, const boost::optional<string>& username = boost::none, const boost::optional<string>& password = boost::none) : m_uri(uri), m_username(username), m_password(password) {}
rapidjson::Value to_rapidjson_val(rapidjson::Document::AllocatorType& allocator) const;
};
// forward declarations
+2 -2
View File
@@ -145,7 +145,7 @@ namespace monero {
*
* @param connection is the connection to set
*/
virtual void set_daemon_connection(const monero_rpc_connection& connection) {
virtual void set_daemon_connection(const boost::optional<monero_rpc_connection>& connection) {
throw runtime_error("set_daemon_connection() not supported");
}
@@ -154,7 +154,7 @@ namespace monero {
*
* @return the wallet's daemon connection
*/
virtual shared_ptr<monero_rpc_connection> get_daemon_connection() const {
virtual boost::optional<monero_rpc_connection> get_daemon_connection() const {
throw runtime_error("get_daemon_connection() not supported");
}
+12 -11
View File
@@ -945,23 +945,24 @@ namespace monero {
// try { is_trusted = tools::is_local_address(uri); } // wallet is trusted iff local
// catch (const exception &e) { }
// manually set ssl by https prefix because http_client's if (ssl_options) set by wallet2 evaluates to true despite http // TODO
epee::net_utils::ssl_options_t ssl_options = uri.rfind("https", 0) == 0 ? epee::net_utils::ssl_support_t::e_ssl_support_enabled : epee::net_utils::ssl_support_t::e_ssl_support_disabled;
// detect ssl TODO: wallet2 does not detect ssl from uri
epee::net_utils::ssl_support_t ssl = uri.rfind("https", 0) == 0 ? epee::net_utils::ssl_support_t::e_ssl_support_enabled : epee::net_utils::ssl_support_t::e_ssl_support_disabled;
// init wallet2 with daemon connection
if (!m_w2->init(uri, login, {}, 0, is_trusted, ssl_options)) throw runtime_error("Failed to initialize wallet with daemon connection");
// init wallet2 and set daemon connection
if (!m_w2->init(uri, login, {}, 0, is_trusted, ssl)) throw runtime_error("Failed to initialize wallet with daemon connection");
is_connected(); // update m_is_connected cache // TODO: better naming?
}
void monero_wallet_core::set_daemon_connection(const monero_rpc_connection& connection) {
set_daemon_connection(connection.m_uri, connection.m_username == boost::none ? "" : connection.m_username.get(), connection.m_password == boost::none ? "" : connection.m_password.get());
void monero_wallet_core::set_daemon_connection(const boost::optional<monero_rpc_connection>& connection) {
if (connection == boost::none) set_daemon_connection("");
else set_daemon_connection(connection->m_uri == boost::none ? "" : connection->m_uri.get(), connection->m_username == boost::none ? "" : connection->m_username.get(), connection->m_password == boost::none ? "" : connection->m_password.get());
}
shared_ptr<monero_rpc_connection> monero_wallet_core::get_daemon_connection() const {
boost::optional<monero_rpc_connection> monero_wallet_core::get_daemon_connection() const {
MTRACE("monero_wallet_core::get_daemon_connection()");
if (m_w2->get_daemon_address().empty()) return nullptr;
shared_ptr<monero_rpc_connection> connection = make_shared<monero_rpc_connection>();
if (!m_w2->get_daemon_address().empty()) connection->m_uri = m_w2->get_daemon_address();
if (m_w2->get_daemon_address().empty()) return boost::none;
boost::optional<monero_rpc_connection> connection = monero_rpc_connection();
connection->m_uri = m_w2->get_daemon_address();
if (m_w2->get_daemon_login()) {
if (!m_w2->get_daemon_login()->username.empty()) connection->m_username = m_w2->get_daemon_login()->username;
epee::wipeable_string wipeablePassword = m_w2->get_daemon_login()->password;
@@ -3233,7 +3234,7 @@ namespace monero {
void monero_wallet_core::init_common() {
MTRACE("monero_wallet_core.cpp init_common()");
m_w2_listener = unique_ptr<wallet2_listener>(new wallet2_listener(*this, *m_w2));
if (get_daemon_connection() == nullptr) m_is_connected = false;
if (get_daemon_connection() == boost::none) m_is_connected = false;
m_is_synced = false;
m_rescan_on_sync = false;
m_syncing_enabled = false;
+2 -2
View File
@@ -174,8 +174,8 @@ namespace monero {
* Supported wallet methods.
*/
void set_daemon_connection(const string& uri, const string& username = "", const string& password = "");
void set_daemon_connection(const monero_rpc_connection& connection);
shared_ptr<monero_rpc_connection> get_daemon_connection() const;
void set_daemon_connection(const boost::optional<monero_rpc_connection>& connection);
boost::optional<monero_rpc_connection> get_daemon_connection() const;
bool is_connected() const;
bool is_daemon_synced() const;
bool is_daemon_trusted() const;