diff options
| -rw-r--r-- | chrome/code/proxyserver.js | 58 | ||||
| -rw-r--r-- | chrome/code/redirector.js | 54 | ||||
| -rw-r--r-- | chrome/code/redirectorprefs.js | 5 | ||||
| -rw-r--r-- | chrome/code/xpcom.js | 13 | ||||
| -rw-r--r-- | defaults/preferences/redirector.preferences.js | 1 | ||||
| -rw-r--r-- | install.rdf | 3 | 
6 files changed, 87 insertions, 47 deletions
| diff --git a/chrome/code/proxyserver.js b/chrome/code/proxyserver.js new file mode 100644 index 0000000..5d4f1d6 --- /dev/null +++ b/chrome/code/proxyserver.js @@ -0,0 +1,58 @@ +Components.utils.import("chrome://redirector/content/code/xpcom.js"); + +var EXPORTED_SYMBOLS = ['RedirectorProxy']; + +var RedirectorProxy = { +	 +	start : function(port, getUrl) { +		dump('Opening Proxy Server Socket on port ' + port); +		this.getUrl = getUrl; +		this.serverSocket = new ServerSocket(port, true, -1); +		this.serverSocket.asyncListen(this); +	}, + +	onSocketAccepted: function(serverSocket, clientSocket) { +		dump("Accepted connection on "+clientSocket.host+":"+clientSocket.port); +		var requestStream = clientSocket.openInputStream(0, 0, 0).QueryInterface(Ci.nsIAsyncInputStream); +		var responseStream = clientSocket.openOutputStream(Ci.nsITransport.OPEN_BLOCKING, 0, 0); +		var tm = Cc["@mozilla.org/thread-manager;1"].getService(); +		requestStream.asyncWait({ +			onInputStreamReady : function(inputStream) { +				RedirectorProxy.processRequest(clientSocket, inputStream, responseStream); +			} +		},0,0,tm.mainThread); +    }, +	 +    processRequest : function(clientSocket, inputStream, responseStream) { +		var requestStream = new ScriptableInputStream(inputStream); +        requestStream.available(); +        var request = ''; +        while (requestStream.available()) { +          request = request + requestStream.read(2048); +        } +		var parts = request.split(' '); +		dump('\n\n\n'  + request + '\n\n\n'); +		dump("\n" + parts[0] + " request for " + parts[1]); +		var redirectUrl = 'http://einaregilsson.com';//Redirector.getRedirectUrl(parts[1]); +		var outp = 'HTTP/1.1 302 Moved Temporarily'; +		outp += '\r\nContent-Length: <cl>'; +		outp += '\r\nLocation: ' + redirectUrl; +		outp += '\r\nX-Redirected-By: Redirector Firefox Extension' +		outp += '\r\n\r\n'; +		var cl = outp.length -4; +		if (cl < 100) { +			cl+=2; +		} else if (cl < 1000) { +			cl += 3; +		} else if (cl < 10000) { +			cl += 4; +		} else if (cl < 100000) { +			cl += 5; +		} +		outp = outp.replace('<cl>', cl); +		dump(outp); +		responseStream.write(outp, outp.length); +		responseStream.close(); +		inputStream.close(); +    } +}
\ No newline at end of file diff --git a/chrome/code/redirector.js b/chrome/code/redirector.js index 19b0f0c..5c6fe81 100644 --- a/chrome/code/redirector.js +++ b/chrome/code/redirector.js @@ -1,15 +1,9 @@ -var EXPORTED_SYMBOLS = ['Redirector', 'rdump']; -Ci = Components.interfaces; -Cc = Components.classes; -Ci = Components.interfaces; -Cr = Components.results; - -const FileInputStream = Components.Constructor("@mozilla.org/network/file-input-stream;1", "nsIFileInputStream", "init"); -const ConverterInputStream = Components.Constructor("@mozilla.org/intl/converter-input-stream;1", "nsIConverterInputStream", "init"); -const LocalFile = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath"); - +Components.utils.import("chrome://redirector/content/code/xpcom.js");  Components.utils.import("chrome://redirector/content/code/redirect.js");  Components.utils.import("chrome://redirector/content/code/redirectorprefs.js"); +Components.utils.import("chrome://redirector/content/code/proxyserver.js"); + +var EXPORTED_SYMBOLS = ['Redirector', 'rdump'];  function rdump(msg) {  	//dump(msg + '\n'); @@ -156,36 +150,6 @@ Redirector = {  		this._prefs.version = currentVersion;  	},	 -	importOldRedirects : function(file) { -		var fileStream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); -		fileStream.init(file, 0x01, 0444, 0); //TODO: Find the actual constants for these magic numbers - -		var stream = Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream); -		stream.init(fileStream, "UTF-8", 16384, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); -		stream = stream.QueryInterface(Ci.nsIUnicharLineInputStream); - - - -		var importCount = 0, existsCount = 0; -		var lines = []; -		var line = {value: null}; -		stream.readLine(line); -		while (line.value) { -			var redirect = new Redirect(); -			redirect.deserialize(line.value.replace('\n', '')); -			if (this._containsRedirect(redirect)) { -				existsCount++; -			} else { -				this._list.push(redirect); -				importCount++; -			} -			stream.readLine(line); -		} -		stream.close(); -		this.save(); -		return importCount | (existsCount << 16); -	}, -  	importRedirects : function(file) {  		var fileStream = new FileInputStream(file, 0x01, 0444, 0);  		var stream = new ConverterInputStream(fileStream, "UTF-8", 16384, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); @@ -351,6 +315,11 @@ Redirector = {  		if (redirectsFile.exists()) {  			this.importRedirects(redirectsFile);  		} +		 +		RedirectorProxy.start(this._prefs.proxyServerPort); +		rdump('Registering as Proxy Filter'); +		//var pps = Cc["@mozilla.org/network/protocol-proxy-service;1"].getService(Ci.nsIProtocolProxyService);		 +		//pps.registerFilter(this, 0);  	},  	_loadStrings : function() { @@ -360,11 +329,6 @@ Redirector = {  		var stringBundleService = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService);  		this._strings = stringBundleService.createBundle(src, appLocale);	   	},	   - -	_redirectsAsString : function(seperator) { -		return [r.serialize() for each (r in this._list)].join(seperator); -	}, -	  	_containsRedirect : function(redirect) {  		for each (var existing in this._list) { diff --git a/chrome/code/redirectorprefs.js b/chrome/code/redirectorprefs.js index 3920539..40e8737 100644 --- a/chrome/code/redirectorprefs.js +++ b/chrome/code/redirectorprefs.js @@ -14,7 +14,7 @@ RedirectorPrefs.prototype = {  	_debugEnabled : null,  	_defaultDir : null,  	_redirects : null, -	 +	_proxyServerPort : null,  	_prefBranch : null,  	_listeners : null, @@ -36,6 +36,9 @@ RedirectorPrefs.prototype = {  	get debugEnabled() { return this._debugEnabled; },  	set debugEnabled(value) { this._prefBranch.setBoolPref('debugEnabled', value); }, +	get proxyServerPort() { return this._proxyServerPort; }, +	set proxyServerPort(value) { this._prefBranch.setIntPref('proxyServerPort', value); }, +  	get defaultDir() { return this._defaultDir; },  	set defaultDir(value) { this._prefBranch.setCharPref('defaultDir', value); }, diff --git a/chrome/code/xpcom.js b/chrome/code/xpcom.js new file mode 100644 index 0000000..ec2232f --- /dev/null +++ b/chrome/code/xpcom.js @@ -0,0 +1,13 @@ + +var EXPORTED_SYMBOLS = [ +'Ci', 'Cc', 'Cr', 'ServerSocket', 'ScriptableInputStream', 'FileInputStream', 'ConverterInputStream', 'LocalFile']; + +Ci = Components.interfaces; +Cc = Components.classes; +Cr = Components.results; + +const ServerSocket = Components.Constructor("@mozilla.org/network/server-socket;1", "nsIServerSocket", "init"); +const ScriptableInputStream = Components.Constructor("@mozilla.org/scriptableinputstream;1", "nsIScriptableInputStream", "init"); +const FileInputStream = Components.Constructor("@mozilla.org/network/file-input-stream;1", "nsIFileInputStream", "init"); +const ConverterInputStream = Components.Constructor("@mozilla.org/intl/converter-input-stream;1", "nsIConverterInputStream", "init"); +const LocalFile = Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath"); diff --git a/defaults/preferences/redirector.preferences.js b/defaults/preferences/redirector.preferences.js index da9e642..66f0cdd 100644 --- a/defaults/preferences/redirector.preferences.js +++ b/defaults/preferences/redirector.preferences.js @@ -5,6 +5,7 @@ pref("extensions.redirector.showContextMenu", true);  pref("extensions.redirector.showStatusBarIcon", true);  pref("extensions.redirector.version", 'undefined');  pref("extensions.redirector.defaultDir", ''); +pref("extensions.redirector.proxyServerPort", 4815);  // See http://kb.mozillazine.org/Localize_extension_descriptions  pref("extensions.redirector@einaregilsson.com.description", "chrome://redirector/locale/redirector.properties"); diff --git a/install.rdf b/install.rdf index 4678207..36928b4 100644 --- a/install.rdf +++ b/install.rdf @@ -4,12 +4,13 @@    <Description about="urn:mozilla:install-manifest">      <em:id>redirector@einaregilsson.com</em:id>      <em:name>Redirector</em:name> -    <em:version>2.6</em:version> +    <em:version>3.0</em:version>      <em:creator>Einar Egilsson</em:creator>      <em:description>Automatically redirects to user-defined urls on certain pages</em:description>      <em:homepageURL>http://einaregilsson.com/projects/redirector/</em:homepageURL>      <em:optionsURL>chrome://redirector/content/ui/settings.xul</em:optionsURL>      <em:iconURL>chrome://redirector/skin/redirector.png</em:iconURL> +	<em:type>2</em:type>      <em:unpack>true</em:unpack>      <em:targetApplication>        <Description> | 
