chatgui-android: отображение REALITY-линков (TCP+REALITY) в статусе узлов и сокетов
This commit is contained in:
1 parent
27b591daee
commit
761f64cf76
2 files changed
+12
-9
No files matched your search
@@ -179,8 +179,8 @@ fun MemberWire.toChatMember(): ChatMember = ChatMember(
|
||||
fun cleanSocketName(raw: String): String =
|
||||
raw.removePrefix("as_").replace(Regex("_v[46]_(tcp|udp)$"), " $1")
|
||||
|
||||
/* ── MEMBER_DETAIL (event 22) link format: 63 bytes per link ── */
|
||||
private const val MEMBER_DETAIL_LINK_SIZE = 63
|
||||
/* ── MEMBER_DETAIL (event 22) link format: 64 bytes per link ── */
|
||||
private const val MEMBER_DETAIL_LINK_SIZE = 64
|
||||
|
||||
private fun addrFromBytes(family: Int, bytes: ByteArray): String {
|
||||
if (family == 4 && bytes.size >= 4)
|
||||
@@ -214,13 +214,14 @@ fun parseMemberDetail(data: ByteArray): MemberLinks? {
|
||||
val rp = lbuf.getShort().toInt() and 0xFFFF
|
||||
val snBytes = ByteArray(20); lbuf.get(snBytes)
|
||||
val sn = String(snBytes).trimEnd('\u0000').trimEnd()
|
||||
val isReality = lbuf.get().toInt() != 0
|
||||
val effState = if (isTcp != 0 && tcpReady != 0) 3 else state
|
||||
val effStatus = if (isTcp != 0 && tcpReady != 0) 1 else status
|
||||
links.add(LinkStatus(
|
||||
localFamily = lf, localAddr = addrFromBytes(lf, la), localPort = lp,
|
||||
remoteFamily = rf, remoteAddr = addrFromBytes(rf, ra), remotePort = rp,
|
||||
linkState = effState, linkStatus = effStatus, isServer = isServer != 0,
|
||||
socketName = sn, protocol = if (isTcp != 0) "TCP" else "UDP"
|
||||
socketName = sn, protocol = if (isReality) "TCP+REALITY" else if (isTcp != 0) "TCP" else "UDP"
|
||||
))
|
||||
offset += MEMBER_DETAIL_LINK_SIZE
|
||||
}
|
||||
|
||||
@@ -759,7 +759,8 @@ char* utun_bridge_get_member_detail_json(const char* channel_id, uint64_t node_i
|
||||
}
|
||||
}
|
||||
const char* pn;
|
||||
switch (proto) { case 1: pn = "UDP"; break; case 2: pn = "TCP"; break; default: pn = "UDP/TCP"; break; }
|
||||
if (proto & 0x04) pn = "TCP+REALITY";
|
||||
else switch (proto) { case 1: pn = "UDP"; break; case 2: pn = "TCP"; break; default: pn = "UDP/TCP"; break; }
|
||||
pos += (size_t)snprintf(buf + pos, sizeof(buf) - pos,
|
||||
"%s{\"fm\":%d,\"pt\":\"%s\",\"ad\":\"%s\",\"po\":%d,\"si\":%d,\"at\":%d,\"rt\":%d}",
|
||||
af ? "" : ",", family, pn, addr_str[0] ? addr_str : "?", port, sid, at, rtt);
|
||||
@@ -897,7 +898,7 @@ char* utun_bridge_get_member_links_json(uint64_t node_id) {
|
||||
const char* sn = lk->conn ? lk->conn->name : "";
|
||||
pos += snprintf(buf + pos, sizeof(buf) - (size_t)pos,
|
||||
"%s{\"id\":%d,\"pt\":\"%s\",\"lf\":%d,\"la\":\"%s\",\"lp\":%d,\"rf\":%d,\"ra\":\"%s\",\"rp\":%d,\"st\":%d,\"ls\":%d,\"is\":%d,\"sn\":\"%s\"}",
|
||||
sep, lk->local_link_id, lk->is_tcp ? "TCP" : "UDP", lf, la, (int)lp, rf, ra, (int)rp, st, ls, lk->is_server, sn);
|
||||
sep, lk->local_link_id, lk->reality_set ? "TCP+REALITY" : (lk->is_tcp ? "TCP" : "UDP"), lf, la, (int)lp, rf, ra, (int)rp, st, ls, lk->is_server, sn);
|
||||
}
|
||||
if (pos < (int)sizeof(buf))
|
||||
pos += snprintf(buf + pos, sizeof(buf) - (size_t)pos, "]}");
|
||||
@@ -998,14 +999,15 @@ char* utun_bridge_get_local_sockets_json(void) {
|
||||
int lu, ld; SOCK_COUNT_LINKS(s, lu, ld);
|
||||
int state = 2; /* bound and listening */
|
||||
const char* sep = first ? "" : ","; first = 0;
|
||||
const char* pn = s->reality_enabled ? "TCP+REALITY" : "TCP";
|
||||
size_t needed = snprintf(NULL, 0,
|
||||
"%s{\"si\":%u,\"nm\":\"%s\",\"ad\":\"%s\",\"po\":%d,\"pt\":\"TCP\",\"st\":%d,\"lu\":%d,\"ld\":%d}",
|
||||
sep, s->sock_id, s->name, ip_str, port, state, lu, ld);
|
||||
"%s{\"si\":%u,\"nm\":\"%s\",\"ad\":\"%s\",\"po\":%d,\"pt\":\"%s\",\"st\":%d,\"lu\":%d,\"ld\":%d}",
|
||||
sep, s->sock_id, s->name, ip_str, port, pn, state, lu, ld);
|
||||
while (pos + needed + 2 > cap) { char* tmp = u_realloc(json, cap * 2); if (!tmp) break; json = tmp; cap *= 2; }
|
||||
if (pos + needed + 2 <= cap)
|
||||
pos += (size_t)snprintf(json + pos, cap - pos,
|
||||
"%s{\"si\":%u,\"nm\":\"%s\",\"ad\":\"%s\",\"po\":%d,\"pt\":\"TCP\",\"st\":%d,\"lu\":%d,\"ld\":%d}",
|
||||
sep, s->sock_id, s->name, ip_str, port, state, lu, ld);
|
||||
"%s{\"si\":%u,\"nm\":\"%s\",\"ad\":\"%s\",\"po\":%d,\"pt\":\"%s\",\"st\":%d,\"lu\":%d,\"ld\":%d}",
|
||||
sep, s->sock_id, s->name, ip_str, port, pn, state, lu, ld);
|
||||
s = s->next;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user