Skip to content

Commit 0635233

Browse files
committed
net: make outgoing I2P connections from CConnman
1 parent 9559bd1 commit 0635233

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/net.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,10 +421,20 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
421421
bool connected = false;
422422
std::unique_ptr<Sock> sock;
423423
proxyType proxy;
424+
CAddress addr_bind;
425+
assert(!addr_bind.IsValid());
426+
424427
if (addrConnect.IsValid()) {
425428
bool proxyConnectionFailed = false;
426429

427-
if (GetProxy(addrConnect.GetNetwork(), proxy)) {
430+
if (addrConnect.GetNetwork() == NET_I2P && m_i2p_sam_session.get() != nullptr) {
431+
i2p::Connection conn;
432+
if (m_i2p_sam_session->Connect(addrConnect, conn, proxyConnectionFailed)) {
433+
connected = true;
434+
sock = std::make_unique<Sock>(std::move(conn.sock));
435+
addr_bind = CAddress{conn.me, NODE_NONE};
436+
}
437+
} else if (GetProxy(addrConnect.GetNetwork(), proxy)) {
428438
sock = CreateSock(proxy.proxy);
429439
if (!sock) {
430440
return nullptr;
@@ -464,7 +474,9 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
464474
// Add node
465475
NodeId id = GetNewNodeId();
466476
uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize();
467-
CAddress addr_bind = GetBindAddress(sock->Get());
477+
if (!addr_bind.IsValid()) {
478+
addr_bind = GetBindAddress(sock->Get());
479+
}
468480
CNode* pnode = new CNode(id, nLocalServices, sock->Release(), addrConnect, CalculateKeyedNetGroup(addrConnect), nonce, addr_bind, pszDest ? pszDest : "", conn_type, /* inbound_onion */ false);
469481
pnode->AddRef();
470482

0 commit comments

Comments
 (0)