'use strict'; // Construct an RTCIceTransport instance. The instance will automatically be // cleaned up when the test finishes. function makeIceTransport(t) { const iceTransport = new RTCIceTransport(); t.add_cleanup(() => iceTransport.stop()); return iceTransport; } // Construct two RTCIceTransport instances, configure them to exchange // candidates, then gather() them. // Returns a 2-list: [ RTCIceTransport, RTCIceTransport ] function makeAndGatherTwoIceTransports(t) { const localTransport = makeIceTransport(t); const remoteTransport = makeIceTransport(t); localTransport.onicecandidate = e => { if (e.candidate) { remoteTransport.addRemoteCandidate(e.candidate); } }; remoteTransport.onicecandidate = e => { if (e.candidate) { localTransport.addRemoteCandidate(e.candidate); } }; localTransport.gather({}); remoteTransport.gather({}); return [ localTransport, remoteTransport ]; } // Construct two RTCIceTransport instances, configure them to exchange // candidates and parameters, then gather() and start() them. // Returns a 2-list: // [ controlling RTCIceTransport, // controlled RTCIceTransport ] function makeGatherAndStartTwoIceTransports(t) { const [ localTransport, remoteTransport ] = makeAndGatherTwoIceTransports(t); localTransport.start(remoteTransport.getLocalParameters(), 'controlling'); remoteTransport.start(localTransport.getLocalParameters(), 'controlled'); return [ localTransport, remoteTransport ]; }