Релиз 1.4.4: обновление протокола WebRTC, фиксы звонков
All checks were successful
Android Kernel Build / build (push) Successful in 19m16s
All checks were successful
Android Kernel Build / build (push) Successful in 19m16s
- PacketWebRTC: добавлены publicKey и deviceId (новый серверный протокол) - Фикс ForegroundServiceDidNotStartInTimeException (safeStopForeground) - Фикс бесконечного "Exchanging keys" (ретрай KEY_EXCHANGE, auto-bind) - Фикс "Unknown" при сбросе звонка - Decline работает во всех фазах - Кастомный WebRTC AAR в git для CI
This commit is contained in:
@@ -18,15 +18,15 @@ object ReleaseNotes {
|
||||
Update v$VERSION_PLACEHOLDER
|
||||
|
||||
Звонки
|
||||
- Полноэкранный входящий звонок с Accept/Decline даже когда приложение свёрнуто или убито
|
||||
- Исправлен сброс PeerConnection — больше нет зависания ~30 сек между звонками
|
||||
- Защита от фантомных звонков при принятии на другом устройстве
|
||||
- Обновлён протокол WebRTC: publicKey и deviceId в каждом пакете
|
||||
- Полноэкранный входящий звонок на экране блокировки
|
||||
- Фикс бесконечного "Exchanging keys" при принятии звонка
|
||||
- Фикс краша ForegroundService при исходящем звонке
|
||||
- Кастомный WebRTC с E2EE теперь работает в CI-сборках
|
||||
|
||||
E2EE
|
||||
- Улучшена диагностика шифрования звонков
|
||||
|
||||
Push-уведомления
|
||||
- Поддержка tokenType и deviceId для новых серверов
|
||||
Уведомления
|
||||
- Аватарки и имена в уведомлениях
|
||||
- Настройка отключения аватарок в уведомлениях
|
||||
""".trimIndent()
|
||||
|
||||
fun getNotice(version: String): String =
|
||||
|
||||
@@ -19,12 +19,16 @@ enum class WebRTCSignalType(val value: Int) {
|
||||
class PacketWebRTC : Packet() {
|
||||
var signalType: WebRTCSignalType = WebRTCSignalType.OFFER
|
||||
var sdpOrCandidate: String = ""
|
||||
var publicKey: String = ""
|
||||
var deviceId: String = ""
|
||||
|
||||
override fun getPacketId(): Int = 0x1B
|
||||
|
||||
override fun receive(stream: Stream) {
|
||||
signalType = WebRTCSignalType.fromValue(stream.readInt8())
|
||||
sdpOrCandidate = stream.readString()
|
||||
publicKey = stream.readString()
|
||||
deviceId = stream.readString()
|
||||
}
|
||||
|
||||
override fun send(): Stream {
|
||||
@@ -32,6 +36,8 @@ class PacketWebRTC : Packet() {
|
||||
stream.writeInt16(getPacketId())
|
||||
stream.writeInt8(signalType.value)
|
||||
stream.writeString(sdpOrCandidate)
|
||||
stream.writeString(publicKey)
|
||||
stream.writeString(deviceId)
|
||||
return stream
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1343,10 +1343,14 @@ object ProtocolManager {
|
||||
* Send WebRTC signaling packet (0x1B).
|
||||
*/
|
||||
fun sendWebRtcSignal(signalType: WebRTCSignalType, sdpOrCandidate: String) {
|
||||
val pk = try { getProtocol().getPublicKey().orEmpty() } catch (_: Exception) { "" }
|
||||
val did = appContext?.let { getOrCreateDeviceId(it) } ?: ""
|
||||
send(
|
||||
PacketWebRTC().apply {
|
||||
this.signalType = signalType
|
||||
this.sdpOrCandidate = sdpOrCandidate
|
||||
this.publicKey = pk
|
||||
this.deviceId = did
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user