| 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);		}	};	}
 |