зеркало из https://github.com/mozilla/gecko-dev.git
53 строки
1.3 KiB
JavaScript
53 строки
1.3 KiB
JavaScript
const CC = Components.Constructor;
|
|
const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1",
|
|
"nsIBinaryInputStream",
|
|
"setInputStream");
|
|
|
|
function setReq(req) {
|
|
setObjectState("dom/xhr/tests/progressserver", req);
|
|
}
|
|
|
|
function getReq() {
|
|
var req;
|
|
getObjectState("dom/xhr/tests/progressserver", function(v) {
|
|
req = v;
|
|
});
|
|
return req;
|
|
}
|
|
|
|
function handleRequest(request, response)
|
|
{
|
|
var pairs = request.queryString.split('&');
|
|
var command = pairs.shift();
|
|
dump("received '" + command + "' command\n");
|
|
|
|
var bodyStream = new BinaryInputStream(request.bodyInputStream);
|
|
var body = "";
|
|
var bodyAvail;
|
|
while ((bodyAvail = bodyStream.available()) > 0)
|
|
body += String.fromCharCode.apply(null, bodyStream.readByteArray(bodyAvail));
|
|
|
|
if (command == "open") {
|
|
response.processAsync();
|
|
setReq(response);
|
|
|
|
response.setHeader("Cache-Control", "no-cache", false);
|
|
pairs.forEach(function (val) {
|
|
var [name, value] = val.split('=');
|
|
response.setHeader(name, unescape(value), false);
|
|
});
|
|
response.write(body);
|
|
return;
|
|
}
|
|
|
|
if (command == "send") {
|
|
getReq().write(body);
|
|
}
|
|
else if (command == "close") {
|
|
getReq().finish();
|
|
setReq(null);
|
|
}
|
|
response.setHeader("Content-Type", "text/plain");
|
|
response.write("ok");
|
|
}
|