|
|
|
|
@ -161,16 +161,18 @@ fun parseConnList(data: ByteArray): List<ConnInfo> {
|
|
|
|
|
return list |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* ── Member wire format (79 bytes, from chat_member.h) ── */ |
|
|
|
|
/* Размер общего снимка из chat_member.h; одинаковый для desktop и Android. */ |
|
|
|
|
const val MEMBER_WIRE_SIZE = 157 |
|
|
|
|
data class MemberWire( |
|
|
|
|
val nodeId: Long, val online: Int, val isSelf: Boolean, |
|
|
|
|
val flags: Int, val rtt: Int, val natType: Int, |
|
|
|
|
val storage: Boolean, val name: String |
|
|
|
|
val storage: Boolean, val name: String, |
|
|
|
|
val avatarServer: Long = 0, val avatarFile: String = "", val storageRole: Boolean = false |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
fun parseMemberWire(data: ByteArray, offset: Int = 0): MemberWire? { |
|
|
|
|
if (offset < 0 || offset > data.size - 79) return null |
|
|
|
|
val buf = ByteBuffer.wrap(data, offset, 79).order(ByteOrder.LITTLE_ENDIAN) |
|
|
|
|
if (offset < 0 || offset > data.size - MEMBER_WIRE_SIZE) return null |
|
|
|
|
val buf = ByteBuffer.wrap(data, offset, MEMBER_WIRE_SIZE).order(ByteOrder.LITTLE_ENDIAN) |
|
|
|
|
val nodeId = buf.getLong() |
|
|
|
|
val online = buf.get().toInt() and 0xFF |
|
|
|
|
val isSelf = buf.get().toInt() != 0 |
|
|
|
|
@ -180,7 +182,11 @@ fun parseMemberWire(data: ByteArray, offset: Int = 0): MemberWire? {
|
|
|
|
|
val storage = buf.get().toInt() != 0 |
|
|
|
|
val nameBytes = ByteArray(64); buf.get(nameBytes) |
|
|
|
|
val name = String(nameBytes).trimEnd('\u0000') |
|
|
|
|
return MemberWire(nodeId, online, isSelf, flags, rtt, natType, storage, name) |
|
|
|
|
val avatarServer = buf.getLong() |
|
|
|
|
val avatarBytes = ByteArray(69); buf.get(avatarBytes) |
|
|
|
|
val avatarFile = String(avatarBytes).trimEnd('\u0000') |
|
|
|
|
val storageRole = buf.get().toInt() != 0 |
|
|
|
|
return MemberWire(nodeId, online, isSelf, flags, rtt, natType, storage, name, avatarServer, avatarFile, storageRole) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Wire не содержит verified/nodeType и состояния транспортов: сохраняем их из текущей строки. */ |
|
|
|
|
|