unify TCP_SOCKET into ETCP_SOCKET with is_tcp flag; add local+remote addr to member detail links with arrow display
This commit is contained in:
1 parent
477b4dfc98
commit
544c77efff
19 files changed
+197
-228
No files matched your search
@@ -86,7 +86,7 @@ static int collect_my_addrs(uint8_t* buf, int max_buf_sz) {
|
||||
s = s->next;
|
||||
}
|
||||
|
||||
{ struct TCP_SOCKET* ts = g_cc.inst->tcp_sockets;
|
||||
{ struct ETCP_SOCKET* ts = g_cc.inst->tcp_sockets;
|
||||
while (ts) {
|
||||
struct sockaddr_storage* addr = ts->interface_addr.ss_family ? &ts->interface_addr : &ts->local_addr;
|
||||
if (addr && addr->ss_family == AF_INET) {
|
||||
|
||||
@@ -352,7 +352,7 @@ static void hc_handle_invite(struct headless_client* cli, int id, const char* js
|
||||
}
|
||||
s = s->next;
|
||||
}
|
||||
struct TCP_SOCKET* ts = g_hc.inst->tcp_sockets;
|
||||
struct ETCP_SOCKET* ts = g_hc.inst->tcp_sockets;
|
||||
while (ts && inv.addrCount < INVITE_ADDR_MAX) {
|
||||
if (ts->interface_addr.ss_family == AF_INET) {
|
||||
struct sockaddr_in* sin = (struct sockaddr_in*)&ts->interface_addr;
|
||||
|
||||
@@ -161,7 +161,7 @@ void chat_core_sync_my_addresses(void) {
|
||||
"INSERT OR REPLACE INTO node_addresses(node_id,family,protocol,address,port,addr_type,socket_id)"
|
||||
" VALUES(?,?,2,?,?,?,?)", -1, &tcp_ins, NULL);
|
||||
if (tcp_ins) {
|
||||
struct TCP_SOCKET* ts = g_cc.inst->tcp_sockets;
|
||||
struct ETCP_SOCKET* ts = g_cc.inst->tcp_sockets;
|
||||
int tcp_count = 0;
|
||||
while (ts) { if (ts->type == CFG_SERVER_TYPE_PRIVATE || ts->type == CFG_SERVER_TYPE_LOCAL) { ts = ts->next; continue; }
|
||||
tcp_count++;
|
||||
|
||||
+28
-17
@@ -301,15 +301,17 @@ void chat_core_collect_conn_metrics_trampoline(void* arg) {
|
||||
}
|
||||
|
||||
/* ── Live-снапшот для панели деталей участника ──
|
||||
* packet: [node_id:8][flags:1][own_tcp_active:2][link_count:1](link:25B)*[sock_count:1](sock:48B)*
|
||||
* packet: [node_id:8][flags:1][own_tcp_active:2][link_count:1](link:43B)*[sock_count:1](sock:48B)*
|
||||
* flags: bit0=conn_present bit1=conn_up(links_up) bit2=conn_initialized
|
||||
* link: [is_tcp:1][link_state:1][link_status:1][tcp_ready:1][is_server:1][family:1][addr_len:1][addr:16][port:2]
|
||||
* link: [is_tcp:1][link_state:1][link_status:1][tcp_ready:1][is_server:1]
|
||||
* [local_family:1][local_addr:16][local_port:2]
|
||||
* [remote_family:1][remote_addr:16][remote_port:2]
|
||||
* sock: [sock_id:4][port:2][link_count:4][ifname:38]
|
||||
* Собирается в worker-потоке — читает живые структуры UTUN_INSTANCE безопасно. */
|
||||
|
||||
#define MEMBER_DETAIL_MAX_LINKS 16
|
||||
#define MEMBER_DETAIL_MAX_SOCKS 16
|
||||
#define MEMBER_DETAIL_LINK_SIZE 25
|
||||
#define MEMBER_DETAIL_LINK_SIZE 43
|
||||
#define MEMBER_DETAIL_SOCK_SIZE 48
|
||||
|
||||
/* Повторяет Qt: name.lastIndexOf("_v") → name.mid(3, idx - 3) */
|
||||
@@ -365,7 +367,7 @@ static void collect_member_detail(uint64_t node_id) {
|
||||
uint8_t sock_count = 0;
|
||||
for (struct ETCP_SOCKET* s = inst->etcp_sockets; s && sock_count < MEMBER_DETAIL_MAX_SOCKS; s = s->next)
|
||||
sock_count++;
|
||||
for (struct TCP_SOCKET* ts = inst->tcp_sockets; ts && sock_count < MEMBER_DETAIL_MAX_SOCKS; ts = ts->next)
|
||||
for (struct ETCP_SOCKET* ts = inst->tcp_sockets; ts && sock_count < MEMBER_DETAIL_MAX_SOCKS; ts = ts->next)
|
||||
sock_count++;
|
||||
|
||||
size_t buf_sz = 12 + (size_t)link_count * MEMBER_DETAIL_LINK_SIZE
|
||||
@@ -385,19 +387,28 @@ static void collect_member_detail(uint64_t node_id) {
|
||||
*p++ = lk->link_status;
|
||||
*p++ = (lk->is_tcp && lk->tcp_link && stcp_link_is_ready(lk->tcp_link)) ? 1 : 0;
|
||||
*p++ = lk->is_server;
|
||||
uint8_t family = 0, addr_len = 0; uint8_t addr[16] = {0}; uint16_t port = 0;
|
||||
const struct sockaddr_storage* sa = &lk->remote_addr;
|
||||
if (sa->ss_family == AF_INET) {
|
||||
struct sockaddr_in* sin = (struct sockaddr_in*)sa;
|
||||
family = 4; addr_len = 4; memcpy(addr, &sin->sin_addr, 4); port = ntohs(sin->sin_port);
|
||||
} else if (sa->ss_family == AF_INET6) {
|
||||
struct sockaddr_in6* sin6 = (struct sockaddr_in6*)sa;
|
||||
family = 6; addr_len = 16; memcpy(addr, &sin6->sin6_addr, 16); port = ntohs(sin6->sin6_port);
|
||||
|
||||
{ uint8_t lf = 0; uint8_t la[16] = {0}; uint16_t lp = 0;
|
||||
if (lk->conn) {
|
||||
const struct sockaddr_storage* lsa = &lk->conn->local_addr;
|
||||
if (lsa->ss_family == AF_INET) {
|
||||
lf = 4; memcpy(la, &((const struct sockaddr_in*)lsa)->sin_addr, 4); lp = ntohs(((const struct sockaddr_in*)lsa)->sin_port);
|
||||
} else if (lsa->ss_family == AF_INET6) {
|
||||
lf = 6; memcpy(la, &((const struct sockaddr_in6*)lsa)->sin6_addr, 16); lp = ntohs(((const struct sockaddr_in6*)lsa)->sin6_port);
|
||||
}
|
||||
}
|
||||
*p++ = lf; memcpy(p, la, 16); p += 16; memcpy(p, &lp, 2); p += 2;
|
||||
}
|
||||
|
||||
{ uint8_t rf = 0; uint8_t ra[16] = {0}; uint16_t rp = 0;
|
||||
const struct sockaddr_storage* sa = &lk->remote_addr;
|
||||
if (sa->ss_family == AF_INET) {
|
||||
rf = 4; memcpy(ra, &((const struct sockaddr_in*)sa)->sin_addr, 4); rp = ntohs(((const struct sockaddr_in*)sa)->sin_port);
|
||||
} else if (sa->ss_family == AF_INET6) {
|
||||
rf = 6; memcpy(ra, &((const struct sockaddr_in6*)sa)->sin6_addr, 16); rp = ntohs(((const struct sockaddr_in6*)sa)->sin6_port);
|
||||
}
|
||||
*p++ = rf; memcpy(p, ra, 16); p += 16; memcpy(p, &rp, 2); p += 2;
|
||||
}
|
||||
*p++ = family;
|
||||
*p++ = addr_len;
|
||||
memcpy(p, addr, 16); p += 16;
|
||||
memcpy(p, &port, 2); p += 2;
|
||||
}
|
||||
|
||||
*p++ = sock_count;
|
||||
@@ -414,7 +425,7 @@ static void collect_member_detail(uint64_t node_id) {
|
||||
memcpy(p, &lc, 4); p += 4;
|
||||
memcpy(p, ifname, 38); p += 38;
|
||||
}
|
||||
for (struct TCP_SOCKET* ts = inst->tcp_sockets; ts && sock_count; ts = ts->next, sock_count--) {
|
||||
for (struct ETCP_SOCKET* ts = inst->tcp_sockets; ts && sock_count; ts = ts->next, sock_count--) {
|
||||
uint32_t sid = ts->sock_id;
|
||||
uint16_t sp = 0;
|
||||
const struct sockaddr_storage* sa = ts->interface_addr.ss_family ? &ts->interface_addr : &ts->local_addr;
|
||||
|
||||
Reference in new issue
Block a user