diff --git a/README.md b/README.md index b1d7e52..319919a 100644 --- a/README.md +++ b/README.md @@ -55,22 +55,24 @@ function getIPs(callback){ //construct a new RTCPeerConnection var pc = new RTCPeerConnection(servers, mediaConstraints); + function handleCandidate(candidate){ + //match just the IP address + var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ + var ip_addr = ip_regex.exec(candidate)[1]; + + //remove duplicates + if(ip_dups[ip_addr] === undefined) + callback(ip_addr); + + ip_dups[ip_addr] = true; + } + //listen for candidate events pc.onicecandidate = function(ice){ //skip non-candidate events - if(ice.candidate){ - - //match just the IP address - var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ - var ip_addr = ip_regex.exec(ice.candidate.candidate)[1]; - - //remove duplicates - if(ip_dups[ip_addr] === undefined) - callback(ip_addr); - - ip_dups[ip_addr] = true; - } + if(ice.candidate) + handleCandidate(ice.candidate.candidate); }; //create a bogus data channel @@ -83,6 +85,18 @@ function getIPs(callback){ pc.setLocalDescription(result, function(){}, function(){}); }, function(){}); + + //wait for a while to let everything done + setTimeout(function() { + //read candidate info from local description + var lines = pc.localDescription.sdp.split('\n'); + + lines.forEach(function(line) { + if (line.startsWith('a=candidate:')) { + handleCandidate(line); + } + }); + }, 1000); } //Test: Print the IP addresses into the console diff --git a/index.html b/index.html index d5c563f..02a47c0 100644 --- a/index.html +++ b/index.html @@ -62,22 +62,24 @@ //construct a new RTCPeerConnection var pc = new RTCPeerConnection(servers, mediaConstraints); + function handleCandidate(candidate){ + //match just the IP address + var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ + var ip_addr = ip_regex.exec(candidate)[1]; + + //remove duplicates + if(ip_dups[ip_addr] === undefined) + callback(ip_addr); + + ip_dups[ip_addr] = true; + } + //listen for candidate events pc.onicecandidate = function(ice){ //skip non-candidate events - if(ice.candidate){ - - //match just the IP address - var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ - var ip_addr = ip_regex.exec(ice.candidate.candidate)[1]; - - //remove duplicates - if(ip_dups[ip_addr] === undefined) - callback(ip_addr); - - ip_dups[ip_addr] = true; - } + if(ice.candidate) + handleCandidate(ice.candidate.candidate); }; //create a bogus data channel @@ -90,6 +92,17 @@ pc.setLocalDescription(result, function(){}, function(){}); }, function(){}); + + //wait for a while to let everything done + setTimeout(function(){ + //read candidate info from local description + var lines = pc.localDescription.sdp.split('\n'); + + lines.forEach(function(line){ + if(line.startsWith('a=candidate:')) + handleCandidate(line); + }); + }, 1000); } //insert IP addresses into the page