From 30f2c900158edf78ef08bf3a648c8ddaf633f351 Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Sat, 4 Apr 2026 18:07:24 +0200 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=82=D1=80=D0=B8=D1=87=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BE=D0=B1=D0=BC=D0=B5=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/providers/CallProvider/CallProvider.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/providers/CallProvider/CallProvider.tsx b/app/providers/CallProvider/CallProvider.tsx index 75dc5ce..abea674 100644 --- a/app/providers/CallProvider/CallProvider.tsx +++ b/app/providers/CallProvider/CallProvider.tsx @@ -294,14 +294,17 @@ export function CallProvider(props : CallProviderProps) { /** * Другая сторона отправила нам ключи, теперь отправляем ей свои для генерации общего секрета */ - const keys = generateSessionKeys(); const sharedPublic = packet.getSharedPublic(); if(!sharedPublic){ info("Received key exchange signal without shared public key"); return; } + if(!sessionKeys){ + info("Received key exchange signal but session keys are not generated"); + return; + } - const computedSharedSecret = nacl.box.before(Buffer.from(sharedPublic, 'hex'), keys.secretKey); + const computedSharedSecret = nacl.box.before(Buffer.from(sharedPublic, 'hex'), sessionKeys.secretKey); sharedSecretRef.current = Buffer.from(computedSharedSecret).toString('hex'); info("Generated shared secret for call session: " + sharedSecretRef.current); setCallState(CallState.WEB_RTC_EXCHANGE); @@ -316,7 +319,7 @@ export function CallProvider(props : CallProviderProps) { signalPacket.setSrc(publicKey); signalPacket.setDst(activeCall); signalPacket.setSignalType(SignalType.KEY_EXCHANGE); - signalPacket.setSharedPublic(Buffer.from(keys.publicKey).toString('hex')); + signalPacket.setSharedPublic(Buffer.from(sessionKeys.publicKey).toString('hex')); send(signalPacket); } if(signalType == SignalType.ACCEPT){ @@ -556,7 +559,11 @@ export function CallProvider(props : CallProviderProps) { stopLoopSound(); stopSound(); /** - * Звонок принят, можно обмениваться ключами + * Звонок принят, генерируем свой ключ для будующего обмена + */ + generateSessionKeys(); + /** + * Отправляем сигнал что звонок принят другой стороне, чтобы она могла начать обмен ключами и установку соединения */ const signalPacket = new PacketSignalPeer(); signalPacket.setSrc(publicKey); @@ -565,6 +572,9 @@ export function CallProvider(props : CallProviderProps) { signalPacket.setJoinToken(callTokenRef.current); signalPacket.setSignalType(SignalType.ACCEPT); send(signalPacket); + /** + * Устанавливаем состояние звонка и стадию обмена ключами + */ setCallState(CallState.KEY_EXCHANGE); roleRef.current = CallRole.CALLEE; }