|
|
@@ -44,9 +44,9 @@ function setupHttp(uri, options, dst) {
|
|
|
var headers = extend(defaults, options.headers);
|
|
|
var timeout = options.timeout || 60*1000;
|
|
|
var probe = !!options.probe;
|
|
|
+ var offset = ~~options.start;
|
|
|
|
|
|
- var retries = 10;
|
|
|
- var metaEmitted = false;
|
|
|
+ var tries = 10;
|
|
|
var fetch = probe ? request.head : request.get;
|
|
|
|
|
|
function fetchHttp(start) {
|
|
|
@@ -62,7 +62,7 @@ function setupHttp(uri, options, dst) {
|
|
|
|
|
|
function failOrRetry(err, temporary) {
|
|
|
req.abort();
|
|
|
- dst.emit('error', err);
|
|
|
+ return dst.emit('error', err);
|
|
|
}
|
|
|
|
|
|
function reqcleanup() {
|
|
|
@@ -82,13 +82,14 @@ function setupHttp(uri, options, dst) {
|
|
|
return failOrRetry(new Error('Bad server response code: '+res.statusCode), res.statusCode >= 500 && res.statusCode !== 501);
|
|
|
|
|
|
var size = res.headers['content-length'] ? parseInt(res.headers['content-length'], 10) : -1;
|
|
|
+ var filesize = (size >= 0) ? start + size - offset : -1;
|
|
|
|
|
|
// transparently handle gzip responses
|
|
|
var stream = res;
|
|
|
if (res.headers['content-encoding'] === 'gzip' || res.headers['content-encoding'] === 'deflate') {
|
|
|
unzip = zlib.createUnzip();
|
|
|
stream = stream.pipe(inheritErrors(unzip));
|
|
|
- size = -1;
|
|
|
+ filesize = -1;
|
|
|
}
|
|
|
|
|
|
// pipe it to self
|
|
|
@@ -138,13 +139,13 @@ function setupHttp(uri, options, dst) {
|
|
|
mimetype = typeparts[1].toLowerCase(),
|
|
|
modified = res.headers['last-modified'] ? new Date(res.headers['last-modified']) : null;
|
|
|
|
|
|
- dst.meta = {url:url.format(req.uri), mime:mimetype, size:start+size, modified:modified};
|
|
|
+ dst.meta = {url:url.format(req.uri), mime:mimetype, size:filesize, modified:modified};
|
|
|
dst.emit('meta', dst.meta);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- fetchHttp(options.start || 0);
|
|
|
+ fetchHttp(offset);
|
|
|
}
|
|
|
|
|
|
function UriFetchStream(uri, options) {
|