const PORT = 26001; if (typeof EIB === "undefined") var EIB = { headers: {}, pending: [] }; const Cc = Components.classes, Ci = Components.interfaces, Cu = Components.utils, CC = Components.Constructor, Cr = Components.results; const ScriptableInputStream = CC("@mozilla.org/scriptableinputstream;1", "nsIScriptableInputStream", "init"); Cu.import("resource://gre/modules/Services.jsm"); function install() {} function uninstall() {} EIB.listen = function () { this.serverSocket = Cc["@mozilla.org/network/server-socket;1"] .createInstance(Ci.nsIServerSocket); this.serverSocket.init(PORT, true, -1); const tm = Cc["@mozilla.org/thread-manager;1"].getService(); this.serverSocket.asyncListen({ onSocketAccepted: function (socket, transport) { var is = transport.openInputStream(0, 0, 0); var os = transport.openOutputStream(Ci.nsITransport.OPEN_BLOCKING, 0, 0); var sis = new ScriptableInputStream(is); var buf = ""; // TODO: run on separate thread is.asyncWait({ onInputStreamReady: function () { while (sis.available()) { buf += sis.read(2048); } if (buf.indexOf("\n\n") !== 2) { var headers = {}; var rx = /\n(EVE_[^:]*): (.*)$/gm, arr; while ((arr = rx.exec(buf)) !== null) { headers[arr[1]] = arr[2]; } EIB.headers = headers; var resp = "HTTP/1.0 200 OK\r\n"; resp += "Content-Type: text/html\r\n\r\n"; resp += "