Browse Source

chatgui-android: отображение REALITY-линков (TCP+REALITY) в статусе узлов и сокетов

v2
evgeny 2 weeks ago
parent
commit
761f64cf76
  1. 7
      tools/chatgui-android/app/src/main/java/com/utun/chat/data/ChatRepository.kt
  2. 14
      tools/chatgui-android/jni_bridge/android_jni_bridge.c

7
tools/chatgui-android/app/src/main/java/com/utun/chat/data/ChatRepository.kt

@ -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
}

14
tools/chatgui-android/jni_bridge/android_jni_bridge.c

@ -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;
}
}

Loading…
Cancel
Save