Measure owned endpoint mapping and inbound reachability separately
This commit is contained in:
1 parent
b54307a0df
commit
ff69552a61
51 files changed
+2620
-2483
No files matched your search
@@ -35,7 +35,7 @@ static void memberDetailCb(const uint8_t* data, int 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_strict"; case 4: return "nat"; default: return QString("?%1").arg(t); }
|
||||
switch (t) { case 0: return "local"; case 1: return "public"; case 2: return "nat_eim"; case 3: return "nat_dependent"; case 4: return "unknown"; case 5: return "contact_required"; default: return QString("?%1").arg(t); }
|
||||
}
|
||||
|
||||
QString AccountList::addrStr(const void* addr, int family) {
|
||||
|
||||
@@ -61,8 +61,8 @@ QVariant MemberListModel::data(const QModelIndex& index, int role) const {
|
||||
QString sub;
|
||||
if (it->rtt >= 0) sub += QString("rtt=%1ms").arg(it->rtt / 10);
|
||||
if (it->natType >= 0) {
|
||||
static const char* nat[] = {"NET","DIR","EIM","STR","NAT"};
|
||||
const char* nt = (it->natType <= 4) ? nat[it->natType] : "?";
|
||||
static const char* nat[] = {"NET","DIR","EIM","DEP","?","CONTACT"};
|
||||
const char* nt = (it->natType <= 5) ? nat[it->natType] : "?";
|
||||
if (!sub.isEmpty()) sub += " ";
|
||||
sub += nt;
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ QString NodesPage::protoStr(int protocol) {
|
||||
}
|
||||
|
||||
static QString addrTypeStr(int t) {
|
||||
switch (t) { case 0: return "NETIF"; case 1: return "DIRECT"; case 2: return "NAT_EIM"; case 3: return "NAT_STRICT"; case 4: return "NAT"; default: return QString("?%1").arg(t); }
|
||||
switch (t) { case 0: return "NETIF"; case 1: return "DIRECT"; case 2: return "NAT_EIM"; case 3: return "NAT_DEPENDENT"; case 4: return "UNKNOWN"; case 5: return "CONTACT_REQUIRED"; default: return QString("?%1").arg(t); }
|
||||
}
|
||||
|
||||
NodesPage::NodesPage(DbManager* db, QWidget* parent)
|
||||
|
||||
@@ -1589,18 +1589,6 @@ static const char* config_type_to_string(uint8_t config_type) {
|
||||
}
|
||||
}
|
||||
|
||||
static const char* nat_type_to_string(uint8_t nat_type) {
|
||||
switch (nat_type) {
|
||||
case NAT_TYPE_EIM: return "EIM";
|
||||
case NAT_TYPE_STRICT: return "Strict";
|
||||
case NAT_TYPE_DIRECT: return "Direct";
|
||||
case NAT_VERIFIED_EIM: return "Verified-EIM";
|
||||
case NAT_VERIFIED_STRICT: return "Verified-Strict";
|
||||
case NAT_VERIFIED_DIRECT: return "Verified-Direct";
|
||||
case NAT_TYPE_UNKNOWN: return "Unknown";
|
||||
default: return "?";
|
||||
}
|
||||
}
|
||||
|
||||
void etcpmon_gui_update_socket_list(struct etcpmon_app* app,
|
||||
struct etcpmon_socket_info* list,
|
||||
@@ -1614,25 +1602,11 @@ void etcpmon_gui_update_socket_list(struct etcpmon_app* app,
|
||||
if (list[i].name[0] == '\0') continue;
|
||||
|
||||
char display[256];
|
||||
const char* cfg_str = config_type_to_string(list[i].config_type);
|
||||
const char* nat_str = nat_type_to_string(list[i].nat_type);
|
||||
if (list[i].nat_ip[0] != '\0') {
|
||||
if (list[i].is_ipv6) {
|
||||
snprintf(display, sizeof(display), "[%s]:%d | Type: %s | NAT: %s (%s:%d)",
|
||||
list[i].ip, list[i].port, cfg_str, nat_str, list[i].nat_ip, list[i].nat_port);
|
||||
} else {
|
||||
snprintf(display, sizeof(display), "%s:%d | Type: %s | NAT: %s (%s:%d)",
|
||||
list[i].ip, list[i].port, cfg_str, nat_str, list[i].nat_ip, list[i].nat_port);
|
||||
}
|
||||
} else {
|
||||
if (list[i].is_ipv6) {
|
||||
snprintf(display, sizeof(display), "[%s]:%d | Type: %s | NAT: %s",
|
||||
list[i].ip, list[i].port, cfg_str, nat_str);
|
||||
} else {
|
||||
snprintf(display, sizeof(display), "%s:%d | Type: %s | NAT: %s",
|
||||
list[i].ip, list[i].port, cfg_str, nat_str);
|
||||
}
|
||||
}
|
||||
snprintf(display, sizeof(display), "%s%s%s:%u | %s policy=%s | mapping=%s inbound=%s | external=%s:%u",
|
||||
list[i].is_ipv6 ? "[" : "", list[i].ip, list[i].is_ipv6 ? "]" : "", list[i].port,
|
||||
list[i].is_tcp ? "TCP" : "UDP", config_type_to_string(list[i].config_type),
|
||||
address_mapping_name(list[i].mapping), address_inbound_name(list[i].inbound),
|
||||
list[i].nat_ip[0] ? list[i].nat_ip : "unknown", list[i].nat_port);
|
||||
SendMessageA(app->hListSockets, LB_ADDSTRING, 0, (LPARAM)display);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#define ETCPMON_PROTOCOL_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "../../src/routing_layer/address_profile.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -21,17 +22,7 @@ extern "C" {
|
||||
* Protocol Constants
|
||||
* ============================================================================ */
|
||||
|
||||
#define ETCPMON_PROTOCOL_VERSION 1
|
||||
|
||||
/* NAT types (mirrored from etcp_connections.h for monitor protocol) */
|
||||
#define NAT_TYPE_UNKNOWN 0
|
||||
#define NAT_TYPE_EIM 1 /* Endpoint-Independent Mapping */
|
||||
#define NAT_TYPE_STRICT 2 /* Address/Restricted or Symmetric */
|
||||
#define NAT_TYPE_DIRECT 3 /* Real public IP */
|
||||
#define NAT_VERIFIED_UNKNOWN 4
|
||||
#define NAT_VERIFIED_EIM 5 /* EIM NAT */
|
||||
#define NAT_VERIFIED_STRICT 6 /* strict NAT */
|
||||
#define NAT_VERIFIED_DIRECT 7
|
||||
#define ETCPMON_PROTOCOL_VERSION 2
|
||||
|
||||
/* Server config types (mirrored from config_parser.h) */
|
||||
#define CFG_SERVER_TYPE_UNKNOWN 0
|
||||
@@ -135,7 +126,9 @@ struct etcpmon_socket_info {
|
||||
uint16_t port; /* Port number (host byte order) */
|
||||
uint8_t is_ipv6; /* 1 = IPv6, 0 = IPv4 */
|
||||
uint8_t config_type; /* CFG_SERVER_TYPE_PUBLIC/NAT/PRIVATE */
|
||||
uint8_t nat_type; /* NAT_TYPE_* / NAT_VERIFIED_* */
|
||||
uint8_t mapping, inbound; /* ADDRESS_MAP_* / ADDRESS_IN_* */
|
||||
uint8_t is_tcp;
|
||||
uint64_t generation, evidence_id, checked_at;
|
||||
char nat_ip[46]; /* Null-terminated NAT IP address string */
|
||||
uint16_t nat_port; /* NAT port (host byte order) */
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user