Fix handshake deadlock after decryption failure

Always accept handshake initiations even with valid sessions, as the peer must have cleared their session for a good reason (e.g., decryption failure). This prevents deadlock where one peer has no session while the other maintains an invalid one.
This commit is contained in:
jack
2025-07-23 18:22:39 +02:00
parent d1d4434b66
commit a84d6f22ef
5 changed files with 973 additions and 69 deletions
+9 -3
View File
@@ -859,9 +859,11 @@ class ChatViewModel: ObservableObject {
return primaryColor
} else if let peerID = message.senderPeerID ?? getPeerIDForNickname(message.sender),
let rssi = meshService.getPeerRSSI()[peerID] {
// Use actual RSSI value
return getRSSIColor(rssi: rssi.intValue, colorScheme: colorScheme)
} else {
return primaryColor.opacity(0.9)
// No RSSI data available - use a neutral color
return primaryColor.opacity(0.7)
}
}
@@ -960,9 +962,11 @@ class ChatViewModel: ObservableObject {
senderColor = primaryColor
} else if let peerID = message.senderPeerID ?? getPeerIDForNickname(message.sender),
let rssi = meshService.getPeerRSSI()[peerID] {
// Use actual RSSI value
senderColor = getRSSIColor(rssi: rssi.intValue, colorScheme: colorScheme)
} else {
senderColor = primaryColor.opacity(0.9)
// No RSSI data available - use a neutral color
senderColor = primaryColor.opacity(0.7)
}
senderStyle.foregroundColor = senderColor
@@ -1103,9 +1107,11 @@ class ChatViewModel: ObservableObject {
senderColor = primaryColor
} else if let peerID = message.senderPeerID ?? getPeerIDForNickname(message.sender),
let rssi = meshService.getPeerRSSI()[peerID] {
// Use actual RSSI value
senderColor = getRSSIColor(rssi: rssi.intValue, colorScheme: colorScheme)
} else {
senderColor = primaryColor.opacity(0.9)
// No RSSI data available - use a neutral color
senderColor = primaryColor.opacity(0.7)
}
senderStyle.foregroundColor = senderColor