diff --git a/tools/chatgui/src/nodespage.cpp b/tools/chatgui/src/nodespage.cpp index 2d36eefc..0e7b5b0c 100644 --- a/tools/chatgui/src/nodespage.cpp +++ b/tools/chatgui/src/nodespage.cpp @@ -1,6 +1,7 @@ #include // nodespage.cpp — Nodes table + dump in settings #include "nodespage.h" +#include "addressprofiletext.h" #include "../db/db_manager.h" #include @@ -49,19 +50,6 @@ QString NodesPage::protoStr(int protocol) { } } -static QString addrTypeStr(int t) { - switch (t) { - case ADDR_TYPE_NETIF: return "NETIF"; - case ADDR_TYPE_DIRECT: return "DIRECT"; - case ADDR_TYPE_NAT_EIM: return "NAT type=EIM"; - case ADDR_TYPE_NAT_STRICT: return "NAT type=STRICT"; - case ADDR_TYPE_NAT: return "NAT?"; - case ADDR_TYPE_CONTACT: return "CONTACT_REQUIRED"; - case ADDR_TYPE_NAT_EIM_UNVERIFIED: return "NAT type=EIM?"; - default: return QString("?%1").arg(t); - } -} - NodesPage::NodesPage(DbManager* db, QWidget* parent) : QWidget(parent) , m_db(db) @@ -209,7 +197,7 @@ void NodesPage::refreshNodes() { sqlite3_stmt* na = nullptr; sqlite3_prepare_v2(d, - "SELECT family, protocol, address, port, rtt, addr_type, address_kind, nat_mapping, nat_inbound" + "SELECT family, protocol, address, port, rtt, nat_mapping, nat_inbound, nat_source" " FROM node_addresses WHERE node_id=? ORDER BY family, port", -1, &na, nullptr); if (na) { @@ -223,17 +211,11 @@ void NodesPage::refreshNodes() { int addrSz = sqlite3_column_bytes(na, 2); int port = sqlite3_column_int(na, 3); int rtt = sqlite3_column_int(na, 4); - int addrType = sqlite3_column_int(na, 5); - int kind = sqlite3_column_int(na, 6); - int mapping = sqlite3_column_int(na, 7), inbound = sqlite3_column_int(na, 8); + int mapping = sqlite3_column_int(na, 5), inbound = sqlite3_column_int(na, 6); + int source = sqlite3_column_int(na, 7); if (addr && addrSz > 0) { - QString label = addrTypeStr(addrType); - if (kind == TOPO_ADDR_INTERFACE) { - label = QStringLiteral("INTERFACE"); - if (mapping != ADDRESS_MAP_UNKNOWN || inbound != ADDRESS_IN_UNKNOWN) - label += QString(" mapping=%1 inbound=%2").arg(address_mapping_name(mapping), address_inbound_name(inbound)); - } + QString label = addressProfileText(mapping, inbound, source); dump += QString(" %1:%2 %3 %4 rtt=%5ms\n") .arg(addrStr(addr, family)) .arg(port) diff --git a/tools/chatgui/tests/test_channel_replies.cpp b/tools/chatgui/tests/test_channel_replies.cpp index b47b1b5b..79a191d1 100644 --- a/tools/chatgui/tests/test_channel_replies.cpp +++ b/tools/chatgui/tests/test_channel_replies.cpp @@ -81,7 +81,7 @@ private slots: TOPO_SOCKMETA4 meta4{}; meta4.id = 5; meta4.config_type = CFG_SERVER_TYPE_PUBLIC; meta4.address_profile.source = ADDRESS_SOURCE_ETCP; TOPO_SOCKMETA6 meta6{}; meta6.id = 6; meta6.config_type = CFG_SERVER_TYPE_PUBLIC; - meta6.address_profile = {ADDRESS_MAP_UNCHANGED, ADDRESS_IN_OPEN, ADDRESS_SOURCE_ETCP}; + meta6.address_profile = {ADDRESS_MAP_UNCHANGED, ADDRESS_IN_UNKNOWN, ADDRESS_SOURCE_ETCP}; TOPO_ADDR4 addr4{}; memcpy(addr4.addr, (uint8_t[]){194,63,142,140}, 4); addr4.port = 0; addr4.socket_id = 5; addr4.protocol = TOPO_PROTO_TCP; addr4.type = TOPO_ADDR_NAT; TOPO_ADDR6 addr6{}; addr6.addr[0] = 0x2a; addr6.addr[1] = 0x04; addr6.addr[2] = 0x52; addr6.addr[15] = 0xf; @@ -93,7 +93,11 @@ private slots: const auto* dump = page.findChild(); QVERIFY(dump); const QString text = dump->toPlainText(); QVERIFY2(text.contains("194.63.142.140:0 TCP NAT?"), qPrintable(text)); - QVERIFY2(text.contains("2a04:5200:0:0:0:0:0:f:443 TCP+REALITY INTERFACE mapping=UNCHANGED inbound=OPEN"), qPrintable(text)); + QVERIFY2(text.contains("2a04:5200:0:0:0:0:0:f:443 TCP+REALITY No NAT; inbound untested"), qPrintable(text)); + meta6.address_profile = {}; + QCOMPARE(topo_node_sqlite_addrs_put(inst->topo_sqlite_db, inst->node_id, &node), 0); + page.refreshNodes(); + QVERIFY2(dump->toPlainText().contains("TCP+REALITY NAT not determined"), qPrintable(dump->toPlainText())); } void unavailableAndForeignReferencesFail() {