From dafb536f5866885d7b2a6b7632f5da8d8fdabb59 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Wed, 10 Nov 2021 10:42:38 +1100 Subject: [PATCH] disable negotiationevent on recipient side probably cause issues on network changes --- ts/session/utils/CallManager.ts | 47 ++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/ts/session/utils/CallManager.ts b/ts/session/utils/CallManager.ts index 683314471..9821af5c2 100644 --- a/ts/session/utils/CallManager.ts +++ b/ts/session/utils/CallManager.ts @@ -542,34 +542,43 @@ function onDataChannelOnOpen() { sendVideoStatusViaDataChannel(); } -function createOrGetPeerConnection(withPubkey: string, createDataChannel: boolean) { +function createOrGetPeerConnection( + withPubkey: string, + createDataChannel: boolean, + isAcceptingCall = false +) { if (peerConnection) { return peerConnection; } remoteStream = new MediaStream(); peerConnection = new RTCPeerConnection(configuration); + if (createDataChannel) { + dataChannel = peerConnection.createDataChannel('session-datachannel', { + negotiated: true, + id: 548, // SESSION dec ascii code 83*3+69+73+79+78 + }); - peerConnection.onnegotiationneeded = async (event: Event) => { - await handleNegotiationNeededEvent(event, withPubkey); - }; + dataChannel.onmessage = onDataChannelReceivedMessage; + dataChannel.onopen = onDataChannelOnOpen; + } - peerConnection.ondatachannel = e => { - if (!createDataChannel) { - dataChannel = e.channel; - window.log.info('Got our datachannel setup'); + if (!isAcceptingCall) { + peerConnection.onnegotiationneeded = async (event: Event) => { + await handleNegotiationNeededEvent(event, withPubkey); + }; + } - onDataChannelOnOpen(); + // peerConnection.ondatachannel = e => { + // if (!createDataChannel) { + // dataChannel = e.channel; + // window.log.info('Got our datachannel setup'); - dataChannel.onmessage = onDataChannelReceivedMessage; - } - }; + // onDataChannelOnOpen(); - if (createDataChannel) { - dataChannel = peerConnection.createDataChannel('session-datachannel'); + // dataChannel.onmessage = onDataChannelReceivedMessage; + // } + // }; - dataChannel.onmessage = onDataChannelReceivedMessage; - dataChannel.onopen = onDataChannelOnOpen; - } peerConnection.onsignalingstatechange = handleSignalingStateChangeEvent; peerConnection.ontrack = event => { @@ -621,11 +630,11 @@ export async function USER_acceptIncomingCallRequest(fromSender: string) { if (peerConnection) { throw new Error('USER_acceptIncomingCallRequest: peerConnection is already set.'); } + currentCallUUID = uuidv4(); - peerConnection = createOrGetPeerConnection(fromSender, false); + peerConnection = createOrGetPeerConnection(fromSender, true, true); await openMediaDevicesAndAddTracks(); - currentCallUUID = uuidv4(); const { sdps } = lastOfferMessage; if (!sdps || sdps.length === 0) {