Browse Source

fix(chatgui): distinguish untranslated addresses from unmeasured profiles

stream-multiview
evgeny 7 days ago
parent
commit
3f7cfe1c86
  1. 28
      tools/chatgui/src/nodespage.cpp
  2. 8
      tools/chatgui/tests/test_channel_replies.cpp

28
tools/chatgui/src/nodespage.cpp

@ -1,6 +1,7 @@
#include <QCoreApplication>
// nodespage.cpp — Nodes table + dump in settings
#include "nodespage.h"
#include "addressprofiletext.h"
#include "../db/db_manager.h"
#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)
: 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)

8
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<QPlainTextEdit*>(); 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() {

Loading…
Cancel
Save