From 9e6d235cb7cedfb1ad3fa9e8c07ec80752e0b395 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 8 Apr 2014 02:49:42 -0400 Subject: [PATCH] refactor(main) sendFile asyncCall -> lstat --- lib/server/main.js | 48 ++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/lib/server/main.js b/lib/server/main.js index 8463b72a..1751e361 100644 --- a/lib/server/main.js +++ b/lib/server/main.js @@ -232,7 +232,7 @@ Util.copyObj(header, { 'Content-Range' : 'bytes ' + p.range.start + '-' + p.range.end + - '/' + p.length, + '/' + p.range.sizeTotal, 'Content-Length': p.range.size }); @@ -279,35 +279,32 @@ * @param pGzip - данные сжаты gzip'ом */ function sendFile(params) { - var isGzip, getTime, getSize, ext, + var isGzip, p = params, ret = checkParams(params); if (ret) { isGzip = isGZIP(p.request) && p.gzip; - ext = Util.getExtension(p.name); - getTime = Util.bind(time.get, p.name, { - str: true - }); - - getSize = Util.bind(dir.getSize, p.name); - - Util.asyncCall([getTime, getSize], function(timeData, sizeData) { - var error = timeData[0] || sizeData[0], - time = timeData[1], - length = sizeData[1], - range = getRange(p.request, length); - - if (error) { + fs.lstat(p.name, function(error, stat) { + var time, length, range; + + if (error) { sendError(params, error); } else { + time = stat.mtime, + length = stat.size, + range = getRange(p.request, length); + + if (range) + Util.copyObj(p, { + range : range, + status : RANGE + }); + Util.copyObj(p, { isGzip : isGzip && !range, - time : time, - range : range, - length : length, - status : range ? RANGE : OK + time : time }); mainSetHeader(params); @@ -480,20 +477,21 @@ response.setHeader(name, header[name]); } - function getRange(req, totalSize) { + function getRange(req, sizeTotal) { var range, start, end, size, parts, rangeStr = req.headers.range; if (rangeStr) { parts = rangeStr.replace(/bytes=/, "").split("-"); start = parts[0]; - end = parts[1] || totalSize - 1; + end = parts[1] || sizeTotal - 1; size = (end - start) + 1; range = { - start : start - 0, - end : end - 0, - size : size + start : start - 0, + end : end - 0, + size : size, + sizeTotal : sizeTotal }; }