mirror of
https://github.com/monero-project/monero.git
synced 2026-01-02 07:50:16 -08:00
Adding initial support for broadcasting transactions over Tor
- Support for ".onion" in --add-exclusive-node and --add-peer
- Add --anonymizing-proxy for outbound Tor connections
- Add --anonymous-inbounds for inbound Tor connections
- Support for sharing ".onion" addresses over Tor connections
- Support for broadcasting transactions received over RPC exclusively
over Tor (else broadcast over public IP when Tor not enabled).
This commit is contained in:
@@ -42,6 +42,7 @@ using namespace epee;
|
||||
#include "cryptonote_basic/account.h"
|
||||
#include "cryptonote_basic/cryptonote_basic_impl.h"
|
||||
#include "misc_language.h"
|
||||
#include "net/parse.h"
|
||||
#include "storages/http_abstract_invoke.h"
|
||||
#include "crypto/hash.h"
|
||||
#include "rpc/rpc_args.h"
|
||||
@@ -185,12 +186,12 @@ namespace cryptonote
|
||||
res.tx_count = m_core.get_blockchain_storage().get_total_transactions() - res.height; //without coinbase
|
||||
res.tx_pool_size = m_core.get_pool_transactions_count();
|
||||
res.alt_blocks_count = restricted ? 0 : m_core.get_blockchain_storage().get_alternative_blocks_count();
|
||||
uint64_t total_conn = restricted ? 0 : m_p2p.get_connections_count();
|
||||
res.outgoing_connections_count = restricted ? 0 : m_p2p.get_outgoing_connections_count();
|
||||
uint64_t total_conn = restricted ? 0 : m_p2p.get_public_connections_count();
|
||||
res.outgoing_connections_count = restricted ? 0 : m_p2p.get_public_outgoing_connections_count();
|
||||
res.incoming_connections_count = restricted ? 0 : (total_conn - res.outgoing_connections_count);
|
||||
res.rpc_connections_count = restricted ? 0 : get_connections_count();
|
||||
res.white_peerlist_size = restricted ? 0 : m_p2p.get_peerlist_manager().get_white_peers_count();
|
||||
res.grey_peerlist_size = restricted ? 0 : m_p2p.get_peerlist_manager().get_gray_peers_count();
|
||||
res.white_peerlist_size = restricted ? 0 : m_p2p.get_public_white_peers_count();
|
||||
res.grey_peerlist_size = restricted ? 0 : m_p2p.get_public_gray_peers_count();
|
||||
|
||||
cryptonote::network_type net_type = nettype();
|
||||
res.mainnet = net_type == MAINNET;
|
||||
@@ -902,12 +903,12 @@ namespace cryptonote
|
||||
PERF_TIMER(on_get_peer_list);
|
||||
std::vector<nodetool::peerlist_entry> white_list;
|
||||
std::vector<nodetool::peerlist_entry> gray_list;
|
||||
m_p2p.get_peerlist_manager().get_peerlist_full(gray_list, white_list);
|
||||
m_p2p.get_public_peerlist(gray_list, white_list);
|
||||
|
||||
res.white_list.reserve(white_list.size());
|
||||
for (auto & entry : white_list)
|
||||
{
|
||||
if (entry.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
|
||||
if (entry.adr.get_type_id() == epee::net_utils::ipv4_network_address::get_type_id())
|
||||
res.white_list.emplace_back(entry.id, entry.adr.as<epee::net_utils::ipv4_network_address>().ip(),
|
||||
entry.adr.as<epee::net_utils::ipv4_network_address>().port(), entry.last_seen, entry.pruning_seed);
|
||||
else
|
||||
@@ -917,7 +918,7 @@ namespace cryptonote
|
||||
res.gray_list.reserve(gray_list.size());
|
||||
for (auto & entry : gray_list)
|
||||
{
|
||||
if (entry.adr.get_type_id() == epee::net_utils::ipv4_network_address::ID)
|
||||
if (entry.adr.get_type_id() == epee::net_utils::ipv4_network_address::get_type_id())
|
||||
res.gray_list.emplace_back(entry.id, entry.adr.as<epee::net_utils::ipv4_network_address>().ip(),
|
||||
entry.adr.as<epee::net_utils::ipv4_network_address>().port(), entry.last_seen, entry.pruning_seed);
|
||||
else
|
||||
@@ -1646,12 +1647,12 @@ namespace cryptonote
|
||||
res.tx_count = m_core.get_blockchain_storage().get_total_transactions() - res.height; //without coinbase
|
||||
res.tx_pool_size = m_core.get_pool_transactions_count();
|
||||
res.alt_blocks_count = restricted ? 0 : m_core.get_blockchain_storage().get_alternative_blocks_count();
|
||||
uint64_t total_conn = restricted ? 0 : m_p2p.get_connections_count();
|
||||
res.outgoing_connections_count = restricted ? 0 : m_p2p.get_outgoing_connections_count();
|
||||
uint64_t total_conn = restricted ? 0 : m_p2p.get_public_connections_count();
|
||||
res.outgoing_connections_count = restricted ? 0 : m_p2p.get_public_outgoing_connections_count();
|
||||
res.incoming_connections_count = restricted ? 0 : (total_conn - res.outgoing_connections_count);
|
||||
res.rpc_connections_count = restricted ? 0 : get_connections_count();
|
||||
res.white_peerlist_size = restricted ? 0 : m_p2p.get_peerlist_manager().get_white_peers_count();
|
||||
res.grey_peerlist_size = restricted ? 0 : m_p2p.get_peerlist_manager().get_gray_peers_count();
|
||||
res.white_peerlist_size = restricted ? 0 : m_p2p.get_public_white_peers_count();
|
||||
res.grey_peerlist_size = restricted ? 0 : m_p2p.get_public_gray_peers_count();
|
||||
|
||||
cryptonote::network_type net_type = nettype();
|
||||
res.mainnet = net_type == MAINNET;
|
||||
@@ -1730,12 +1731,14 @@ namespace cryptonote
|
||||
epee::net_utils::network_address na;
|
||||
if (!i->host.empty())
|
||||
{
|
||||
if (!epee::net_utils::create_network_address(na, i->host))
|
||||
auto na_parsed = net::get_network_address(i->host, 0);
|
||||
if (!na_parsed)
|
||||
{
|
||||
error_resp.code = CORE_RPC_ERROR_CODE_WRONG_PARAM;
|
||||
error_resp.message = "Unsupported host type";
|
||||
return false;
|
||||
}
|
||||
na = std::move(*na_parsed);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1958,11 +1961,7 @@ namespace cryptonote
|
||||
bool core_rpc_server::on_out_peers(const COMMAND_RPC_OUT_PEERS::request& req, COMMAND_RPC_OUT_PEERS::response& res, const connection_context *ctx)
|
||||
{
|
||||
PERF_TIMER(on_out_peers);
|
||||
size_t n_connections = m_p2p.get_outgoing_connections_count();
|
||||
size_t n_delete = (n_connections > req.out_peers) ? n_connections - req.out_peers : 0;
|
||||
m_p2p.m_config.m_net_config.max_out_connection_count = req.out_peers;
|
||||
if (n_delete)
|
||||
m_p2p.delete_out_connections(n_delete);
|
||||
m_p2p.change_max_out_public_peers(req.out_peers);
|
||||
res.status = CORE_RPC_STATUS_OK;
|
||||
return true;
|
||||
}
|
||||
@@ -1970,11 +1969,7 @@ namespace cryptonote
|
||||
bool core_rpc_server::on_in_peers(const COMMAND_RPC_IN_PEERS::request& req, COMMAND_RPC_IN_PEERS::response& res, const connection_context *ctx)
|
||||
{
|
||||
PERF_TIMER(on_in_peers);
|
||||
size_t n_connections = m_p2p.get_incoming_connections_count();
|
||||
size_t n_delete = (n_connections > req.in_peers) ? n_connections - req.in_peers : 0;
|
||||
m_p2p.m_config.m_net_config.max_in_connection_count = req.in_peers;
|
||||
if (n_delete)
|
||||
m_p2p.delete_in_connections(n_delete);
|
||||
m_p2p.change_max_in_public_peers(req.in_peers);
|
||||
res.status = CORE_RPC_STATUS_OK;
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user