fix(android): preserve measured profiles in member address details

This commit is contained in:
evgeny committed 2026-10-17 23:20:55 +02:00
1 parent 3f7cfe1c86
commit cb8e654639
3 files changed
+38 -20

No files matched your search

@@ -99,13 +99,22 @@ data class MemberDetail(val nodeId: Long, val name: String = "",
val inviterId: Long? = null, val inviterName: String = "")
data class MemberAddr(val family: Int = 0, val protocol: String = "", val address: String = "",
val port: Int = 0, val socketId: Int = 0, val addrType: Int = 0, val rtt: Int = 0) {
val roleLabelRes: Int get() = when (addrType) {
0 -> R.string.address_local; 1 -> R.string.address_public
2 -> R.string.address_nat_eim; 3 -> R.string.address_nat_dependent
4 -> R.string.address_nat_unknown; 6 -> R.string.address_nat_eim_unverified
5 -> R.string.address_contact; else -> R.string.address_unknown
}
val port: Int = 0, val socketId: Int = 0, val addrType: Int = 0, val rtt: Int = 0,
val natMapping: Int = 0, val natInbound: Int = 0, val natSource: Int = 0) {
val natLabelRes: Int get() = natProfileLabelRes(natMapping, natInbound, natSource)
}
// Происхождение адреса не определяет NAT: результат берём из измеренного профиля сокета.
private fun natProfileLabelRes(mapping: Int, inbound: Int, source: Int): Int = when {
source == 0 -> R.string.socket_nat_unmeasured
mapping == 1 && inbound == 1 -> R.string.socket_no_nat_open
mapping == 1 && inbound == 2 -> R.string.socket_no_nat_filtered
mapping == 1 -> R.string.socket_no_nat
mapping == 2 && inbound == 1 -> R.string.socket_eim_open
mapping == 2 && inbound == 2 -> R.string.socket_eim_filtered
mapping == 2 -> R.string.address_nat_eim_unverified
mapping == 3 -> R.string.address_nat_dependent
else -> R.string.address_nat_unknown
}
data class LinkStatus(val linkId: Int = 0, val localFamily: Int = 0, val localAddr: String = "", val localPort: Int = 0,
@@ -127,15 +136,7 @@ data class LocalSocketState(
val natMapping: Int = 0, val natInbound: Int = 0, val natSource: Int = 0,
val externalIp: String = "", val externalPort: Int = 0
) {
val natLabelRes: Int get() = when {
natSource == 0 -> R.string.socket_nat_unmeasured
natMapping == 1 -> R.string.socket_no_nat
natMapping == 2 && natInbound == 1 -> R.string.socket_eim_open
natMapping == 2 && natInbound == 2 -> R.string.socket_eim_filtered
natMapping == 2 -> R.string.address_nat_eim_unverified
natMapping == 3 -> R.string.address_nat_dependent
else -> R.string.address_nat_unknown
}
val natLabelRes: Int get() = natProfileLabelRes(natMapping, natInbound, natSource)
val stateLabel: String get() = AppLanguage.text(when (state) {
2 -> R.string.connection_up; 1 -> R.string.connection_connecting; else -> R.string.connection_down
})
@@ -488,7 +489,10 @@ class ChatRepository {
port = a.optInt("po", 0),
socketId = a.optInt("si", 0),
addrType = a.optInt("at", 0),
rtt = a.optInt("rt", 0)
rtt = a.optInt("rt", 0),
natMapping = a.getInt("nmapping"),
natInbound = a.getInt("ninbound"),
natSource = a.getInt("nsource")
))
}
}