]> git.r.bdr.sh - rbdr/junction/blobdiff - extension/peers.js
Add a contributing guide
[rbdr/junction] / extension / peers.js
index f9153fd94897e6c0c579307b1393c148c524341e..5ba5c487b20533ba1c0cbb3f76e5c1056c2fe793 100644 (file)
@@ -13,7 +13,13 @@ const internals = {
   },
 };
 
-export function addPeer({ peerId, mediaStream, onOffer, socket }) {
+export function addPeer({
+  peerId,
+  shouldCreateOffer,
+  mediaStream,
+  onOffer,
+  socket,
+}) {
   const peerConnection = new RTCPeerConnection(
     { iceServers: internals.kIceServers },
     { optional: [{ DtlsSrtpKeyAgreement: true }] },
@@ -42,11 +48,13 @@ export function addPeer({ peerId, mediaStream, onOffer, socket }) {
   };
 
   peerConnection.onnegotiationneeded = async () => {
-    console.debug("Creating RTC offer to ", peerId);
-    const offer = await peerConnection.createOffer();
-    await peerConnection.setLocalDescription(offer);
+    if (shouldCreateOffer) {
+      console.debug("Creating RTC offer to ", peerId);
+      const offer = await peerConnection.createOffer();
+      await peerConnection.setLocalDescription(offer);
 
-    onOffer({ peerId, offer });
+      onOffer({ peerId, offer });
+    }
   };
 
   console.info(`There are now ${countPeers()} participants`);
@@ -58,6 +66,7 @@ export function removePeer({ peerId }) {
 }
 
 export async function answerPeerOffer({ peerId, offer }) {
+  console.info(`Answering peer ${peerId}`);
   const peerConnection = internals.peers[peerId];
 
   const remoteDescription = new RTCSessionDescription(offer);
@@ -70,13 +79,16 @@ export async function answerPeerOffer({ peerId, offer }) {
 }
 
 export async function processPeerAnswer({ peerId, answer }) {
+  console.info(`Processing answer for peer ${peerId}`);
   const peerConnection = internals.peers[peerId];
   const remoteDescription = new RTCSessionDescription(answer);
   await peerConnection.setRemoteDescription(remoteDescription);
 }
 
 export async function addIceCandidate({ peerId, candidate }) {
+  console.info(`Adding ICE candidate for peer ${peerId}`);
   const peerConnection = internals.peers[peerId];
+  console.info(peerConnection.signalingState);
   const iceCandidate = new RTCIceCandidate(candidate);
   await peerConnection.addIceCandidate(iceCandidate);
 }
@@ -86,6 +98,9 @@ export function countPeers() {
 }
 
 export function resetPeers() {
+  for (const connection of Object.values(internals.peers)) {
+    connection.close();
+  }
   internals.peers = {};
   document
     .querySelectorAll(".junction-call-audio")