Релиз 1.4.2: защита от звонков с другого устройства, лог FCM токена
All checks were successful
Android Kernel Build / build (push) Successful in 21m53s

- CREATE_ROOM без ключей шифрования — сброс (звонок принят на другом устройстве)
- dispose PeerConnection при завершении звонка (фикс зависания портов ~30с)
- Сохранение FCM токена в crash_reports для rosettadev1
This commit is contained in:
2026-04-01 18:28:15 +05:00
parent 7beb722c65
commit 803fda9abe
3 changed files with 19 additions and 2 deletions

View File

@@ -23,8 +23,8 @@ val gitShortSha = safeGitOutput("rev-parse", "--short", "HEAD") ?: "unknown"
// ═══════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════
// Rosetta versioning — bump here on each release // Rosetta versioning — bump here on each release
// ═══════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════
val rosettaVersionName = "1.4.1" val rosettaVersionName = "1.4.2"
val rosettaVersionCode = 43 // Increment on each release val rosettaVersionCode = 44 // Increment on each release
val customWebRtcAar = file("libs/libwebrtc-custom.aar") val customWebRtcAar = file("libs/libwebrtc-custom.aar")
android { android {

View File

@@ -373,6 +373,14 @@ object CallManager {
breadcrumb("SIG: CREATE_ROOM IGNORED — empty roomId!") breadcrumb("SIG: CREATE_ROOM IGNORED — empty roomId!")
return return
} }
// Если ключей нет — звонок был принят на другом устройстве,
// а сервер всё равно прислал CREATE_ROOM. Сбрасываем.
if (sharedKeyBytes == null && localPrivateKey == null) {
breadcrumb("SIG: CREATE_ROOM but no session keys — call accepted on another device, resetting")
CallSoundManager.stop()
resetSession(reason = null, notifyPeer = false)
return
}
roomId = incomingRoomId roomId = incomingRoomId
updateState { updateState {
it.copy( it.copy(

View File

@@ -748,6 +748,15 @@ object ProtocolManager {
send(subPacket) send(subPacket)
lastSubscribedToken = token lastSubscribedToken = token
addLog("🔔 Push token SUBSCRIBE sent") addLog("🔔 Push token SUBSCRIBE sent")
// Сохраняем FCM токен в crash_reports для просмотра через rosettadev1
try {
val dir = java.io.File(context.filesDir, "crash_reports")
if (!dir.exists()) dir.mkdirs()
val f = java.io.File(dir, "fcm_token.txt")
val ts = java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss", java.util.Locale.getDefault()).format(java.util.Date())
f.writeText("=== FCM TOKEN ===\n\nTimestamp: $ts\nDeviceId: $deviceId\n\nToken:\n$token\n")
} catch (_: Throwable) {}
} }
private fun requestSynchronize() { private fun requestSynchronize() {