tenfourfox/dom/push/test/push-server.sjs
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

53 lines
1.5 KiB
JavaScript

function debug(str) {
// dump("@@@ push-server " + str + "\n");
}
function concatUint8Arrays(arrays, size) {
let index = 0;
return arrays.reduce((result, a) => {
result.set(new Uint8Array(a), index);
index += a.byteLength;
return result;
}, new Uint8Array(size));
}
function handleRequest(request, response)
{
debug("handling request!");
const Cc = Components.classes;
const Ci = Components.interfaces;
let params = request.getHeader("X-Push-Server");
debug("params = " + params);
let xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
xhr.open(request.getHeader("X-Push-Method"), params);
for (let headers = request.headers; headers.hasMoreElements();) {
let header = headers.getNext().QueryInterface(Ci.nsISupportsString).data;
if (header.toLowerCase() != "x-push-server") {
xhr.setRequestHeader(header, request.getHeader(header));
}
}
let bodyStream = Cc["@mozilla.org/binaryinputstream;1"].createInstance(Ci.nsIBinaryInputStream);
bodyStream.setInputStream(request.bodyInputStream);
let size = 0;
let data = [];
for (let available; available = bodyStream.available();) {
data.push(bodyStream.readByteArray(available));
size += available;
}
xhr.send(concatUint8Arrays(data, size));
xhr.onload = function(e) {
debug("xhr : " + this.status);
}
xhr.onerror = function(e) {
debug("xhr error: " + e);
}
response.setStatusLine(request.httpVersion, "200", "OK");
}