1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/media/test/contentType.sjs Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,77 @@ 1.4 +// Parse the query string, and give us the value for a certain key, or false if 1.5 +// it does not exist. 1.6 +function parseQuery(request, key) { 1.7 + var params = request.queryString.split('?')[0].split('&'); 1.8 + for (var j = 0; j < params.length; ++j) { 1.9 + var p = params[j]; 1.10 + if (p == key) 1.11 + return true; 1.12 + if (p.indexOf(key + "=") == 0) 1.13 + return p.substring(key.length + 1); 1.14 + if (p.indexOf("=") < 0 && key == "") 1.15 + return p; 1.16 + } 1.17 + return false; 1.18 +} 1.19 + 1.20 +function handleRequest(request, response) { 1.21 + try { 1.22 + // Get the filename to send back. 1.23 + var filename = parseQuery(request, "file"); 1.24 + 1.25 + const CC = Components.Constructor; 1.26 + const BinaryOutputStream = CC("@mozilla.org/binaryoutputstream;1", 1.27 + "nsIBinaryOutputStream", 1.28 + "setOutputStream"); 1.29 + var file = Components.classes["@mozilla.org/file/directory_service;1"]. 1.30 + getService(Components.interfaces.nsIProperties). 1.31 + get("CurWorkD", Components.interfaces.nsILocalFile); 1.32 + var fis = Components.classes['@mozilla.org/network/file-input-stream;1']. 1.33 + createInstance(Components.interfaces.nsIFileInputStream); 1.34 + var bis = Components.classes["@mozilla.org/binaryinputstream;1"]. 1.35 + createInstance(Components.interfaces.nsIBinaryInputStream); 1.36 + var paths = "tests/content/media/test/" + filename; 1.37 + dump(paths + '\n'); 1.38 + var split = paths.split("/"); 1.39 + for(var i = 0; i < split.length; ++i) { 1.40 + file.append(split[i]); 1.41 + } 1.42 + fis.init(file, -1, -1, false); 1.43 + 1.44 + // handle range requests 1.45 + var partialstart = 0, 1.46 + partialend = file.fileSize - 1; 1.47 + if (request.hasHeader("Range")) { 1.48 + var range = request.getHeader("Range"); 1.49 + var parts = range.replace(/bytes=/, "").split("-"); 1.50 + var partialstart = parts[0]; 1.51 + var partialend = parts[1]; 1.52 + if (!partialend.length) { 1.53 + partialend = file.fileSize - 1; 1.54 + } 1.55 + response.setStatusLine(request.httpVersion, 206, "Partial Content"); 1.56 + var contentRange = "bytes " + partialstart + "-" + partialend + "/" + file.fileSize; 1.57 + response.setHeader("Content-Range", contentRange); 1.58 + } 1.59 + 1.60 + fis.seek(Components.interfaces.nsISeekableStream.NS_SEEK_SET, partialstart); 1.61 + bis.setInputStream(fis); 1.62 + 1.63 + var sendContentType = parseQuery(request, "nomime"); 1.64 + if (sendContentType == false) { 1.65 + var contentType = parseQuery(request, "type"); 1.66 + if (contentType == false) { 1.67 + // This should not happen. 1.68 + dump("No type specified without having \'nomime\' in parameters."); 1.69 + return; 1.70 + } 1.71 + response.setHeader("Content-Type", contentType, false); 1.72 + } 1.73 + response.setHeader("Content-Length", ""+bis.available(), false); 1.74 + 1.75 + var bytes = bis.readBytes(bis.available()); 1.76 + response.write(bytes, bytes.length); 1.77 + } catch (e) { 1.78 + dump ("ERROR : " + e + "\n"); 1.79 + } 1.80 +}