/*! \file main.js * \brief File transfer with WebRTC. Signaling is done through sound * \author Georgi Gerganov */ var kOfferNumCandidates = 5; var kOfferName = '-'; var kOfferUsername = '-'; var kOfferSessionId = '1337'; var kOfferSessionVersion = '0'; var kOfferLocalhost = '0.0.0.0'; var kOfferBundle = 'sdparta_0'; var kOfferPort = '5400'; var kOfferCandidateFoundation = '0'; var kOfferCandidateComponent = '1'; var kOfferCandidatePriority = '2122252543'; var kOfferUfrag = 'bc105aa9'; var kOfferPwd = '52f0a329e7fd93662f50828f617b408d'; var kOfferFingerprint = '00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00'; var kAnswerNumCandidates = 5; var kAnswerName = '-'; var kAnswerUsername = '-'; var kAnswerSessionId = '1338'; var kAnswerSessionVersion = '0'; var kAnswerLocalhost = '0.0.0.0'; var kAnswerBundle = 'sdparta_0'; var kAnswerPort = '5400'; var kAnswerCandidateFoundation = '0'; var kAnswerCandidateComponent = '1'; var kAnswerCandidatePriority = '2122252543'; var kAnswerUfrag = 'c417de3e'; var kAnswerPwd = '1aa0e1241c16687064c4fd31b8fc367a'; var kAnswerFingerprint = '00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00'; function getOfferTemplate() { return "v=0\r\n" + "o="+kOfferUsername+" "+kOfferSessionId+" "+kOfferSessionVersion+" IN IP4 "+kOfferLocalhost+"\r\n" + "s="+kOfferName+"\r\n" + "t=0 0\r\n" + "a=sendrecv\r\n" + "a=fingerprint:sha-256 "+kOfferFingerprint+"\r\n" + "a=group:BUNDLE "+kOfferBundle+"\r\n" + "a=ice-options:trickle\r\n" + "a=msid-semantic:WMS *\r\n" + "m=application "+kOfferPort+" DTLS/SCTP 5000\r\n" + "c=IN IP4 "+kOfferLocalhost+"\r\n" + "a=candidate:0 "+kOfferCandidateComponent+" UDP "+kOfferCandidatePriority+" "+kOfferLocalhost+" "+kOfferPort+" typ host\r\n" + "a=candidate:1 "+kOfferCandidateComponent+" UDP "+kOfferCandidatePriority+" "+kOfferLocalhost+" "+kOfferPort+" typ host\r\n" + "a=candidate:2 "+kOfferCandidateComponent+" UDP "+kOfferCandidatePriority+" "+kOfferLocalhost+" "+kOfferPort+" typ host\r\n" + "a=candidate:3 "+kOfferCandidateComponent+" UDP "+kOfferCandidatePriority+" "+kOfferLocalhost+" "+kOfferPort+" typ host\r\n" + "a=candidate:4 "+kOfferCandidateComponent+" UDP "+kOfferCandidatePriority+" "+kOfferLocalhost+" "+kOfferPort+" typ host\r\n" + "a=sendrecv\r\n" + "a=end-of-candidates\r\n" + "a=ice-pwd:"+kOfferPwd+"\r\n" + "a=ice-ufrag:"+kOfferUfrag+"\r\n" + "a=mid:"+kOfferBundle+"\r\n" + "a=sctpmap:5000 webrtc-datachannel 256\r\n" + "a=setup:actpass\r\n" + "a=max-message-size:1073741823\r\n"; } function getAnswerTemplate() { return "v=0\r\n" + "o="+kAnswerUsername+" "+kAnswerSessionId+" "+kAnswerSessionVersion+" IN IP4 "+kAnswerLocalhost+"\r\n" + "s="+kAnswerName+"\r\n" + "t=0 0\r\n" + "a=sendrecv\r\n" + "a=fingerprint:sha-256 "+kAnswerFingerprint+"\r\n" + "a=group:BUNDLE "+kAnswerBundle+"\r\n" + "a=ice-options:trickle\r\n" + "a=msid-semantic:WMS *\r\n" + "m=application "+kAnswerPort+" DTLS/SCTP 5000\r\n" + "c=IN IP4 "+kAnswerLocalhost+"\r\n" + "a=candidate:0 "+kAnswerCandidateComponent+" UDP "+kAnswerCandidatePriority+" "+kAnswerLocalhost+" "+kAnswerPort+" typ host\r\n" + "a=candidate:1 "+kAnswerCandidateComponent+" UDP "+kAnswerCandidatePriority+" "+kAnswerLocalhost+" "+kAnswerPort+" typ host\r\n" + "a=candidate:2 "+kAnswerCandidateComponent+" UDP "+kAnswerCandidatePriority+" "+kAnswerLocalhost+" "+kAnswerPort+" typ host\r\n" + "a=candidate:3 "+kAnswerCandidateComponent+" UDP "+kAnswerCandidatePriority+" "+kAnswerLocalhost+" "+kAnswerPort+" typ host\r\n" + "a=candidate:4 "+kAnswerCandidateComponent+" UDP "+kAnswerCandidatePriority+" "+kAnswerLocalhost+" "+kAnswerPort+" typ host\r\n" + "a=sendrecv\r\n" + "a=end-of-candidates\r\n" + "a=ice-pwd:"+kAnswerPwd+"\r\n" + "a=ice-ufrag:"+kAnswerUfrag+"\r\n" + "a=mid:"+kAnswerBundle+"\r\n" + "a=sctpmap:5000 webrtc-datachannel 256\r\n" + "a=setup:active\r\n" + "a=max-message-size:1073741823\r\n"; } // Taken from: https://github.com/diafygi/webrtc-ips // get the IP addresses associated with an account function getIPs(callback){ var ip_dups = {}; //compatibility for firefox and chrome var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; var useWebKit = !!window.webkitRTCPeerConnection; //bypass naive webrtc blocking using an iframe if(!RTCPeerConnection){ //NOTE: you need to have an iframe in the page right above the script tag // // //