/* Proxy Plug-in Features: Times an upload to see if it appear suspiciously fast which might indicate a proxy server or anti-virus suite intercepting the upload. If the upload seems too fast an uploadError event is fired with PROXY error code after the final uploadProgress event. Adds a SWFUpload setting allowing you to tweak the bytes/s for triggering the error: proxy_detect_threshold : 256000 Adds an UPLOAD_ERROR entry called PROXY: function uploadError(file, errorCode, message) { if (errorCode === SWFUpload.UPLOAD_ERROR.PROXY) { alert("You might have a proxy!"); } } */ var SWFUpload; if (typeof(SWFUpload) === "function") { SWFUpload.proxyDetect = {}; SWFUpload.UPLOAD_ERROR.PROXY = -30300; SWFUpload.prototype.initSettings = (function (oldInitSettings) { return function (userSettings) { if (typeof(oldInitSettings) === "function") { oldInitSettings.call(this, userSettings); } this.ensureDefault = function (settingName, defaultValue) { this.settings[settingName] = (userSettings[settingName] == undefined) ? defaultValue : userSettings[settingName]; }; // List used to keep the speed stats for the files we are tracking this.proxyDetectFileStartTimes = {}; this.proxyDetectSettings = {}; this.ensureDefault("proxy_detect_threshold", 256000); // Default is 250 KB per second this.proxyDetectSettings.user_upload_progress_handler = this.settings.upload_progress_handler; this.proxyDetectSettings.user_upload_complete_handler = this.settings.upload_complete_handler; this.settings.upload_progress_handler = SWFUpload.proxyDetect.uploadProgressHandler; this.settings.upload_complete_handler = SWFUpload.proxyDetect.uploadCompleteHandler; delete this.ensureDefault; }; }(SWFUpload.prototype.initSettings)); SWFUpload.proxyDetect.uploadProgressHandler = function (file, bytesComplete, bytesTotal) { var ex1 = null, time, differenceMS, bps; try { if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") { this.proxyDetectSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal); } } catch (ex1) { } if (bytesComplete === 0) { this.proxyDetectFileStartTimes[file.ID] = allGetServerTime(); } else if (bytesComplete === bytesTotal) { try { // Calculate the Bps and decide if we should trigger the error time = allGetServerTime(); differenceMS = time.getTime() - this.proxyDetectFileStartTimes[file.ID].getTime(); if (differenceMS === 0) { differenceMS = 1; } bps = bytesTotal / (differenceMS * 1000); if (bps > parseInt(this.settings.proxy_detect_threshold, 10)) { this.queueEvent("upload_error_handler", [file, SWFUpload.UPLOAD_ERROR.PROXY, bps]); } } catch (ex) { } } if (ex1 !== null) { throw(ex1); } }; SWFUpload.proxyDetect.uploadCompleteHandler = function (file) { try { delete this.proxyDetectFileStartTimes[file.ID]; } catch (ex) { } if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") { return this.proxyDetectSettings.user_upload_progress_handler.call(this, file); } }; }