diff --git a/app/providers/CallProvider/CallProvider.tsx b/app/providers/CallProvider/CallProvider.tsx index 860a343..75dc5ce 100644 --- a/app/providers/CallProvider/CallProvider.tsx +++ b/app/providers/CallProvider/CallProvider.tsx @@ -299,19 +299,25 @@ export function CallProvider(props : CallProviderProps) { if(!sharedPublic){ info("Received key exchange signal without shared public key"); return; - } - - const signalPacket = new PacketSignalPeer(); - signalPacket.setSrc(publicKey); - signalPacket.setDst(activeCall); - signalPacket.setSignalType(SignalType.KEY_EXCHANGE); - signalPacket.setSharedPublic(Buffer.from(keys.publicKey).toString('hex')); - send(signalPacket); + } const computedSharedSecret = nacl.box.before(Buffer.from(sharedPublic, 'hex'), keys.secretKey); sharedSecretRef.current = Buffer.from(computedSharedSecret).toString('hex'); info("Generated shared secret for call session: " + sharedSecretRef.current); setCallState(CallState.WEB_RTC_EXCHANGE); + + if(roleRef.current == CallRole.CALLER){ + /** + * Вызывающий уже отправил ключ + */ + return; + } + const signalPacket = new PacketSignalPeer(); + signalPacket.setSrc(publicKey); + signalPacket.setDst(activeCall); + signalPacket.setSignalType(SignalType.KEY_EXCHANGE); + signalPacket.setSharedPublic(Buffer.from(keys.publicKey).toString('hex')); + send(signalPacket); } if(signalType == SignalType.ACCEPT){ /**