fix(chatgui): distinguish untranslated addresses from unmeasured profiles
This commit is contained in:
1 parent
a485b10e63
commit
3f7cfe1c86
2 files changed
+11
-25
No files matched your search
@@ -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)
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in new issue
Block a user