fix(chatgui): show measured NAT profile in member addresses
This commit is contained in:
1 parent
3e29a7ca1c
commit
a485b10e63
3 files changed
+32
-15
No files matched your search
@@ -1,5 +1,6 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include "accountlist.h"
|
#include "accountlist.h"
|
||||||
|
#include "addressprofiletext.h"
|
||||||
#include "accountdelegate.h"
|
#include "accountdelegate.h"
|
||||||
#include "memberlistmodel.h"
|
#include "memberlistmodel.h"
|
||||||
#include "avatars/avatargallery.h"
|
#include "avatars/avatargallery.h"
|
||||||
@@ -34,19 +35,6 @@ static void memberDetailCb(const uint8_t* data, int len) {
|
|||||||
g_detailTarget->onMemberDetailData(nodeId, data, len);
|
g_detailTarget->onMemberDetailData(nodeId, data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString addrRoleStr(int t) {
|
|
||||||
switch (t) {
|
|
||||||
case 0: return "local";
|
|
||||||
case 1: return "public";
|
|
||||||
case 2: return "nat_eim";
|
|
||||||
case 3: return "nat_dependent";
|
|
||||||
case 4: return "NAT?";
|
|
||||||
case 5: return "contact_required";
|
|
||||||
case 6: return "EIM?";
|
|
||||||
default: return QString("?%1").arg(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString AccountList::addrStr(const void* addr, int family) {
|
QString AccountList::addrStr(const void* addr, int family) {
|
||||||
if (family == 4) {
|
if (family == 4) {
|
||||||
const uint8_t* a = (const uint8_t*)addr;
|
const uint8_t* a = (const uint8_t*)addr;
|
||||||
@@ -269,7 +257,8 @@ void AccountList::showMemberDetail(quint64 nodeId) {
|
|||||||
|
|
||||||
sqlite3_stmt* na = nullptr;
|
sqlite3_stmt* na = nullptr;
|
||||||
sqlite3_prepare_v2(d,
|
sqlite3_prepare_v2(d,
|
||||||
"SELECT family, protocol, address, port, socket_id, addr_type FROM node_addresses WHERE node_id=?",
|
"SELECT family, protocol, address, port, socket_id, addr_type, nat_mapping, nat_inbound, nat_source"
|
||||||
|
" FROM node_addresses WHERE node_id=?",
|
||||||
-1, &na, nullptr);
|
-1, &na, nullptr);
|
||||||
if (na) {
|
if (na) {
|
||||||
sqlite3_bind_int64(na, 1, (sqlite3_int64)nodeId);
|
sqlite3_bind_int64(na, 1, (sqlite3_int64)nodeId);
|
||||||
@@ -283,6 +272,9 @@ void AccountList::showMemberDetail(quint64 nodeId) {
|
|||||||
a.port = sqlite3_column_int(na, 3);
|
a.port = sqlite3_column_int(na, 3);
|
||||||
a.socket_id = sqlite3_column_int(na, 4);
|
a.socket_id = sqlite3_column_int(na, 4);
|
||||||
a.addr_type = sqlite3_column_int(na, 5);
|
a.addr_type = sqlite3_column_int(na, 5);
|
||||||
|
a.nat_mapping = sqlite3_column_int(na, 6);
|
||||||
|
a.nat_inbound = sqlite3_column_int(na, 7);
|
||||||
|
a.nat_source = sqlite3_column_int(na, 8);
|
||||||
if (!a.addr.isEmpty()) m_detailAddrs.append(a);
|
if (!a.addr.isEmpty()) m_detailAddrs.append(a);
|
||||||
}
|
}
|
||||||
sqlite3_finalize(na);
|
sqlite3_finalize(na);
|
||||||
@@ -414,7 +406,7 @@ void AccountList::updateDetailDisplay() {
|
|||||||
.arg(a.ifname)
|
.arg(a.ifname)
|
||||||
.arg(addrStr(a.addr.constData(), a.family))
|
.arg(addrStr(a.addr.constData(), a.family))
|
||||||
.arg(a.port)
|
.arg(a.port)
|
||||||
.arg(addrRoleStr(a.addr_type)));
|
.arg(addressProfileText(a.nat_mapping, a.nat_inbound, a.nat_source)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ struct DetailAddress {
|
|||||||
int port;
|
int port;
|
||||||
int socket_id;
|
int socket_id;
|
||||||
int addr_type;
|
int addr_type;
|
||||||
|
int nat_mapping;
|
||||||
|
int nat_inbound;
|
||||||
|
int nat_source;
|
||||||
QString ifname;
|
QString ifname;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QString>
|
||||||
|
#include "../../../src/routing_layer/address_profile.h"
|
||||||
|
|
||||||
|
// Показывает результат измерения отдельно от происхождения адреса (интерфейс или NAT).
|
||||||
|
inline QString addressProfileText(int mapping, int inbound, int source) {
|
||||||
|
if (source == ADDRESS_SOURCE_NONE) return QCoreApplication::translate("ChatGui", "NAT not determined");
|
||||||
|
QString text;
|
||||||
|
switch (mapping) {
|
||||||
|
case ADDRESS_MAP_UNCHANGED: text = QCoreApplication::translate("ChatGui", "No NAT"); break;
|
||||||
|
case ADDRESS_MAP_EIM: text = inbound == ADDRESS_IN_UNKNOWN ? "EIM?" : "EIM"; break;
|
||||||
|
case ADDRESS_MAP_DEPENDENT: return "DEPENDENT";
|
||||||
|
default: return "NAT?";
|
||||||
|
}
|
||||||
|
if (inbound == ADDRESS_IN_OPEN) text += QCoreApplication::translate("ChatGui", "; inbound open");
|
||||||
|
else if (inbound == ADDRESS_IN_CONTACT) text += QCoreApplication::translate("ChatGui", "; inbound filtered");
|
||||||
|
else if (mapping == ADDRESS_MAP_UNCHANGED) text += QCoreApplication::translate("ChatGui", "; inbound untested");
|
||||||
|
if (source == ADDRESS_SOURCE_STUN) text += " (STUN)";
|
||||||
|
return text;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user