commit d966f770d89ff850efa319d6f9d1f4327e00a89c Author: David Fifield david@bamsoftware.com Date: Sun Mar 9 22:49:11 2014 -0700
Prototype of making an HTTPS request with domain fronting. --- firefox/chrome/content/main.js | 48 +++++++++++++++++++++++++++++++++++++++ firefox/chrome/content/main.xul | 1 + 2 files changed, 49 insertions(+)
diff --git a/firefox/chrome/content/main.js b/firefox/chrome/content/main.js new file mode 100644 index 0000000..6cb10d0 --- /dev/null +++ b/firefox/chrome/content/main.js @@ -0,0 +1,48 @@ +var FRONT_URL = "https://www.google.com/"; +var HOST = "meek-reflect.appspot.com"; + +// Create a "direct" nsIProxyInfo that bypasses the default proxy. +// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProtoc... +var pps = Components.classes["@mozilla.org/network/protocol-proxy-service;1"] + .getService(Components.interfaces.nsIProtocolProxyService); +// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProxyI... +var proxy = pps.newProxyInfo("direct", "", 0, 0, 0xffffffff, null); + +// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIIOServ... +var ioService = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); +var httpProtocolHandler = ioService.getProtocolHandler("http") + .QueryInterface(Components.interfaces.nsIHttpProtocolHandler); +var uri = ioService.newURI(FRONT_URL, null, null); +// Construct an HTTP channel with the proxy bypass. +// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIHttpCh... +var channel = httpProtocolHandler.newProxiedChannel(uri, proxy, 0, null) + .QueryInterface(Components.interfaces.nsIHttpChannel); +// Set the host we really want. +channel.setRequestHeader("Host", HOST, false); +channel.redirectionLimit = 0; +// https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIUpload... +// channel.requestMethod = "POST"; + +var listener = new StreamListener(); +channel.asyncOpen(listener, null); + +// https://developer.mozilla.org/en-US/docs/Creating_Sandboxed_HTTP_Connections +function StreamListener() { + this.onStartRequest = function(aRequest, aContext) { + console.log("onStartRequest\n"); + dump("onStartRequest\n"); + }; + this.onStopRequest = function(aRequest, aContext, aStatus) { + dump("onStopRequest\n"); + }; + this.onDataAvailable = function(aRequest, aContext, aStream, aSourceOffset, aLength) { + dump("onDataAvailable\n"); + var a = new Uint8Array(aLength); + var input = Components.classes["@mozilla.org/binaryinputstream;1"] + .createInstance(Components.interfaces.nsIBinaryInputStream); + input.setInputStream(aStream); + input.readByteArray(aLength, a); + dump(aLength + ":" + a + "\n"); + }; +} diff --git a/firefox/chrome/content/main.xul b/firefox/chrome/content/main.xul index 1afd5fe..c93a89e 100644 --- a/firefox/chrome/content/main.xul +++ b/firefox/chrome/content/main.xul @@ -1,4 +1,5 @@ <?xml version="1.0"?>
<overlay id="main" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script src="chrome://meek-http-helper/content/main.js"></script> </overlay>
tor-commits@lists.torproject.org