Skip to content

Instantly share code, notes, and snippets.

@j4gd33p
Created January 25, 2023 10:51
Show Gist options
  • Select an option

  • Save j4gd33p/406ba94680c316f59f3d85dced61ca14 to your computer and use it in GitHub Desktop.

Select an option

Save j4gd33p/406ba94680c316f59f3d85dced61ca14 to your computer and use it in GitHub Desktop.
Check If TURN server is active
<script>
function checkTURNServer(turnConfig, timeout){
return new Promise(function(resolve, reject){
setTimeout(function(){
if(promiseResolved) return;
resolve(false);
promiseResolved = true;
}, timeout || 5000);
var promiseResolved = false
, myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection //compatibility for firefox and chrome
, pc = new myPeerConnection({iceServers:[turnConfig]})
, noop = function(){};
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(function(sdp){
if(sdp.sdp.indexOf('typ relay') > -1){ // sometimes sdp contains the ice candidates...
promiseResolved = true;
resolve(true);
}
pc.setLocalDescription(sdp, noop, noop);
}, noop); // create offer and set local description
pc.onicecandidate = function(ice){ //listen for candidate events
if(promiseResolved || !ice || !ice.candidate || !ice.candidate.candidate || !(ice.candidate.candidate.indexOf('typ relay')>-1)) return;
promiseResolved = true;
resolve(true);
};
});
}
checkTURNServer({
url: 'turn:yourServerAddress:PortIfAny',
username: 'yourUsername',
credential: 'yourPassword'
}).then(function(bool){
console.log('is my TURN server active? ', bool? 'yes':'no');
}).catch(console.error.bind(console));
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment