Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 72 additions & 72 deletions src/cpp/daemon/py_monero_daemon.h

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions src/cpp/daemon/py_monero_daemon_default.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ void PyMoneroDaemonDefault::remove_listeners() {
refresh_listening();
}

std::optional<std::shared_ptr<monero::monero_tx>> PyMoneroDaemonDefault::get_tx(const std::string& tx_hash, bool prune) {
boost::optional<std::shared_ptr<monero::monero_tx>> PyMoneroDaemonDefault::get_tx(const std::string& tx_hash, bool prune) {
std::vector<std::string> hashes;
hashes.push_back(tx_hash);
auto txs = get_txs(hashes, prune);
std::optional<std::shared_ptr<monero::monero_tx>> tx;
boost::optional<std::shared_ptr<monero::monero_tx>> tx;

if (txs.size() > 0) {
tx = txs[0];
Expand All @@ -46,11 +46,11 @@ PyMoneroKeyImageSpentStatus PyMoneroDaemonDefault::get_key_image_spent_status(st
return statuses[0];
}

std::optional<std::string> PyMoneroDaemonDefault::get_tx_hex(const std::string& tx_hash, bool prune) {
boost::optional<std::string> PyMoneroDaemonDefault::get_tx_hex(const std::string& tx_hash, bool prune) {
std::vector<std::string> hashes;
hashes.push_back(tx_hash);
auto hexes = get_tx_hexes(hashes, prune);
std::optional<std::string> hex;
boost::optional<std::string> hex;
if (hexes.size() > 0) {
hex = hexes[0];
}
Expand Down
4 changes: 2 additions & 2 deletions src/cpp/daemon/py_monero_daemon_default.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ class PyMoneroDaemonDefault : public PyMoneroDaemon {
void add_listener(const std::shared_ptr<PyMoneroDaemonListener> &listener) override;
void remove_listener(const std::shared_ptr<PyMoneroDaemonListener> &listener) override;
void remove_listeners() override;
std::optional<std::shared_ptr<monero::monero_tx>> get_tx(const std::string& tx_hash, bool prune = false) override;
boost::optional<std::shared_ptr<monero::monero_tx>> get_tx(const std::string& tx_hash, bool prune = false) override;
void relay_tx_by_hash(std::string& tx_hash) override;
PyMoneroKeyImageSpentStatus get_key_image_spent_status(std::string& key_image) override;
std::optional<std::string> get_tx_hex(const std::string& tx_hash, bool prune = false);
boost::optional<std::string> get_tx_hex(const std::string& tx_hash, bool prune = false);
void submit_block(const std::string& block_blob) override;
void set_peer_ban(const std::shared_ptr<PyMoneroBan>& ban) override;

Expand Down
46 changes: 24 additions & 22 deletions src/cpp/daemon/py_monero_daemon_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ std::string PyMoneroRequestParams::serialize() const {
return monero_utils::serialize(node);
}

std::optional<py::object> PyMoneroJsonResponse::get_result() const {
std::optional<py::object> res;
boost::optional<py::object> PyMoneroJsonResponse::get_result() const {
boost::optional<py::object> res;
if (m_result != boost::none) res = PyGenUtils::ptree_to_pyobject(m_result.get());
return res;
}
Expand Down Expand Up @@ -60,8 +60,8 @@ std::shared_ptr<PyMoneroJsonResponse> PyMoneroJsonResponse::deserialize(const st
return response;
}

std::optional<py::object> PyMoneroPathResponse::get_response() const {
std::optional<py::object> res;
boost::optional<py::object> PyMoneroPathResponse::get_response() const {
boost::optional<py::object> res;
if (m_response != boost::none) res = PyGenUtils::ptree_to_pyobject(m_response.get());
return res;
}
Expand All @@ -82,8 +82,8 @@ std::shared_ptr<PyMoneroBinaryResponse> PyMoneroBinaryResponse::deserialize(cons
return response;
}

std::optional<py::object> PyMoneroBinaryResponse::get_response() const {
std::optional<py::object> res;
boost::optional<py::object> PyMoneroBinaryResponse::get_response() const {
boost::optional<py::object> res;
if (m_response != boost::none) res = PyGenUtils::ptree_to_pyobject(m_response.get());
return res;
}
Expand All @@ -103,8 +103,10 @@ int PyMoneroRpcConnection::compare(std::shared_ptr<PyMoneroRpcConnection> c1, st
} else {
if (c1->is_online()) return -1;
else if (c2->is_online()) return 1;
else if (!c1->is_online()) return -1;
else return 1; // c1 is offline
// TODO manage never connected
//else if (!c1->is_online()) return -1;
//else return 1; // c1 is offline
return -1;
}
}

Expand Down Expand Up @@ -1387,27 +1389,27 @@ void PyMoneroConnectionManager::stop_polling() {
}
}

void PyMoneroConnectionManager::start_polling(std::optional<uint64_t> period_ms, std::optional<bool> auto_switch, std::optional<uint64_t> timeout_ms, std::optional<PyMoneroConnectionPollType> poll_type, std::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> &excluded_connections) {
void PyMoneroConnectionManager::start_polling(boost::optional<uint64_t> period_ms, boost::optional<bool> auto_switch, boost::optional<uint64_t> timeout_ms, boost::optional<PyMoneroConnectionPollType> poll_type, boost::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> &excluded_connections) {
// apply defaults
if (!period_ms.has_value()) period_ms = DEFAULT_POLL_PERIOD;
if (auto_switch.has_value()) set_auto_switch(auto_switch.value());
if (timeout_ms.has_value()) set_timeout(timeout_ms.value());
if (!poll_type.has_value()) poll_type = PyMoneroConnectionPollType::PRIORITIZED;
if (period_ms == boost::none) period_ms = DEFAULT_POLL_PERIOD;
if (auto_switch != boost::none) set_auto_switch(auto_switch.get());
if (timeout_ms != boost::none) set_timeout(timeout_ms.get());
if (poll_type == boost::none) poll_type = PyMoneroConnectionPollType::PRIORITIZED;

// stop polling
stop_polling();

// start polling
switch (poll_type.value()) {
switch (poll_type.get()) {
case PyMoneroConnectionPollType::CURRENT:
start_polling_connection(period_ms.value());
start_polling_connection(period_ms.get());
break;
case PyMoneroConnectionPollType::ALL:
start_polling_connections(period_ms.value());
start_polling_connections(period_ms.get());
break;
case PyMoneroConnectionPollType::UNDEFINED:
case PyMoneroConnectionPollType::PRIORITIZED:
start_polling_prioritized_connections(period_ms.value(), excluded_connections);
start_polling_prioritized_connections(period_ms.get(), excluded_connections);
break;
}
}
Expand Down Expand Up @@ -1560,7 +1562,7 @@ void PyMoneroConnectionManager::start_polling_connections(uint64_t period_ms) {
m_thread.detach();
}

void PyMoneroConnectionManager::start_polling_prioritized_connections(uint64_t period_ms, std::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections) {
void PyMoneroConnectionManager::start_polling_prioritized_connections(uint64_t period_ms, boost::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections) {
m_is_polling = true;
m_thread = std::thread([this, period_ms, &excluded_connections]() {
while (m_is_polling) {
Expand Down Expand Up @@ -1606,10 +1608,10 @@ bool PyMoneroConnectionManager::check_connections(const std::vector<std::shared_
}
}

void PyMoneroConnectionManager::check_prioritized_connections(std::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections) {
void PyMoneroConnectionManager::check_prioritized_connections(boost::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections) {
for (const auto &prioritized_connections : get_connections_in_ascending_priority()) {
if (excluded_connections.has_value()) {
std::set<std::shared_ptr<PyMoneroRpcConnection>> ex(excluded_connections.value().begin(), excluded_connections.value().end());
if (excluded_connections != boost::none) {
std::set<std::shared_ptr<PyMoneroRpcConnection>> ex(excluded_connections.get().begin(), excluded_connections.get().end());
check_connections(prioritized_connections, ex);
}
else { check_connections(prioritized_connections, {}); }
Expand Down Expand Up @@ -1676,7 +1678,7 @@ std::shared_ptr<PyMoneroRpcConnection> PyMoneroConnectionManager::get_best_conne
for (int i = 0; i < MIN_BETTER_RESPONSES; ++i) {
auto curr_time = it_curr->second[i];
auto best_time = it_best->second[i];
if (!curr_time.has_value() || !best_time.has_value() || curr_time.value() > best_time.value()) {
if (curr_time == boost::none || best_time == boost::none || curr_time.get() > best_time.get()) {
consistently_better = false;
break;
}
Expand Down
18 changes: 9 additions & 9 deletions src/cpp/daemon/py_monero_daemon_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ class PyMoneroJsonResponse {
m_result = result;
}

std::optional<py::object> get_result() const;
boost::optional<py::object> get_result() const;
};

class PyMoneroPathResponse {
Expand All @@ -362,7 +362,7 @@ class PyMoneroPathResponse {
m_response = response;
}

std::optional<py::object> get_response() const;
boost::optional<py::object> get_response() const;
static std::shared_ptr<PyMoneroPathResponse> deserialize(const std::string& response_json);
};

Expand All @@ -383,7 +383,7 @@ class PyMoneroBinaryResponse {
}

static std::shared_ptr<PyMoneroBinaryResponse> deserialize(const std::string& response_binary);
std::optional<py::object> get_response() const;
boost::optional<py::object> get_response() const;
};

class PyMoneroVersion : public monero::monero_version {
Expand Down Expand Up @@ -951,21 +951,21 @@ class PyMoneroRpcConnection : public monero_rpc_connection {

// exposed python methods

inline std::optional<py::object> send_json_request(const std::string method, boost::optional<py::object> parameters) {
inline boost::optional<py::object> send_json_request(const std::string method, boost::optional<py::object> parameters) {
PyMoneroJsonRequest request(method, parameters);
auto response = send_json_request(request);

return response->get_result();
}

inline std::optional<py::object> send_path_request(const std::string method, boost::optional<py::object> parameters) {
inline boost::optional<py::object> send_path_request(const std::string method, boost::optional<py::object> parameters) {
PyMoneroPathRequest request(method, parameters);
auto response = send_path_request(request);

return response->get_response();
}

inline std::optional<py::object> send_binary_request(const std::string method, boost::optional<py::object> parameters) {
inline boost::optional<py::object> send_binary_request(const std::string method, boost::optional<py::object> parameters) {
PyMoneroBinaryRequest request(method, parameters);
auto response = send_binary_request(request);

Expand Down Expand Up @@ -1034,7 +1034,7 @@ class PyMoneroConnectionManager {
void check_connection();
void set_auto_switch(bool auto_switch);
void stop_polling();
void start_polling(std::optional<uint64_t> period_ms, std::optional<bool> auto_switch, std::optional<uint64_t> timeout_ms, std::optional<PyMoneroConnectionPollType> poll_type, std::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> &excluded_connections);
void start_polling(boost::optional<uint64_t> period_ms, boost::optional<bool> auto_switch, boost::optional<uint64_t> timeout_ms, boost::optional<PyMoneroConnectionPollType> poll_type, boost::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> &excluded_connections);
std::vector<std::shared_ptr<PyMoneroRpcConnection>> get_peer_connections() const { throw std::runtime_error("PyMoneroConnectionManager::get_peer_connections(): not implemented"); }
std::shared_ptr<PyMoneroRpcConnection> get_best_available_connection(const std::set<std::shared_ptr<PyMoneroRpcConnection>>& excluded_connections = {});
std::shared_ptr<PyMoneroRpcConnection> get_best_available_connection(std::shared_ptr<PyMoneroRpcConnection>& excluded_connection);
Expand Down Expand Up @@ -1064,9 +1064,9 @@ class PyMoneroConnectionManager {
std::vector<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> get_connections_in_ascending_priority();
void start_polling_connection(uint64_t period_ms);
void start_polling_connections(uint64_t period_ms);
void start_polling_prioritized_connections(uint64_t period_ms, std::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections);
void start_polling_prioritized_connections(uint64_t period_ms, boost::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections);
bool check_connections(const std::vector<std::shared_ptr<PyMoneroRpcConnection>>& connections, const std::set<std::shared_ptr<PyMoneroRpcConnection>>& excluded_connections = {});
void check_prioritized_connections(std::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections);
void check_prioritized_connections(boost::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections);
std::shared_ptr<PyMoneroRpcConnection> process_responses(const std::vector<std::shared_ptr<PyMoneroRpcConnection>>& responses);
std::shared_ptr<PyMoneroRpcConnection> get_best_connection_from_prioritized_responses(const std::vector<std::shared_ptr<PyMoneroRpcConnection>>& responses);
std::shared_ptr<PyMoneroRpcConnection> update_best_connection_in_priority();
Expand Down
30 changes: 9 additions & 21 deletions src/cpp/py_monero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,10 +268,7 @@ PYBIND11_MODULE(monero, m) {
.def_readwrite("proxy_uri", &PyMoneroRpcConnection::m_proxy_uri)
.def_property("zmq_uri",
[](const PyMoneroRpcConnection& self) { return self.m_zmq_uri; },
[](PyMoneroRpcConnection& self, std::optional<std::string> val) {
if (val.has_value()) self.m_zmq_uri = val.value();
else self.m_zmq_uri = boost::none;
})
[](PyMoneroRpcConnection& self, boost::optional<std::string> val) { self.m_zmq_uri = val; })
.def_property("priority",
[](const PyMoneroRpcConnection& self) { return self.m_priority; },
[](PyMoneroRpcConnection& self, int val) { self.m_priority = val; })
Expand All @@ -280,10 +277,7 @@ PYBIND11_MODULE(monero, m) {
[](PyMoneroRpcConnection& self, uint64_t val) { self.m_timeout = val; })
.def_property("response_time",
[](const PyMoneroRpcConnection& self) { return self.m_response_time; },
[](PyMoneroRpcConnection& self, std::optional<long> val) {
if (val.has_value()) self.m_response_time = val.value();
else self.m_response_time = boost::none;
})
[](PyMoneroRpcConnection& self, boost::optional<long> val) { self.m_response_time = val; })
.def("set_attribute", [](PyMoneroRpcConnection& self, const std::string& key, const std::string& value) {
MONERO_CATCH_AND_RETHROW(self.set_attribute(key, value));
}, py::arg("key"), py::arg("value"))
Expand Down Expand Up @@ -376,7 +370,7 @@ PYBIND11_MODULE(monero, m) {
.def("check_connection", [](PyMoneroConnectionManager& self) {
MONERO_CATCH_AND_RETHROW(self.check_connection());
})
.def("start_polling", [](PyMoneroConnectionManager& self, std::optional<uint64_t> period_ms, std::optional<bool> auto_switch, std::optional<uint64_t> timeout_ms, std::optional<PyMoneroConnectionPollType> poll_type, std::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections) {
.def("start_polling", [](PyMoneroConnectionManager& self, boost::optional<uint64_t> period_ms, boost::optional<bool> auto_switch, boost::optional<uint64_t> timeout_ms, boost::optional<PyMoneroConnectionPollType> poll_type, boost::optional<std::vector<std::shared_ptr<PyMoneroRpcConnection>>> excluded_connections) {
MONERO_CATCH_AND_RETHROW(self.start_polling(period_ms, auto_switch, timeout_ms, poll_type, excluded_connections));
}, py::arg("period_ms") = py::none(), py::arg("auto_switch") = py::none(), py::arg("timeout_ms") = py::none(), py::arg("poll_type") = py::none(), py::arg("excluded_connections") = py::none())
.def("stop_polling", [](PyMoneroConnectionManager& self) {
Expand Down Expand Up @@ -736,10 +730,7 @@ PYBIND11_MODULE(monero, m) {
MONERO_CATCH_AND_RETHROW(self.merge(_self, other));
}, py::arg("_self"), py::arg("other"))
.def("get_height", [](monero::monero_tx& self) {
std::optional<uint64_t> height;
boost::optional<uint64_t> b_height = self.get_height();
if (b_height != boost::none) height = b_height.value();
return height;
MONERO_CATCH_AND_RETHROW(self.get_height());
});

// monero_key_image
Expand Down Expand Up @@ -1164,7 +1155,7 @@ PYBIND11_MODULE(monero, m) {
.def_readwrite("address", &monero::monero_address_book_entry::m_address)
.def_readwrite("description", &monero::monero_address_book_entry::m_description)
.def_readwrite("payment_id", &monero::monero_address_book_entry::m_payment_id);

// monero_wallet_listener
py_monero_wallet_listener
.def(py::init<>())
Expand Down Expand Up @@ -1410,8 +1401,10 @@ PYBIND11_MODULE(monero, m) {
});

// monero_daemon_default
// TODO move monero_daemon_default to monero_daemon
py_monero_daemon_default
.def(py::init<>());

// monero_daemon_rpc
py_monero_daemon_rpc
.def(py::init<>())
Expand All @@ -1431,13 +1424,8 @@ PYBIND11_MODULE(monero, m) {
.def("is_view_only", [](PyMoneroWallet& self) {
MONERO_CATCH_AND_RETHROW(self.is_view_only());
})
.def("set_connection_manager", [](PyMoneroWallet& self, const std::optional<std::shared_ptr<PyMoneroConnectionManager>> &connection_manager) {
if (connection_manager.has_value()) {
MONERO_CATCH_AND_RETHROW(self.set_connection_manager(connection_manager.value()));
}
else {
MONERO_CATCH_AND_RETHROW(self.set_connection_manager(nullptr));
}
.def("set_connection_manager", [](PyMoneroWallet& self, const std::shared_ptr<PyMoneroConnectionManager> &connection_manager) {
MONERO_CATCH_AND_RETHROW(self.set_connection_manager(connection_manager));
}, py::arg("connection_manager"))
.def("get_connection_manager", [](PyMoneroWallet& self) {
MONERO_CATCH_AND_RETHROW(self.get_connection_manager());
Expand Down
Loading