[rpc/net] Allow v2 p2p support in addconnection
This test-only RPC is required when a TestNode initiates an outbound v2 p2p connection. Add a new arg `v2transport` so that the node can attempt v2 connections.
This commit is contained in:
1 parent
16b5b4b674
commit
4487b80517
4 files changed
+14
-6
No files matched your search
+2
-2
@@ -1833,7 +1833,7 @@ void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock,
|
|||||||
RandAddEvent((uint32_t)id);
|
RandAddEvent((uint32_t)id);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CConnman::AddConnection(const std::string& address, ConnectionType conn_type)
|
bool CConnman::AddConnection(const std::string& address, ConnectionType conn_type, bool use_v2transport = false)
|
||||||
{
|
{
|
||||||
AssertLockNotHeld(m_unused_i2p_sessions_mutex);
|
AssertLockNotHeld(m_unused_i2p_sessions_mutex);
|
||||||
std::optional<int> max_connections;
|
std::optional<int> max_connections;
|
||||||
@@ -1866,7 +1866,7 @@ bool CConnman::AddConnection(const std::string& address, ConnectionType conn_typ
|
|||||||
CSemaphoreGrant grant(*semOutbound, true);
|
CSemaphoreGrant grant(*semOutbound, true);
|
||||||
if (!grant) return false;
|
if (!grant) return false;
|
||||||
|
|
||||||
OpenNetworkConnection(CAddress(), false, std::move(grant), address.c_str(), conn_type, /*use_v2transport=*/false);
|
OpenNetworkConnection(CAddress(), false, std::move(grant), address.c_str(), conn_type, /*use_v2transport=*/use_v2transport);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1184,13 +1184,14 @@ public:
|
|||||||
* @param[in] address Address of node to try connecting to
|
* @param[in] address Address of node to try connecting to
|
||||||
* @param[in] conn_type ConnectionType::OUTBOUND, ConnectionType::BLOCK_RELAY,
|
* @param[in] conn_type ConnectionType::OUTBOUND, ConnectionType::BLOCK_RELAY,
|
||||||
* ConnectionType::ADDR_FETCH or ConnectionType::FEELER
|
* ConnectionType::ADDR_FETCH or ConnectionType::FEELER
|
||||||
|
* @param[in] use_v2transport Set to true if node attempts to connect using BIP 324 v2 transport protocol.
|
||||||
* @return bool Returns false if there are no available
|
* @return bool Returns false if there are no available
|
||||||
* slots for this connection:
|
* slots for this connection:
|
||||||
* - conn_type not a supported ConnectionType
|
* - conn_type not a supported ConnectionType
|
||||||
* - Max total outbound connection capacity filled
|
* - Max total outbound connection capacity filled
|
||||||
* - Max connection capacity for type is filled
|
* - Max connection capacity for type is filled
|
||||||
*/
|
*/
|
||||||
bool AddConnection(const std::string& address, ConnectionType conn_type) EXCLUSIVE_LOCKS_REQUIRED(!m_unused_i2p_sessions_mutex);
|
bool AddConnection(const std::string& address, ConnectionType conn_type, bool use_v2transport) EXCLUSIVE_LOCKS_REQUIRED(!m_unused_i2p_sessions_mutex);
|
||||||
|
|
||||||
size_t GetNodeCount(ConnectionDirection) const;
|
size_t GetNodeCount(ConnectionDirection) const;
|
||||||
uint32_t GetMappedAS(const CNetAddr& addr) const;
|
uint32_t GetMappedAS(const CNetAddr& addr) const;
|
||||||
|
|||||||
@@ -302,6 +302,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
|
|||||||
{ "sendmsgtopeer", 0, "peer_id" },
|
{ "sendmsgtopeer", 0, "peer_id" },
|
||||||
{ "stop", 0, "wait" },
|
{ "stop", 0, "wait" },
|
||||||
{ "addnode", 2, "v2transport" },
|
{ "addnode", 2, "v2transport" },
|
||||||
|
{ "addconnection", 2, "v2transport" },
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|||||||
+9
-3
@@ -370,6 +370,7 @@ static RPCHelpMan addconnection()
|
|||||||
{
|
{
|
||||||
{"address", RPCArg::Type::STR, RPCArg::Optional::NO, "The IP address and port to attempt connecting to."},
|
{"address", RPCArg::Type::STR, RPCArg::Optional::NO, "The IP address and port to attempt connecting to."},
|
||||||
{"connection_type", RPCArg::Type::STR, RPCArg::Optional::NO, "Type of connection to open (\"outbound-full-relay\", \"block-relay-only\", \"addr-fetch\" or \"feeler\")."},
|
{"connection_type", RPCArg::Type::STR, RPCArg::Optional::NO, "Type of connection to open (\"outbound-full-relay\", \"block-relay-only\", \"addr-fetch\" or \"feeler\")."},
|
||||||
|
{"v2transport", RPCArg::Type::BOOL, RPCArg::Default{false}, "Attempt to connect using BIP324 v2 transport protocol"},
|
||||||
},
|
},
|
||||||
RPCResult{
|
RPCResult{
|
||||||
RPCResult::Type::OBJ, "", "",
|
RPCResult::Type::OBJ, "", "",
|
||||||
@@ -378,8 +379,8 @@ static RPCHelpMan addconnection()
|
|||||||
{ RPCResult::Type::STR, "connection_type", "Type of connection opened." },
|
{ RPCResult::Type::STR, "connection_type", "Type of connection opened." },
|
||||||
}},
|
}},
|
||||||
RPCExamples{
|
RPCExamples{
|
||||||
HelpExampleCli("addconnection", "\"192.168.0.6:8333\" \"outbound-full-relay\"")
|
HelpExampleCli("addconnection", "\"192.168.0.6:8333\" \"outbound-full-relay\" true")
|
||||||
+ HelpExampleRpc("addconnection", "\"192.168.0.6:8333\" \"outbound-full-relay\"")
|
+ HelpExampleRpc("addconnection", "\"192.168.0.6:8333\" \"outbound-full-relay\" true")
|
||||||
},
|
},
|
||||||
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
|
||||||
{
|
{
|
||||||
@@ -401,11 +402,16 @@ static RPCHelpMan addconnection()
|
|||||||
} else {
|
} else {
|
||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, self.ToString());
|
throw JSONRPCError(RPC_INVALID_PARAMETER, self.ToString());
|
||||||
}
|
}
|
||||||
|
bool use_v2transport = !request.params[2].isNull() && request.params[2].get_bool();
|
||||||
|
|
||||||
NodeContext& node = EnsureAnyNodeContext(request.context);
|
NodeContext& node = EnsureAnyNodeContext(request.context);
|
||||||
CConnman& connman = EnsureConnman(node);
|
CConnman& connman = EnsureConnman(node);
|
||||||
|
|
||||||
const bool success = connman.AddConnection(address, conn_type);
|
if (use_v2transport && !(connman.GetLocalServices() & NODE_P2P_V2)) {
|
||||||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Error: Adding v2transport connections requires -v2transport init flag to be set.");
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool success = connman.AddConnection(address, conn_type, use_v2transport);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
throw JSONRPCError(RPC_CLIENT_NODE_CAPACITY_REACHED, "Error: Already at capacity for specified connection type.");
|
throw JSONRPCError(RPC_CLIENT_NODE_CAPACITY_REACHED, "Error: Already at capacity for specified connection type.");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user