From 953501c924f4d6f0ae7681c2cba2389e5a863373 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 6 May 2018 11:30:51 +0300 Subject: [PATCH] Refactoring --- main.cpp | 14 +++-- main.js | 173 ++++++++++++++++++------------------------------------- 2 files changed, 64 insertions(+), 123 deletions(-) diff --git a/main.cpp b/main.cpp index dfdfb5c..31da793 100644 --- a/main.cpp +++ b/main.cpp @@ -144,10 +144,12 @@ struct DataRxTx { double curHzPerFrame = sampleRateOut/samplesPerFrame; double curIHzPerFrame = 1.0/curHzPerFrame; for (int i = 0; i < samplesPerFrame; i++) { - bit1Amplitude[k][i] = std::sin((2.0*M_PI*i)*freq*isamplesPerFrame*curIHzPerFrame + phaseOffset); + double curi = i; + bit1Amplitude[k][i] = std::sin((2.0*M_PI)*(curi*isamplesPerFrame)*(freq*curIHzPerFrame) + phaseOffset); } for (int i = 0; i < samplesPerFrame; i++) { - bit0Amplitude[k][i] = std::sin((2.0*M_PI*i)*(freq + hzPerFrame*d0)*isamplesPerFrame*curIHzPerFrame + phaseOffset); + double curi = i; + bit0Amplitude[k][i] = std::sin((2.0*M_PI)*(curi*isamplesPerFrame)*((freq + hzPerFrame*d0)*curIHzPerFrame) + phaseOffset); } } @@ -207,10 +209,12 @@ struct DataRxTx { double curHzPerFrame = sampleRateOut/samplesPerFrame; double curIHzPerFrame = 1.0/curHzPerFrame; for (int i = 0; i < samplesPerFrameOut; i++) { - bit1Amplitude[k][i] = std::sin((2.0*M_PI*(i + frameId*samplesPerFrameOut))*freq*isamplesPerFrame*curIHzPerFrame + phaseOffset); + double curi = (i + frameId*samplesPerFrameOut); + bit1Amplitude[k][i] = std::sin((2.0*M_PI)*(curi*isamplesPerFrame)*(freq*curIHzPerFrame) + phaseOffset); } for (int i = 0; i < samplesPerFrameOut; i++) { - bit0Amplitude[k][i] = std::sin((2.0*M_PI*(i + frameId*samplesPerFrameOut))*(freq + hzPerFrame*d0)*isamplesPerFrame*curIHzPerFrame + phaseOffset); + double curi = (i + frameId*samplesPerFrameOut); + bit0Amplitude[k][i] = std::sin((2.0*M_PI)*(curi*isamplesPerFrame)*((freq + hzPerFrame*d0)*curIHzPerFrame) + phaseOffset); } } } @@ -618,7 +622,7 @@ int init() { return (1); } - SDL_SetHintWithPriority( SDL_HINT_AUDIO_RESAMPLING_MODE, "medium", SDL_HINT_OVERRIDE ); + SDL_SetHintWithPriority(SDL_HINT_AUDIO_RESAMPLING_MODE, "medium", SDL_HINT_OVERRIDE); { int devcount = SDL_GetNumAudioDevices(SDL_FALSE); diff --git a/main.js b/main.js index 895ec4a..6891184 100644 --- a/main.js +++ b/main.js @@ -168,7 +168,7 @@ function getIPs(callback){ }, 1000); } -function transmitRelevantDataSender(sdp) { +function transmitRelevantData(sdp, dataType) { var res = parseSDP(sdp); var hashparts = null; if (typeof res.fingerprint === 'undefined') { @@ -178,70 +178,23 @@ function transmitRelevantDataSender(sdp) { } var r = new Uint8Array(256); - r[0] = "O".charCodeAt(0); + r[0] = dataType.charCodeAt(0); - var ip = document.getElementById('available-networks').value; + var ip = document.getElementById('available-networks').value; r[2] = parseInt(ip.split(".")[0]); r[3] = parseInt(ip.split(".")[1]); r[4] = parseInt(ip.split(".")[2]); r[5] = parseInt(ip.split(".")[3]); - for (var m in res.media[0].candidates) { - if (res.media[0].candidates[m].ip != ip) continue; - //if (res.media[0].candidate[m].transport != "UDP") continue; - var port = res.media[0].candidates[m].port; - r[6] = parseInt(port & 0xFF00) >> 8 - r[7] = parseInt(port & 0x00FF); - break; - } - - for (var i = 0; i < 32; ++i) { - r[8+i] = parseInt(hashparts[i], 16); + for (var m in res.media[0].candidates) { + if (res.media[0].candidates[m].ip != ip) continue; + //if (res.media[0].candidate[m].transport != "UDP") continue; + var port = res.media[0].candidates[m].port; + r[6] = parseInt(port & 0xFF00) >> 8 + r[7] = parseInt(port & 0x00FF); + break; } - var credentials = ""; - credentials += res.media[0].iceUfrag; - credentials += " "; - credentials += res.media[0].icePwd; - for (var i = 0; i < credentials.length; ++i) { - r[40 + i] = credentials.charCodeAt(i); - } - - r[1] = 40 + credentials.length; - - var buffer = Module._malloc(256); - Module.writeArrayToMemory(r, buffer, 256); - Module.cwrap('setText', 'number', ['number', 'buffer'])(r[1], buffer); - Module._free(buffer); -} - -function transmitRelevantDataReceiver(sdp) { - var res = parseSDP(sdp); - var hashparts = null; - if (typeof res.fingerprint === 'undefined') { - hashparts = res.media[0].fingerprint.hash.split(":"); - } else { - hashparts = res.fingerprint.hash.split(":"); - } - - var r = new Uint8Array(256); - r[0] = "A".charCodeAt(0); - - var ip = document.getElementById('available-networks').value; - r[2] = parseInt(ip.split(".")[0]); - r[3] = parseInt(ip.split(".")[1]); - r[4] = parseInt(ip.split(".")[2]); - r[5] = parseInt(ip.split(".")[3]); - - for (var m in res.media[0].candidates) { - if (res.media[0].candidates[m].ip != ip) continue; - //if (res.media[0].candidate[m].transport != "UDP") continue; - var port = res.media[0].candidates[m].port; - r[6] = parseInt(port & 0xFF00) >> 8 - r[7] = parseInt(port & 0x00FF); - break; - } - for (var i = 0; i < 32; ++i) { r[8+i] = parseInt(hashparts[i], 16); } @@ -341,7 +294,8 @@ function senderInit() { senderPC.onicecandidate = function(e) { if (e.candidate) return; - transmitRelevantDataSender(senderPC.localDescription.sdp); + // send offer using sound + transmitRelevantData(senderPC.localDescription.sdp, "O"); } createOfferSDP(); @@ -392,6 +346,38 @@ function updatePeerInfo() { } } +function parseRxData(brx) { + var vals = Array(); + vals[0] = ""; + vals[0] += String(brx[2]) + "."; + vals[0] += String(brx[3]) + "."; + vals[0] += String(brx[4]) + "."; + vals[0] += String(brx[5]); + + vals[1] = String(brx[6]*256 + brx[7]); + + vals[2] = ""; + for (var i = 0; i < 32; ++i) { + if (brx[8+i] == 0) { + vals[2] += '00'; + } else if (brx[8+i] < 16) { + vals[2] += '0'+brx[8+i].toString(16).toUpperCase(); + } else { + vals[2] += brx[8+i].toString(16).toUpperCase(); + } + if (i < 31) vals[2] += ':'; + } + + var credentials = ""; + for (var i = 40; i < brx[1]; ++i) { + credentials += String.fromCharCode(brx[i]); + } + vals[3] = credentials.split(" ")[0]; + vals[4] = credentials.split(" ")[1]; + + return vals; +} + function checkRxForPeerData() { if (typeof Module === 'undefined') return; Module.cwrap('getText', 'number', ['buffer'])(bufferRx); @@ -408,34 +394,7 @@ function checkRxForPeerData() { console.log("Received Offer"); lastSenderRequest = lastSenderRequestTmp; - var vals = Array(); - vals[0] = ""; - vals[0] += String(brx[2]) + "."; - vals[0] += String(brx[3]) + "."; - vals[0] += String(brx[4]) + "."; - vals[0] += String(brx[5]); - - vals[1] = String(brx[6]*256 + brx[7]); - - vals[2] = ""; - for (var i = 0; i < 32; ++i) { - if (brx[8+i] == 0) { - vals[2] += '00'; - } else if (brx[8+i] < 16) { - vals[2] += '0'+brx[8+i].toString(16).toUpperCase(); - } else { - vals[2] += brx[8+i].toString(16).toUpperCase(); - } - if (i < 31) vals[2] += ':'; - } - - var credentials = ""; - for (var i = 40; i < brx[1]; ++i) { - credentials += String.fromCharCode(brx[i]); - } - vals[3] = credentials.split(" ")[0]; - vals[4] = credentials.split(" ")[1]; - + var vals = parseRxData(brx); var res = parseSDP(getOfferTemplate()); res.origin.username = kOfferUsername; @@ -481,34 +440,7 @@ function checkRxForPeerData() { console.log("Received Answer"); lastReceiverAnswer = lastReceiverAnswerTmp; - var vals = Array(); - vals[0] = ""; - vals[0] += String(brx[2]) + "."; - vals[0] += String(brx[3]) + "."; - vals[0] += String(brx[4]) + "."; - vals[0] += String(brx[5]); - - vals[1] = String(brx[6]*256 + brx[7]); - - vals[2] = ""; - for (var i = 0; i < 32; ++i) { - if (brx[8+i] == 0) { - vals[2] += '00'; - } else if (brx[8+i] < 16) { - vals[2] += '0'+brx[8+i].toString(16).toUpperCase(); - } else { - vals[2] += brx[8+i].toString(16).toUpperCase(); - } - if (i < 31) vals[2] += ':'; - } - - var credentials = ""; - for (var i = 40; i < brx[1]; ++i) { - credentials += String.fromCharCode(brx[i]); - } - vals[3] = credentials.split(" ")[0]; - vals[4] = credentials.split(" ")[1]; - + var vals = parseRxData(brx); var res = parseSDP(getAnswerTemplate()); res.origin.username = kAnswerUsername; @@ -539,8 +471,12 @@ function checkRxForPeerData() { lastReceiverAnswerSDP = '{"type":"answer","sdp":'+JSON.stringify(writeSDP(res))+'}'; playSound("/media/open-ended"); - peerInfo.innerHTML= "Trying to connect with " + vals[0] + " ..."; - senderSend(); + if (senderPC) { + peerInfo.innerHTML= "Trying to connect with " + vals[0] + " ..."; + senderSend(); + } else { + peerInfo.innerHTML= "Received answer not meant for us (" + vals[0] + ")"; + } return; } else { @@ -562,7 +498,7 @@ function createAnswerSDP() { res.origin.sessionId = kAnswerSessionId; res.origin.sessionVersion = kAnswerSessionVersion; res.media[0].mid = kAnswerBundle; - res.media[0].connection.ip = document.getElementById('available-networks').value; + res.media[0].connection.ip = document.getElementById('available-networks').value; e.sdp = writeSDP(res); receiverPC.setLocalDescription(e); @@ -581,7 +517,8 @@ function receiverInit() { receiverPC.ondatachannel = receiveChannelCallback; receiverPC.onicecandidate = function(e) { if (e.candidate) return; - transmitRelevantDataReceiver(receiverPC.localDescription.sdp); + // send answer using sound + transmitRelevantData(receiverPC.localDescription.sdp, "A"); }; receiverPC.oniceconnectionstatechange = function(e) {};