fix(chatgui): distinguish untranslated addresses from unmeasured profiles

This commit is contained in:
evgeny committed 2026-10-17 23:19:25 +02:00
1 parent a485b10e63
commit 3f7cfe1c86
2 files changed
+11 -25

No files matched your search

+5 -23
View File
@@ -1,6 +1,7 @@
#include <QCoreApplication> #include <QCoreApplication>
// nodespage.cpp — Nodes table + dump in settings // nodespage.cpp — Nodes table + dump in settings
#include "nodespage.h" #include "nodespage.h"
#include "addressprofiletext.h"
#include "../db/db_manager.h" #include "../db/db_manager.h"
#include <QVBoxLayout> #include <QVBoxLayout>
@@ -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) NodesPage::NodesPage(DbManager* db, QWidget* parent)
: QWidget(parent) : QWidget(parent)
, m_db(db) , m_db(db)
@@ -209,7 +197,7 @@ void NodesPage::refreshNodes() {
sqlite3_stmt* na = nullptr; sqlite3_stmt* na = nullptr;
sqlite3_prepare_v2(d, 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", " FROM node_addresses WHERE node_id=? ORDER BY family, port",
-1, &na, nullptr); -1, &na, nullptr);
if (na) { if (na) {
@@ -223,17 +211,11 @@ void NodesPage::refreshNodes() {
int addrSz = sqlite3_column_bytes(na, 2); int addrSz = sqlite3_column_bytes(na, 2);
int port = sqlite3_column_int(na, 3); int port = sqlite3_column_int(na, 3);
int rtt = sqlite3_column_int(na, 4); int rtt = sqlite3_column_int(na, 4);
int addrType = sqlite3_column_int(na, 5); int mapping = sqlite3_column_int(na, 5), inbound = sqlite3_column_int(na, 6);
int kind = sqlite3_column_int(na, 6); int source = sqlite3_column_int(na, 7);
int mapping = sqlite3_column_int(na, 7), inbound = sqlite3_column_int(na, 8);
if (addr && addrSz > 0) { if (addr && addrSz > 0) {
QString label = addrTypeStr(addrType); QString label = addressProfileText(mapping, inbound, source);
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));
}
dump += QString(" %1:%2 %3 %4 rtt=%5ms\n") dump += QString(" %1:%2 %3 %4 rtt=%5ms\n")
.arg(addrStr(addr, family)) .arg(addrStr(addr, family))
.arg(port) .arg(port)
+6 -2
View File
@@ -81,7 +81,7 @@ private slots:
TOPO_SOCKMETA4 meta4{}; meta4.id = 5; meta4.config_type = CFG_SERVER_TYPE_PUBLIC; TOPO_SOCKMETA4 meta4{}; meta4.id = 5; meta4.config_type = CFG_SERVER_TYPE_PUBLIC;
meta4.address_profile.source = ADDRESS_SOURCE_ETCP; meta4.address_profile.source = ADDRESS_SOURCE_ETCP;
TOPO_SOCKMETA6 meta6{}; meta6.id = 6; meta6.config_type = CFG_SERVER_TYPE_PUBLIC; 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); 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; 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; 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<QPlainTextEdit*>(); QVERIFY(dump); const auto* dump = page.findChild<QPlainTextEdit*>(); QVERIFY(dump);
const QString text = dump->toPlainText(); const QString text = dump->toPlainText();
QVERIFY2(text.contains("194.63.142.140:0 TCP NAT?"), qPrintable(text)); 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() { void unavailableAndForeignReferencesFail() {