96 lines
3.2 KiB
JavaScript
Executable File
96 lines
3.2 KiB
JavaScript
Executable File
/*
|
|
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);
|
|
}
|
|
};
|
|
} |