123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /*
- 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] = new Date();
- } else if (bytesComplete === bytesTotal) {
- try {
- // Calculate the Bps and decide if we should trigger the error
- time = new Date();
- 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);
- }
- };
- }
|