diff --git a/app/providers/CallProvider/CallProvider.tsx b/app/providers/CallProvider/CallProvider.tsx index 57e3743..a8e4d4a 100644 --- a/app/providers/CallProvider/CallProvider.tsx +++ b/app/providers/CallProvider/CallProvider.tsx @@ -128,10 +128,29 @@ export function CallProvider(props : CallProviderProps) { info("Generated shared secret for call session: " + Buffer.from(computedSharedSecret).toString('hex')); setSharedSecret(Buffer.from(computedSharedSecret).toString('hex')); } + if(signalType == SignalType.OFFER){ + const offerJson = packet.getOffer(); + if(!offerJson || !peerConnectionRef.current){ + info("Received offer but peer connection is not ready"); + return; + } + + handleOffer(offerJson); + } + + if(signalType == SignalType.ANSWER){ + const answerJson = packet.getAnswer(); + if(!answerJson || !peerConnectionRef.current){ + info("Received answer but peer connection is not ready"); + return; + } + + handleAnswer(answerJson); + } if(signalType == SignalType.ACTIVE_CALL) { setCallState(CallState.ACTIVE); } - }, []); + }, [activeCall, sessionKeys]); const generateSessionKeys = () => { const sessionKeys = nacl.box.keyPair(); @@ -186,10 +205,10 @@ export function CallProvider(props : CallProviderProps) { * @returns */ const getKeyCast = () => { - if(!sessionKeys){ + if(!sharedSecret){ return ""; } - return Buffer.from(sessionKeys.secretKey).toString('hex'); + return sharedSecret; } const context = { diff --git a/app/providers/ProtocolProvider/protocol/packets/packet.signal.ts b/app/providers/ProtocolProvider/protocol/packets/packet.signal.ts index d0a0d89..9d27d21 100644 --- a/app/providers/ProtocolProvider/protocol/packets/packet.signal.ts +++ b/app/providers/ProtocolProvider/protocol/packets/packet.signal.ts @@ -5,7 +5,10 @@ export enum SignalType { CALL = 0, KEY_EXCHANGE = 1, ACTIVE_CALL = 2, - END_CALL = 3 + END_CALL = 3, + OFFER = 4, + ANSWER = 5, + ICE_CONFIG = 6 } export class PacketSignal extends Packet {