mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-09-14 23:37:51 +02:00
net: use the proxy if overriden when doing v2->v1 reconnections
`OpenNetworkConnection()` supports overriding the proxy to use for connecting. However when v2 connection is attempted and it fails a v1 connection is tried without that proxy. Store the override proxy in `CNode` and pass it to `CConnman::m_reconnections` to be used for v1 retries.
This commit is contained in:
@@ -539,6 +539,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect,
|
|||||||
network_id,
|
network_id,
|
||||||
CNodeOptions{
|
CNodeOptions{
|
||||||
.permission_flags = permission_flags,
|
.permission_flags = permission_flags,
|
||||||
|
.proxy_override = proxy_override,
|
||||||
.i2p_sam_session = std::move(i2p_transient_session),
|
.i2p_sam_session = std::move(i2p_transient_session),
|
||||||
.recv_flood_size = nReceiveFloodSize,
|
.recv_flood_size = nReceiveFloodSize,
|
||||||
.use_v2transport = use_v2transport,
|
.use_v2transport = use_v2transport,
|
||||||
@@ -1956,6 +1957,7 @@ void CConnman::DisconnectNodes()
|
|||||||
// and we don't want to hold up the socket handler thread for that long.
|
// and we don't want to hold up the socket handler thread for that long.
|
||||||
if (network_active && pnode->m_transport->ShouldReconnectV1()) {
|
if (network_active && pnode->m_transport->ShouldReconnectV1()) {
|
||||||
reconnections_to_add.push_back({
|
reconnections_to_add.push_back({
|
||||||
|
.proxy_override = pnode->m_proxy_override,
|
||||||
.addr_connect = pnode->addr,
|
.addr_connect = pnode->addr,
|
||||||
.grant = std::move(pnode->grantOutbound),
|
.grant = std::move(pnode->grantOutbound),
|
||||||
.destination = pnode->m_dest,
|
.destination = pnode->m_dest,
|
||||||
@@ -4028,6 +4030,7 @@ CNode::CNode(NodeId idIn,
|
|||||||
m_permission_flags{node_opts.permission_flags},
|
m_permission_flags{node_opts.permission_flags},
|
||||||
m_sock{sock},
|
m_sock{sock},
|
||||||
m_connected{NodeClock::now()},
|
m_connected{NodeClock::now()},
|
||||||
|
m_proxy_override{std::move(node_opts.proxy_override)},
|
||||||
addr{addrIn},
|
addr{addrIn},
|
||||||
addrBind{addrBindIn},
|
addrBind{addrBindIn},
|
||||||
m_addr_name{addrNameIn.empty() ? addr.ToStringAddrPort() : addrNameIn},
|
m_addr_name{addrNameIn.empty() ? addr.ToStringAddrPort() : addrNameIn},
|
||||||
@@ -4214,7 +4217,8 @@ void CConnman::PerformReconnections()
|
|||||||
std::move(item.grant),
|
std::move(item.grant),
|
||||||
item.destination.empty() ? nullptr : item.destination.c_str(),
|
item.destination.empty() ? nullptr : item.destination.c_str(),
|
||||||
item.conn_type,
|
item.conn_type,
|
||||||
item.use_v2transport);
|
item.use_v2transport,
|
||||||
|
item.proxy_override);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -669,6 +669,7 @@ public:
|
|||||||
struct CNodeOptions
|
struct CNodeOptions
|
||||||
{
|
{
|
||||||
NetPermissionFlags permission_flags = NetPermissionFlags::None;
|
NetPermissionFlags permission_flags = NetPermissionFlags::None;
|
||||||
|
std::optional<Proxy> proxy_override = {};
|
||||||
std::unique_ptr<i2p::sam::Session> i2p_sam_session = nullptr;
|
std::unique_ptr<i2p::sam::Session> i2p_sam_session = nullptr;
|
||||||
bool prefer_evict = false;
|
bool prefer_evict = false;
|
||||||
size_t recv_flood_size{DEFAULT_MAXRECEIVEBUFFER * 1000};
|
size_t recv_flood_size{DEFAULT_MAXRECEIVEBUFFER * 1000};
|
||||||
@@ -711,6 +712,10 @@ public:
|
|||||||
std::atomic<NodeClock::time_point> m_last_recv{NodeClock::epoch};
|
std::atomic<NodeClock::time_point> m_last_recv{NodeClock::epoch};
|
||||||
//! Unix epoch time at peer connection
|
//! Unix epoch time at peer connection
|
||||||
const NodeClock::time_point m_connected;
|
const NodeClock::time_point m_connected;
|
||||||
|
|
||||||
|
//! Proxy to use regardless of global proxy settings if reconnecting to this node.
|
||||||
|
const std::optional<Proxy> m_proxy_override;
|
||||||
|
|
||||||
// Address of this peer
|
// Address of this peer
|
||||||
const CAddress addr;
|
const CAddress addr;
|
||||||
// Bind address of our side of the connection
|
// Bind address of our side of the connection
|
||||||
@@ -1796,6 +1801,7 @@ private:
|
|||||||
/** Struct for entries in m_reconnections. */
|
/** Struct for entries in m_reconnections. */
|
||||||
struct ReconnectionInfo
|
struct ReconnectionInfo
|
||||||
{
|
{
|
||||||
|
std::optional<Proxy> proxy_override;
|
||||||
CAddress addr_connect;
|
CAddress addr_connect;
|
||||||
CountingSemaphoreGrant<> grant;
|
CountingSemaphoreGrant<> grant;
|
||||||
std::string destination;
|
std::string destination;
|
||||||
|
|||||||
Reference in New Issue
Block a user