compatibility/ice-connection.js

/**
 * @description Gets TCP and UDP ports based on the browser
 * @param {Object} params
 * @param {boolean} params.forceTURNSSL
 * @param {boolean} params.enableTURNServer
 * @param {enum} params.CONSTANTS
 * @memberOf module:Compatibility
 * @return {{tcp: Array, udp: Array, both: Array, iceServerProtocol: string}}
 */
const getConnectionPortsAndProtocolByBrowser = (params) => {
  const { forceTURNSSL, CONSTANTS, serverConfig } = params;
  const { AdapterJS } = window;
  const connectionConfig = {
    tcp: serverConfig.iceServerPorts.tcp,
    udp: serverConfig.iceServerPorts.udp,
    both: serverConfig.iceServerPorts.both,
    iceServerProtocol: serverConfig.iceServerProtocol,
    iceServerPorts: serverConfig.iceServerPorts,
  };

  if (AdapterJS.webrtcDetectedBrowser === 'edge') {
    connectionConfig.tcp = [];
    connectionConfig.udp = [3478];
    connectionConfig.iceServerPorts.both = [];
    connectionConfig.iceServerProtocol = CONSTANTS.TURN;
  } else if (forceTURNSSL) {
    if (AdapterJS.webrtcDetectedBrowser === 'firefox' && AdapterJS.webrtcDetectedVersion < 53) {
      connectionConfig.udp = [];
      connectionConfig.tcp = [443];
      connectionConfig.both = [];
      connectionConfig.iceServerProtocol = CONSTANTS.TURN;
    } else {
      connectionConfig.iceServerPorts.udp = [];
      connectionConfig.iceServerProtocol = 'turns';
    }
  } else if (AdapterJS.webrtcDetectedBrowser === 'firefox') {
    connectionConfig.udp = [3478];
    connectionConfig.tcp = [443, 80];
    connectionConfig.both = [];
  }

  return connectionConfig;
};

export default getConnectionPortsAndProtocolByBrowser;