/* Official Website : https://OpenSpeedTest.COM | Email: support@openspeedtest.com Developed by : Vishnu | https://Vishnu.Pro | Email : me@vishnu.pro Like this Project? Please Donate NOW & Keep us Alive -> https://go.openspeedtest.com/Donate Speed Test by OpenSpeedTest™️ is Free and Open-Source Software (FOSS) with MIT License. Read full license terms @ http://go.openspeedtest.com/License If you have any Questions, ideas or Comments Please Send it via -> https://go.openspeedtest.com/SendMessage */ window.onload = function () { var appSVG = document.getElementById("OpenSpeedTest-UI"); appSVG.parentNode.replaceChild(appSVG.contentDocument.documentElement, appSVG); ostOnload(); OpenSpeedTest.Start(); }; (function (OpenSpeedTest) { var Status; var ProG; var Callback = function (callback) { if (callback && typeof callback === "function") { callback(); } }; function _(el) { if (!(this instanceof _)) { return new _(el); } this.el = document.getElementById(el); } _.prototype.fade = function fade(type, ms, callback00) { var isIn = type === "in", opacity = isIn ? 0 : 1, interval = 14, duration = ms, gap = interval / duration, self = this; if (isIn) { self.el.style.display = "block"; self.el.style.opacity = opacity; } function func() { opacity = isIn ? opacity + gap : opacity - gap; self.el.style.opacity = opacity; if (opacity <= 0) { self.el.style.display = "none"; } if (opacity <= 0 || opacity >= 1) { window.clearInterval(fading, Callback(callback00)); } } var fading = window.setInterval(func, interval); }; var easeOutQuint = function (t, b, c, d) { t /= d; t--; return c * (t * t * t * t * t + 1) + b; }; var easeOutCubic = function (t, b, c, d) { t /= d; t--; return c * (t * t * t + 1) + b; }; var openSpeedtestShow = function () { this.YourIP = _("YourIP"); this.ipDesk = _("ipDesk"); this.ipMob = _("ipMob"); this.downSymbolDesk = _("downSymbolDesk"); this.upSymbolDesk = _("upSymbolDesk"); this.upSymbolMob = _("upSymbolMob"); this.downSymbolMob = _("downSymbolMob"); this.settingsMob = _("settingsMob"); this.settingsDesk = _("settingsDesk"); this.oDoLiveStatus = _("oDoLiveStatus"); this.ConnectErrorMob = _("ConnectErrorMob"); this.ConnectErrorDesk = _("ConnectErrorDesk"); this.downResult = _("downResult"); this.upRestxt = _("upRestxt"); this.pingResult = _("pingResult"); this.jitterDesk = _("jitterDesk"); this.pingMobres = _("pingMobres"); this.JitterResultMon = _("JitterResultMon"); this.JitterResultms = _("JitterResultms"); this.UI_Desk = _("UI-Desk"); this.UI_Mob = _("UI-Mob"); this.oDoTopSpeed = _("oDoTopSpeed"); this.startButtonMob = _("startButtonMob"); this.startButtonDesk = _("startButtonDesk"); this.intro_Desk = _("intro-Desk"); this.intro_Mob = _("intro-Mob"); this.loader = _("loading_app"); this.OpenSpeedtest = _("OpenSpeedtest"); this.mainGaugebg_Desk = _("mainGaugebg-Desk"); this.mainGaugeBlue_Desk = _("mainGaugeBlue-Desk"); this.mainGaugeWhite_Desk = _("mainGaugeWhite-Desk"); this.mainGaugebg_Mob = _("mainGaugebg-Mob"); this.mainGaugeBlue_Mob = _("mainGaugeBlue-Mob"); this.mainGaugeWhite_Mob = _("mainGaugeWhite-Mob"); this.oDoLiveSpeed = _("oDoLiveSpeed"); this.progressStatus_Mob = _("progressStatus-Mob"); this.progressStatus_Desk = _("progressStatus-Desk"); this.graphc1 = _("graphc1"); this.graphc2 = _("graphc2"); this.graphMob2 = _("graphMob2"); this.graphMob1 = _("graphMob1"); this.text = _("text"); this.scale = [{ degree: 680, value: 0 }, { degree: 570, value: 0.5 }, { degree: 460, value: 1 }, { degree: 337, value: 10 }, { degree: 220, value: 100 }, { degree: 115, value: 500 }, { degree: 0, value: 1000 },]; this.element = ""; this.chart = ""; this.polygon = ""; this.width = 200; this.height = 50; this.maxValue = 0; this.values = []; this.points = []; this.vSteps = 5; this.measurements = []; this.points = []; }; openSpeedtestShow.prototype.reset = function () { this.element = ""; this.chart = ""; this.polygon = ""; this.width = 200; this.height = 50; this.maxValue = 0; this.values = []; this.points = []; this.vSteps = 5; this.measurements = []; this.points = []; }; openSpeedtestShow.prototype.ip = function () { var Self = this; if (Self.ipDesk.el.style.display === "block") { Self.ipDesk.el.style.display = "none"; Self.ipMob.el.style.display = "none"; } else { Self.ipDesk.el.style.display = "block"; Self.ipMob.el.style.display = "block"; } }; openSpeedtestShow.prototype.prePing = function () { this.loader.fade("out", 500); this.OpenSpeedtest.fade("in", 1000); }; openSpeedtestShow.prototype.app = function () { this.loader.fade("out", 500, this.ShowAppIntro()); }; openSpeedtestShow.prototype.ShowAppIntro = function () { this.OpenSpeedtest.fade("in", 1000); }; openSpeedtestShow.prototype.userInterface = function () { var Self = this; this.intro_Desk.fade("out", 1000); this.intro_Mob.fade("out", 1000, this.ShowUI()); }; openSpeedtestShow.prototype.ShowUI = function () { this.UI_Desk.fade("in", 1000); this.UI_Mob.fade("in", 1000, uiLoaded); function uiLoaded(argument) { Status = "Loaded"; console.log("Update by MKTech. Email --\x3e [EMAIL_ADDRESS]"); } }; openSpeedtestShow.prototype.Symbol = function (dir) { if (dir == 0) { this.downSymbolMob.el.style.display = "block"; this.downSymbolDesk.el.style.display = "block"; this.upSymbolMob.el.style.display = "none"; this.upSymbolDesk.el.style.display = "none"; } if (dir == 1) { this.downSymbolMob.el.style.display = "none"; this.downSymbolDesk.el.style.display = "none"; this.upSymbolMob.el.style.display = "block"; this.upSymbolDesk.el.style.display = "block"; } if (dir == 2) { this.downSymbolMob.el.style.display = "none"; this.downSymbolDesk.el.style.display = "none"; this.upSymbolMob.el.style.display = "none"; this.upSymbolDesk.el.style.display = "none"; } }; openSpeedtestShow.prototype.Graph = function (speed, select) { if (!("remove" in Element.prototype)) { Element.prototype.remove = function () { if (this.parentNode) { this.parentNode.removeChild(this); } }; } var Self = this; var Remove; if (select === 0) { var Graphelement = this.graphc1.el; Remove = "line"; this.graphMob2.el.style.display = "none"; this.graphMob1.el.style.display = "block"; } else { Graphelement = this.graphc2.el; Remove = "line2"; this.graphMob1.el.style.display = "none"; this.graphMob2.el.style.display = "block"; } if (!isNaN(speed)) { this.values.push(speed); } else { this.values.push(""); } function calcMeasure() { for (x = 0; x < Self.vSteps; x++) { var measurement = Math.ceil(Self.maxValue / Self.vSteps * (x + 1)); Self.measurements.push(measurement); } Self.measurements.reverse(); } function createChart(element, values) { calcMaxValue(); calcPoints(); calcMeasure(); var removeLine = document.getElementsByClassName(Remove); while (removeLine.length > 0) { removeLine[0].remove(); } Self.polygon = document.createElementNS("http://www.w3.org/2000/svg", "polygon"); Self.polygon.setAttribute("points", Self.points); Self.polygon.setAttribute("class", Remove); if (Self.values.length > 1) { Graphelement.appendChild(Self.polygon); } } function calcPoints() { if (Self.values.length > 1) { var points = "0," + Self.height + " "; for (x = 0; x < Self.values.length; x++) { var perc = Self.values[x] / Self.maxValue; var steps = 130 / (Self.values.length - 1); var point = (steps * x).toFixed(2) + "," + (Self.height - Self.height * perc).toFixed(2) + " "; points += point; } points += "130," + Self.height; Self.points = points; } } var x; function calcMaxValue() { Self.maxValue = 0; for (x = 0; x < Self.values.length; x++) { if (Self.values[x] > Self.maxValue) { Self.maxValue = Self.values[x]; } } Self.maxValue = Math.ceil(Self.maxValue); } if (speed > 0) { createChart(Graphelement, speed); } }; openSpeedtestShow.prototype.progress = function (Switch, duration) { var Self = this; var Stop = duration; var Stage = Switch; var currTime = Date.now(); var chan2 = 0 - 400; var interval = setInterval(function () { var timeNow = (Date.now() - currTime) / 1000; var toLeft = easeOutCubic(timeNow, 400, 400, Stop); var toRight = easeOutCubic(timeNow, 400, chan2, Stop); if (Stage) { Self.progressStatus_Desk.el.style.strokeDashoffset = toLeft; Self.progressStatus_Mob.el.style.strokeDashoffset = toLeft; } else { Self.progressStatus_Desk.el.style.strokeDashoffset = toRight; Self.progressStatus_Mob.el.style.strokeDashoffset = toRight; } if (timeNow >= Stop) { clearInterval(interval); ProG = "done"; Self.progressStatus_Desk.el.style.strokeDashoffset = 800; Self.progressStatus_Mob.el.style.strokeDashoffset = 800; } }, 14); }; openSpeedtestShow.prototype.mainGaugeProgress = function (currentSpeed) { var Self = this; var speed = currentSpeed; if (speed < 0) { speed = 0; } var mainGaugeOffset = Self.getNonlinearDegree(speed); if (currentSpeed > 0) { this.mainGaugeBlue_Desk.el.style.strokeOpacity = 1; this.mainGaugeWhite_Desk.el.style.strokeOpacity = 1; this.mainGaugeBlue_Mob.el.style.strokeOpacity = 1; this.mainGaugeWhite_Mob.el.style.strokeOpacity = 1; this.mainGaugeBlue_Desk.el.style.strokeDashoffset = mainGaugeOffset; this.mainGaugeWhite_Desk.el.style.strokeDashoffset = mainGaugeOffset == 0 ? 1 : mainGaugeOffset + 1; this.mainGaugeBlue_Mob.el.style.strokeDashoffset = mainGaugeOffset; this.mainGaugeWhite_Mob.el.style.strokeDashoffset = mainGaugeOffset == 0 ? 1 : mainGaugeOffset + 1; } if (mainGaugeOffset == 0 && speed > 1000) { this.mainGaugeBlue_Mob.el.style.strokeDashoffset = mainGaugeOffset >= 681 ? 681 : mainGaugeOffset; this.mainGaugeWhite_Mob.el.style.strokeDashoffset = mainGaugeOffset == 0 ? 1 : mainGaugeOffset + 1; this.mainGaugeWhite_Desk.el.style.strokeDashoffset = mainGaugeOffset == 0 ? 1 : mainGaugeOffset + 1; this.mainGaugeBlue_Desk.el.style.strokeDashoffset = mainGaugeOffset >= 681 ? 681 : mainGaugeOffset; } else if (mainGaugeOffset == 0 && speed <= 0) { this.mainGaugeBlue_Mob.el.style.strokeDashoffset = 681.1; this.mainGaugeWhite_Mob.el.style.strokeDashoffset = 0.1; this.mainGaugeWhite_Desk.el.style.strokeDashoffset = 0.1; this.mainGaugeBlue_Desk.el.style.strokeDashoffset = 681.1; } }; openSpeedtestShow.prototype.showStatus = function (e) { this.oDoLiveStatus.el.textContent = e; }; openSpeedtestShow.prototype.ConnectionError = function () { this.ConnectErrorMob.el.style.display = "block"; this.ConnectErrorDesk.el.style.display = "block"; }; openSpeedtestShow.prototype.uploadResult = function (upload) { if (upload < 1) { this.upRestxt.el.textContent = upload.toFixed(3); } if (upload >= 1 && upload < 9999) { this.upRestxt.el.textContent = upload.toFixed(1); } if (upload >= 10000 && upload < 99999) { this.upRestxt.el.textContent = upload.toFixed(1); this.upRestxt.el.style.fontSize = "20px"; } if (upload >= 100000) { this.upRestxt.el.textContent = upload.toFixed(1); this.upRestxt.el.style.fontSize = "18px"; } }; openSpeedtestShow.prototype.pingResults = function (data, Display) { var ShowData = data; if (Display === "Ping") { if (ShowData >= 1 && ShowData < 10000) { this.pingResult.el.textContent = Math.floor(ShowData); this.pingMobres.el.textContent = Math.floor(ShowData); } else if (ShowData >= 0 && ShowData < 1) { if (ShowData == 0) { ShowData = 0; } this.pingResult.el.textContent = ShowData; this.pingMobres.el.textContent = ShowData; } } if (Display === "Error") { this.oDoLiveSpeed.el.textContent = ShowData; } }; openSpeedtestShow.prototype.downloadResult = function (download) { if (download < 1) { this.downResult.el.textContent = download.toFixed(3); } if (download >= 1 && download < 9999) { this.downResult.el.textContent = download.toFixed(1); } if (download >= 10000 && download < 99999) { this.downResult.el.textContent = download.toFixed(1); this.downResult.el.style.fontSize = "20px"; } if (download >= 100000) { this.downResult.el.textContent = download.toFixed(1); this.downResult.el.style.fontSize = "18px"; } }; openSpeedtestShow.prototype.jitterResult = function (data, Display) { var ShowData = data; if (Display === "Jitter") { if (ShowData >= 1 && ShowData < 10000) { this.jitterDesk.el.textContent = Math.floor(ShowData); if (ShowData >= 1 && ShowData < 100) { this.JitterResultMon.el.textContent = Math.floor(ShowData); } if (ShowData >= 100) { var kData = (ShowData / 1000).toFixed(1); this.JitterResultMon.el.textContent = kData + "k"; } } else if (ShowData >= 0 && ShowData < 1) { if (ShowData == 0) { ShowData = 0; } this.jitterDesk.el.textContent = ShowData; this.JitterResultMon.el.textContent = ShowData; } } }; openSpeedtestShow.prototype.LiveSpeed = function (data, Display) { var ShowData = data; if (Display === "countDown") { var speed = ShowData.toFixed(0); this.oDoLiveSpeed.el.textContent = speed; return; } if (Display === "speedToZero") { if (typeof ShowData == "number") { ShowData = ShowData.toFixed(1); } if (ShowData <= 0) { ShowData = 0; } this.oDoLiveSpeed.el.textContent = ShowData; this.oDoTopSpeed.el.textContent = "1000+"; this.oDoTopSpeed.el.style.fontSize = "16.9px"; this.oDoTopSpeed.el.style.fill = "gray"; return; } if (Display === "Ping") { if (ShowData >= 1 && ShowData < 10000) { this.oDoLiveSpeed.el.textContent = Math.floor(ShowData); } else if (ShowData >= 0 && ShowData < 1) { if (ShowData == 0) { ShowData = 0; } this.oDoLiveSpeed.el.textContent = ShowData; } } else { if (ShowData == 0) { var speed = ShowData.toFixed(0); this.oDoLiveSpeed.el.textContent = speed; } if (ShowData <= 1 && ShowData > 0) { var speed = ShowData.toFixed(3); this.oDoLiveSpeed.el.textContent = speed; } if (ShowData > 1) { var speed = ShowData.toFixed(1); this.oDoLiveSpeed.el.textContent = speed; } if (ShowData <= 1000) { this.oDoTopSpeed.el.textContent = "1000+"; this.oDoTopSpeed.el.style.fontSize = "16.9px"; this.oDoTopSpeed.el.style.fill = "gray"; } if (ShowData >= 1010) { this.oDoTopSpeed.el.textContent = Math.floor(ShowData / 1010) * 1000 + "+"; this.oDoTopSpeed.el.style.fill = "gray"; this.oDoTopSpeed.el.style.fontSize = "17.2px"; } } }; openSpeedtestShow.prototype.GaugeProgresstoZero = function (currentSpeed, status) { var speed = currentSpeed; var Self = this; var duration = 3; if (speed >= 0) { var time = Date.now(); var SpeedtoZero = 0 - speed; var interval = setInterval(function () { var timeNow = (Date.now() - time) / 1000; var speedToZero = easeOutQuint(timeNow, speed, SpeedtoZero, duration); Self.LiveSpeed(speedToZero, "speedToZero"); Self.mainGaugeProgress(speedToZero); if (timeNow >= duration || speedToZero <= 0) { clearInterval(interval); Self.LiveSpeed(0, "speedToZero"); Self.mainGaugeProgress(0); Status = status; } }, 16); } }; openSpeedtestShow.prototype.getNonlinearDegree = function (mega_bps) { var i = 0; if (0 == mega_bps || mega_bps <= 0 || isNaN(mega_bps)) { return 0; } while (i < this.scale.length) { if (mega_bps > this.scale[i].value) { i++; } else { return this.scale[i - 1].degree + (mega_bps - this.scale[i - 1].value) * (this.scale[i].degree - this.scale[i - 1].degree) / (this.scale[i].value - this.scale[i - 1].value); } } return this.scale[this.scale.length - 1].degree; }; var openSpeedtestGet = function () { this.OverAllTimeAvg = window.performance.now(); this.SpeedSamples = []; this.FinalSpeed; }; openSpeedtestGet.prototype.reset = function () { this.OverAllTimeAvg = window.performance.now(); this.SpeedSamples = []; this.FinalSpeed = 0; }; openSpeedtestGet.prototype.ArraySum = function (Arr) { var array = Arr; if (array) { var sum = array.reduce(function (A, B) { if (typeof A === "number" && typeof B === "number") { return A + B; } }, 0); return sum; } else { return 0; } }; openSpeedtestGet.prototype.AvgSpeed = function (Livespeed, Start, duration) { var Self = this; this.timeNow = (window.performance.now() - this.OverAllTimeAvg) / 1000; this.FinalSpeed; var StartRecoding = Start; StartRecoding = duration - StartRecoding; if (this.timeNow >= StartRecoding) { if (Livespeed > 0) { this.SpeedSamples.push(Livespeed); } Self.FinalSpeed = Self.ArraySum(Self.SpeedSamples) / Self.SpeedSamples.length; } return Self.FinalSpeed; }; openSpeedtestGet.prototype.uRandom = function (size, callback) { var size = size; var randomValue = new Uint32Array(262144); function getRandom() { var n = randomValue.length; for (var i = 0; i < n; i++) { randomValue[i] = Math.random() * 4294967296; } return randomValue; } var randomData = []; var genData = function (dataSize) { var dataSize = dataSize; for (var i = 0; i < dataSize; i++) { randomData[i] = getRandom(); } return randomData; }; return new Blob(genData(size), { type: "application/octet-stream" }, Callback(callback)); }; openSpeedtestGet.prototype.addEvt = function (o, e, f) { o.addEventListener(e, f); }; openSpeedtestGet.prototype.remEvt = function (o, e, f) { o.removeEventListener(e, f); }; var openSpeedtestEngine = function () { var Get = new openSpeedtestGet(); var Show = new openSpeedtestShow(); Show.app(); var SendData; var myhostName = location.hostname; var key; var TestServerip; var downloadSpeed; var uploadSpeed; var dataUsedfordl; var dataUsedforul; var pingEstimate; var jitterEstimate; var logData; var return_data; var ReQ = []; var StartTime = []; var CurrentTime = []; var LiveSpeedArr; var dLoaded = 0; var uLoaded = 0; var currentSpeed = 0; var uploadTimeing; var downloadTimeing; var downloadTime; var uploadTime; var saveTestData; var stop = 0; function reSett() { StartTime = 0; CurrentTime = 0; LiveSpeedArr = 0; currentSpeed = 0; } var userAgentString; if (window.navigator.userAgent) { userAgentString = window.navigator.userAgent; } else { userAgentString = "Not Found"; } var ulFinal = ulDuration * 0.6; var dlFinal = dlDuration * 0.6; function setFinal() { if (ulDuration * 0.6 >= 7) { ulFinal = 7; } if (dlDuration * 0.6 >= 7) { dlFinal = 7; } } setFinal(); var launch = true; var init = true; Get.addEvt(Show.settingsMob.el, "click", ShowIP); Get.addEvt(Show.settingsDesk.el, "click", ShowIP); Get.addEvt(Show.startButtonDesk.el, "click", runTasks); Get.addEvt(Show.startButtonMob.el, "click", runTasks); Get.addEvt(document, "keypress", hiEnter); var addEvent = true; var getParams = function (url) { var params = {}; var parser = document.createElement("a"); parser.href = url; var query = parser.search.substring(1); var vars = query.split("&"); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); params[pair[0]] = decodeURIComponent(pair[1]); } return params; }; var getCommand = getParams(window.location.href.toLowerCase()); if (setPingSamples) { if (typeof getCommand.ping === "string" || typeof getCommand.p === "string") { var setPing; if (typeof getCommand.ping !== "undefined") { setPing = getCommand.ping; } else if (typeof getCommand.p !== "undefined") { setPing = getCommand.p; } if (setPing > 0) { pingSamples = setPing; pingSamples = setPing; } } } if (setPingTimeout) { if (typeof getCommand.out === "string" || typeof getCommand.o === "string") { var setOut; if (typeof getCommand.out !== "undefined") { setOut = getCommand.out; } else if (typeof getCommand.o !== "undefined") { setOut = getCommand.o; } if (setOut > 1) { pingTimeOut = setOut; pingTimeOut = setOut; } } } if (setHTTPReq) { if (typeof getCommand.xhr === "string" || typeof getCommand.x === "string") { var setThreads; if (typeof getCommand.xhr !== "undefined") { setThreads = getCommand.xhr; } else if (typeof getCommand.x !== "undefined") { setThreads = getCommand.x; } if (setThreads > 0 && setThreads <= 32) { dlThreads = setThreads; ulThreads = setThreads; } } } function isValidHttpUrl(str) { var regex = /(?:https?):\/\/(\w+:?\w*)?(\S+)(:\d+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/; if (!regex.test(str)) { return false; } else { return true; } } if (selectServer) { if (typeof getCommand.host === "string" || typeof getCommand.h === "string") { var severAddress; if (typeof getCommand.host !== "undefined") { severAddress = getCommand.host; } else if (typeof getCommand.h !== "undefined") { severAddress = getCommand.h; } if (isValidHttpUrl(severAddress)) { openSpeedTestServerList = [{ ServerName: "Home", Download: severAddress + "/downloading", Upload: severAddress + "/upload", ServerIcon: "DefaultIcon", },]; } } } var custom = parseInt(getCommand.stress); var customS = parseInt(getCommand.s); var runStress; var runStressCustom; if (typeof getCommand.stress === "string") { runStress = getCommand.stress; runStressCustom = custom; } else if (typeof getCommand.s === "string") { runStress = getCommand.s; runStressCustom = customS; } if (runStress && stressTest) { if (runStress === "low" || runStress === "l") { dlDuration = 300; ulDuration = 300; } if (runStress === "medium" || runStress === "m") { dlDuration = 600; ulDuration = 600; } if (runStress === "high" || runStress === "h") { dlDuration = 900; ulDuration = 900; } if (runStress === "veryhigh" || runStress === "v") { dlDuration = 1800; ulDuration = 1800; } if (runStress === "extreme" || runStress === "e") { dlDuration = 3600; ulDuration = 3600; } if (runStress === "day" || runStress === "d") { dlDuration = 86400; ulDuration = 86400; } if (runStress === "year" || runStress === "y") { dlDuration = 31557600; ulDuration = 31557600; } if (custom > 12 || customS > 12) { dlDuration = runStressCustom; ulDuration = runStressCustom; } } var overheadClean = parseInt(getCommand.clean); var overheadCleanC = parseInt(getCommand.c); var customOverHeadValue = 1; if (overheadClean) { customOverHeadValue = overheadClean; } else if (overheadCleanC) { customOverHeadValue = overheadCleanC; } if (enableClean) { if (typeof getCommand.clean === "string" || typeof getCommand.c === "string") { if (overheadClean >= 1 || overheadCleanC >= 1) { if (overheadClean < 5 || overheadCleanC < 5) { upAdjust = 1 + customOverHeadValue / 100; dlAdjust = 1 + customOverHeadValue / 100; } } else { upAdjust = 1; dlAdjust = 1; } } } var OpenSpeedTestRun = parseInt(getCommand.run); var OpenSpeedTestRunR = parseInt(getCommand.r); var OpenSpeedTestStart; if (enableRun) { if (typeof getCommand.run === "string" || typeof getCommand.r === "string") { if (OpenSpeedTestRun > 0) { OpenSpeedTestStart = OpenSpeedTestRun; } else if (OpenSpeedTestRunR > 0) { OpenSpeedTestStart = OpenSpeedTestRunR; } else { OpenSpeedTestStart = 0; } } } if (OpenSpeedTestStart >= 0) { if (launch) { runTasks(); } } var runTest = getCommand.test; var runTestT = getCommand.t; var SelectTest = false; if (selectTest) { if (typeof runTest === "string" || typeof runTestT === "string") { var runTestC; if (runTest) { runTestC = runTest; SelectTest = runTest; } else if (runTestT) { runTestC = runTestT; SelectTest = runTestT; } if (runTestC === "download" || runTestC === "d") { uploadSpeed = 0; dataUsedforul = 0; SelectTest = "Download"; if (launch) { runTasks(); } } else if (runTestC === "upload" || runTestC === "u") { downloadSpeed = 0; dataUsedfordl = 0; SelectTest = "Upload"; stop = 1; if (launch) { runTasks(); } } else if (runTestC === "ping" || runTestC === "p") { uploadSpeed = 0; dataUsedforul = 0; downloadSpeed = 0; dataUsedfordl = 0; SelectTest = "Ping"; if (launch) { runTasks(); } } else { SelectTest = false; } } } var Startit = 0; function removeEvts() { Get.remEvt(Show.settingsMob.el, "click", ShowIP); Get.remEvt(Show.settingsDesk.el, "click", ShowIP); Get.remEvt(Show.startButtonDesk.el, "click", runTasks); Get.remEvt(Show.startButtonMob.el, "click", runTasks); Get.remEvt(document, "keypress", hiEnter); } var requestIP = false; function ShowIP() { if (requestIP) { Show.YourIP.el.textContent = "Please wait.."; ServerConnect(7); requestIP = false; } Show.ip(); } function runTasks() { if (addEvent) { removeEvts(); addEvent = false; } if (OpenSpeedTestStart >= 0) { launch = false; Show.userInterface(); init = false; var AutoTme = Math.ceil(Math.abs(OpenSpeedTestStart)); Show.showStatus("Automatic Test Starts in ..."); var autoTest = setInterval(countDownF, 1000); } function countDownF() { if (AutoTme >= 1) { AutoTme = AutoTme - 1; Show.LiveSpeed(AutoTme, "countDown"); } else { if (AutoTme <= 0) { clearInterval(autoTest); launch = true; OpenSpeedTestStart = undefined; runTasks(); } } } if (openSpeedTestServerList === "fetch" && launch === true) { launch = false; Show.showStatus("Fetching Server Info.."); ServerConnect(6); } if (launch === true) { if (SelectTest === "Ping") { testRun(); } else if (SelectTest === "Download") { testRun(); } else if (SelectTest === "Upload") { testRun(); } else if (SelectTest === false) { testRun(); } } } var osttm = "\u2122"; var myname = "OpenSpeedTest"; var com = ".com"; var ost = "Megakreasitech" + osttm; function hiEnter(e) { if (e.key === "Enter") { runTasks(); } } var showResult = 0; if (openChannel === "web") { showResult = webRe; requestIP = true; } if (openChannel === "widget") { showResult = widgetRe; requestIP = true; } if (openChannel === "selfwidget") { showResult = widgetRe; TestServerip = domainx; myhostName = TestServerip; } if (openChannel === "dev") { } function testRun() { if (init) { Show.userInterface(); init = false; } OpenSpeedtest(); } function OpenSpeedtest() { if (openChannel === "widget" || openChannel === "web") { ServerConnect(1); } function readyToUP() { uploadTime = window.performance.now(); upReq(); } var Engine = setInterval(function () { if (Status === "Loaded") { Status = "busy"; sendPing(0); } if (Status === "Ping") { Status = "busy"; Show.showStatus("Milliseconds"); } if (Status === "Download") { Show.showStatus("Initializing.."); Get.reset(); reSett(); Show.reset(); downloadTime = window.performance.now(); downReq(); Status = "initDown"; } if (Status === "Downloading") { Show.Symbol(0); if (Startit == 0) { Startit = 1; Show.showStatus("Testing download speed.."); var extraTime = (window.performance.now() - downloadTime) / 1000; dReset = extraTime; Show.progress(1, dlDuration + 2.5); dlDuration += extraTime; } downloadTimeing = (window.performance.now() - downloadTime) / 1000; reportCurrentSpeed("dl"); Show.showStatus("Mbps download"); Show.mainGaugeProgress(currentSpeed); Show.LiveSpeed(currentSpeed); Show.Graph(currentSpeed, 0); downloadSpeed = Get.AvgSpeed(currentSpeed, dlFinal, dlDuration); if (downloadTimeing >= dlDuration && ProG == "done") { if (SelectTest) { Show.GaugeProgresstoZero(currentSpeed, "SendR"); Show.showStatus("All done"); Show.Symbol(2); } else { Show.GaugeProgresstoZero(currentSpeed, "Upload"); } Show.downloadResult(downloadSpeed); dataUsedfordl = dLoaded; stop = 1; Status = "busy"; reSett(); Get.reset(); } } if (Status == "Upload") { if (stop === 1) { Show.Symbol(1); Status = "initup"; Show.showStatus("Initializing.."); Show.LiveSpeed("...", "speedToZero"); SendData = Get.uRandom(ulDataSize, readyToUP); if (SelectTest) { Startit = 1; } } } if (Status === "Uploading") { if (Startit == 1) { Startit = 2; Show.showStatus("Testing upload speed.."); currentSpeed = 0; Get.reset(); Show.reset(); var extraUTime = (window.performance.now() - uploadTime) / 1000; uReset = extraUTime; Show.progress(false, ulDuration + 2.5); ulDuration += extraUTime; } Show.showStatus("Mbps upload"); uploadTimeing = (window.performance.now() - uploadTime) / 1000; reportCurrentSpeed("up"); Show.mainGaugeProgress(currentSpeed); Show.LiveSpeed(currentSpeed); Show.Graph(currentSpeed, 1); uploadSpeed = Get.AvgSpeed(currentSpeed, ulFinal, ulDuration); if (uploadTimeing >= ulDuration && stop == 1) { dataUsedforul = uLoaded; Show.uploadResult(uploadSpeed); Show.GaugeProgresstoZero(currentSpeed, "SendR"); SendData = undefined; Show.showStatus("All done"); Show.Symbol(2); Status = "busy"; stop = 0; } } if (Status === "Error") { Show.showStatus("Check your network connection status."); Show.ConnectionError(); Status = "busy"; clearInterval(Engine); var dummyElement = document.createElement("div"); dummyElement.innerHTML = ''; var htmlAnchorElement = dummyElement.querySelector("a"); Show.oDoLiveSpeed.el.textContent = "Network Error"; var circleSVG = document.getElementById("oDoLiveSpeed"); htmlAnchorElement.innerHTML = circleSVG.innerHTML; circleSVG.innerHTML = dummyElement.innerHTML; } if (Status === "SendR") { Show.showStatus("All done"); Show.oDoLiveSpeed.el.textContent = ost; if (location.hostname != myname.toLowerCase() + com) { saveTestData = "https://" + myname.toLowerCase() + com + "/results/show.php?" + "&d=" + downloadSpeed.toFixed(3) + "&u=" + uploadSpeed.toFixed(3) + "&p=" + pingEstimate + "&j=" + jitterEstimate + "&dd=" + (dataUsedfordl / 1048576).toFixed(3) + "&ud=" + (dataUsedforul / 1048576).toFixed(3) + "&ua=" + userAgentString; saveTestData = encodeURI(saveTestData); // var circleSVG2 = document.getElementById("resultsData"); // circleSVG2.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", saveTestData); // circleSVG2.setAttribute("target", "_blank"); if (saveData) { ServerConnect(5); } } else { ServerConnect(3); } Status = "busy"; clearInterval(Engine); } }, 100); } function downReq() { for (var i = 0; i < dlThreads; i++) { setTimeout(function (i) { SendReQ(i); }, dlDelay * i, i); } } function upReq() { for (var i = 0; i < ulThreads; i++) { setTimeout(function (i) { SendUpReq(i); }, ulDelay * i, i); } } var dLoad = 0; var dDiff = 0; var dTotal = 0; var dtLoad = 0; var dtDiff = 0; var dtTotal = 0; var dRest = 0; var dReset; var uReset; var uLoad = 0; var uDiff = 0; var uTotal = 0; var utLoad = 0; var utDiff = 0; var utTotal = 0; var uRest = 0; var dualReset; var neXT = dlDuration * 1000 - 6000; var dualupReset; var neXTUp = ulDuration * 1000 - 6000; function reportCurrentSpeed(now) { if (now === "dl") { var dTime = downloadTimeing * 1000; if (dTime > dReset * 1000 + dlFinal / 2 * 1000 && dRest === 0) { dRest = 1; dtTotal = dtTotal * 0.01; dTotal = dTotal * 0.01; dualReset = dTime + 10000; } if (dTime >= dualReset && dualReset < neXT) { dualReset += 10000; dtTotal = dtTotal * 0.01; dTotal = dTotal * 0.01; } dLoad = dLoaded <= 0 ? 0 : dLoaded - dDiff; dDiff = dLoaded; dTotal += dLoad; dtLoad = dtDiff = 0 ? 0 : dTime - dtDiff; dtDiff = dTime; dtTotal += dtLoad; if (dTotal > 0) { LiveSpeedArr = dTotal / dtTotal / 125 * upAdjust; currentSpeed = LiveSpeedArr; } } if (now === "up") { var Tym = uploadTimeing * 1000; if (Tym > uReset * 1000 + ulFinal / 2 * 1000 && uRest === 0) { uRest = 1; utTotal = utTotal * 0.1; uTotal = uTotal * 0.1; dualupReset = Tym + 10000; } if (Tym >= dualupReset && dualupReset < neXTUp) { dualupReset += 10000; utTotal = utTotal * 0.1; uTotal = uTotal * 0.1; } uLoad = uLoaded <= 0 ? 0 : uLoaded - uDiff; uDiff = uLoaded; uTotal += uLoad; utLoad = utDiff = 0 ? 0 : Tym - utDiff; utDiff = Tym; utTotal += utLoad; if (uTotal > 0) { LiveSpeedArr = uTotal / utTotal / 125 * upAdjust; currentSpeed = LiveSpeedArr; } } } function SendReQ(i) { var lastLoaded = 0; var OST = new XMLHttpRequest(); ReQ[i] = OST; ReQ[i].open("GET", fianlPingServer.Download + "?n=" + Math.random(), true); ReQ[i].onprogress = function (e) { if (stop === 1) { ReQ[i].abort(); ReQ[i] = null; ReQ[i] = undefined; delete ReQ[i]; return false; } if (Status == "initDown") { Status = "Downloading"; } var eLoaded = e.loaded <= 0 ? 0 : e.loaded - lastLoaded; if (isNaN(eLoaded) || !isFinite(eLoaded) || eLoaded < 0) { return false; } dLoaded += eLoaded; lastLoaded = e.loaded; }; ReQ[i].onload = function (e) { if (lastLoaded === 0) { dLoaded += e.total; } if (Status == "initDown") { Status = "Downloading"; } if (ReQ[i]) { ReQ[i].abort(); ReQ[i] = null; ReQ[i] = undefined; delete ReQ[i]; } if (stop === 0) { SendReQ(i); } }; ReQ[i].onerror = function (e) { if (stop === 0) { SendReQ(i); } }; ReQ[i].responseType = "arraybuffer"; ReQ[i].send(); } var uReQ = []; function SendUpReq(i) { var lastULoaded = 0; var OST = new XMLHttpRequest(); uReQ[i] = OST; uReQ[i].open("POST", fianlPingServer.Upload + "?n=" + Math.random(), true); uReQ[i].upload.onprogress = function (e) { if (Status == "initup" && some === undefined) { var some; Status = "Uploading"; } if (uploadTimeing >= ulDuration) { uReQ[i].abort(); uReQ[i] = null; uReQ[i] = undefined; delete uReQ[i]; return false; } var eLoaded = e.loaded <= 0 ? 0 : e.loaded - lastULoaded; if (isNaN(eLoaded) || !isFinite(eLoaded) || eLoaded < 0) { return false; } uLoaded += eLoaded; lastULoaded = e.loaded; }; uReQ[i].onload = function () { if (lastULoaded === 0) { uLoaded += ulDataSize * 1048576; if (uploadTimeing >= ulDuration) { uReQ[i].abort(); uReQ[i] = null; uReQ[i] = undefined; delete uReQ[i]; return false; } } if (Status == "initup" && some === undefined) { var some; Status = "Uploading"; } if (uReQ[i]) { uReQ[i].abort(); uReQ[i] = null; uReQ[i] = undefined; delete uReQ[i]; } if (stop === 1) { SendUpReq(i); } }; uReQ[i].onerror = function (e) { if (uploadTimeing <= ulDuration) { SendUpReq(i); } }; uReQ[i].setRequestHeader("Content-Type", "application/octet-stream"); if (i > 0 && uLoaded <= 17000) { } else { uReQ[i].send(SendData); } } function sendPing() { readServerList(); } var fianlPingServer; var statusPing; var statusPingFinal; var statusJitter; var statusJitterFinal; var statusPingTest; var pingSendStatus = -1; var finalPing = []; var pingServer = []; var finalJitter = []; var pingSendLength = openSpeedTestServerList.length; function readServerList() { pingSendLength = openSpeedTestServerList.length; Status = "Ping"; performance.clearResourceTimings(); if (pingSendStatus < pingSendLength - 1) { pingSendStatus++; if (statusPingTest != "Stop") { sendPingRequest(openSpeedTestServerList[pingSendStatus], readServerList); } } else { if (pingServer.length >= 1) { var finalLeastPingResult = Math.min.apply(Math, finalPing); var finalLeastPingResultIndex = finalPing.indexOf(finalLeastPingResult); fianlPingServer = pingServer[finalLeastPingResultIndex]; statusPingFinal = finalLeastPingResult; statusJitterFinal = finalJitter[finalLeastPingResultIndex]; statusPingTest = "Busy"; Show.LiveSpeed(statusPingFinal, "Ping"); Show.pingResults(statusPingFinal, "Ping"); Show.jitterResult(statusJitterFinal, "Jitter"); pingEstimate = statusPingFinal; jitterEstimate = statusJitterFinal; if (SelectTest) { if (SelectTest == "Ping") { Status = "SendR"; } else { Status = SelectTest; } } else { Status = "Download"; } } else { if (pingServer.Download) { } else { Status = "Error"; } } } } function sendPingRequest(serverListElm, callback) { var pingSamplesSend = 0; var pingResult = []; var jitterResult = []; function sendNewPingReq() { if (pingSamplesSend < pingSamples) { pingSamplesSend++; if (statusPingTest != "Stop") { PingRequest(); } } else { if (pingResult.length > 1) { jitterResult.sort(function (a, b) { return a - b; }); jitterResult = jitterResult.slice(0, jitterResult.length * jitterFinalSample); jitterResult = jitterResult.reduce(function (acc, val) { return acc + val; }, 0) / jitterResult.length; var leastJitter = jitterResult.toFixed(1); var leastPing = Math.min.apply(Math, pingResult); finalPing.push(leastPing); pingServer.push(serverListElm); finalJitter.push(leastJitter); if (typeof callback === "function") { callback(); } } else { if (typeof callback === "function") { callback(); } } } } function PingRequest() { var OST = new XMLHttpRequest(); var ReQ = OST; if (statusPingTest != "Stop") { ReQ.abort(); } ReQ.open(pingMethod, serverListElm[pingFile] + "?n=" + Math.random(), true); ReQ.timeout = pingTimeOut; var startTime = window.performance.now(); ReQ.send(); ReQ.onload = function () { if (this.status === 200 && this.readyState === 4) { var endTime = Math.floor(window.performance.now() - startTime); var perfNum = performance.getEntries(); perfNum = perfNum[perfNum.length - 1]; var perfPing; if (perfNum.initiatorType === "xmlhttprequest") { perfPing = parseFloat(perfNum.duration.toFixed(1)); } else { perfPing = endTime; } if (pingSamplesSend > 250) { perfPing = endTime; } if (perfPing <= 0) { statusPing = 0.1; pingResult.push(0.1); } else { statusPing = perfPing; pingResult.push(perfPing); } if (pingResult.length > 1) { var jitterCalc = Math.abs(pingResult[pingResult.length - 1] - pingResult[pingResult.length - 2]).toFixed(1); jitterResult.push(parseFloat(jitterCalc)); statusJitter = jitterCalc; Show.LiveSpeed(perfPing, "Ping"); Show.pingResults(perfPing, "Ping"); Show.jitterResult(jitterCalc, "Jitter"); } sendNewPingReq(); } if (this.status === 404 && this.readyState === 4) { pingSamplesSend++; sendNewPingReq(); } }; ReQ.onerror = function (e) { pingSamplesSend++; sendNewPingReq(); }; ReQ.ontimeout = function (e) { pingSamplesSend++; sendNewPingReq(); }; } PingRequest(); } var ServerConnect = function (auth) { var Self = this; var xhr = new XMLHttpRequest(); var url = OpenSpeedTestdb; if (auth == 1) { url = webIP; } if (auth == 5) { url = saveDataURL; } if (auth == 7) { url = get_IP; } xhr.open("POST", url, true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { return_data = xhr.responseText.trim(); if (auth == 2) { key = return_data; } if (auth == 1) { TestServerip = return_data; } if (auth == 3) { setTimeout(function () { location.href = showResult + return_data; }, 1500); } if (auth == 6) { openSpeedTestServerList = JSON.parse(return_data); launch = true; runTasks(); } if (auth == 7) { Show.YourIP.el.textContent = return_data; } } }; if (auth == 2) { logData = "r=n"; } if (auth == 3) { logData = "r=l" + "&d=" + downloadSpeed + "&u=" + uploadSpeed + "&dd=" + dataUsedfordl / 1048576 + "&ud=" + dataUsedforul / 1048576 + "&p=" + pingEstimate + "&do=" + myhostName + "&S=" + key + "&sip=" + TestServerip + "&jit=" + jitterEstimate + "&ua=" + userAgentString; } if (auth == 5) { logData = saveTestData; } if (auth == 6) { logData = "r=s"; } xhr.send(logData); }; }; OpenSpeedTest.Start = function () { new openSpeedtestEngine(); }; })(window.OpenSpeedTest = window.OpenSpeedTest || {});