From 55e3a7af94ec428f8917fe021b6a88a1730eaee9 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 16 Jul 2026 23:20:26 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20getInviteAddresses=20=E2=80=94=20use=20a?= =?UTF-8?q?ctive=20direct-IP=20connections=20instead=20of=20DB=20peer=20li?= =?UTF-8?q?st?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Priority: iterate instance->connections for links with NAT_TYPE_DIRECT (connected and reachable). Fallback: own socket addresses. Removed broken getOnlinePeerAddresses() which returned other nodes' addresses. --- tools/chatgui/transport/utun_node.cpp | 34 +++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/tools/chatgui/transport/utun_node.cpp b/tools/chatgui/transport/utun_node.cpp index 62bdfb2f..25d2f0b6 100644 --- a/tools/chatgui/transport/utun_node.cpp +++ b/tools/chatgui/transport/utun_node.cpp @@ -103,12 +103,38 @@ QString UtunNode::pubKeyHex() const { } QList UtunNode::getInviteAddresses(DbManager* db) { + (void)db; QList addrs; - if (db && db->isOpen()) { - QList peerAddrs = db->getOnlinePeerAddresses(db->myNodeId()); - for (int i = 0; i < peerAddrs.size() && i < 2; i++) - addrs.append(peerAddrs[i]); + if (m_instance) { + struct ll_entry* entry = m_instance->connections->head; + while (entry) { + struct conn_queue_entry* ce = (struct conn_queue_entry*)entry->data; + struct ETCP_CONN* conn = ce->conn; + if (conn && conn->initialized && conn->links_up > 0) { + struct ETCP_LINK* link = conn->links; + while (link) { + if (link->link_state == 3 && link->nat_type == NAT_TYPE_DIRECT) { + NodeAddr a; + struct sockaddr_storage* sa = &link->remote_addr; + if (sa->ss_family == AF_INET) { + struct sockaddr_in* sin = (struct sockaddr_in*)sa; + a.family = 4; + a.address = QByteArray((const char*)&sin->sin_addr, 4); + a.port = ntohs(sin->sin_port); + } else { + struct sockaddr_in6* sin6 = (struct sockaddr_in6*)sa; + a.family = 6; + a.address = QByteArray((const char*)&sin6->sin6_addr, 16); + a.port = ntohs(sin6->sin6_port); + } + addrs.append(a); + } + link = link->next; + } + } + entry = entry->next; + } } if (addrs.isEmpty() && m_instance) {