diff --git a/index.js b/index.js index 078c2c85..23aca16b 100644 --- a/index.js +++ b/index.js @@ -16,6 +16,8 @@ var parseTorrent = require('parse-torrent') var pump = require('pump') var rangeParser = require('range-parser') var url = require('url') +var gzip = require('zlib').Gunzip() + inherits(WebTorrent, Client) @@ -206,14 +208,31 @@ WebTorrent.prototype._onRequest = function (req, res) { } } -// TODO: support gzipped files var blocklistRe = /^\s*[^#].*?\s*:\s*([a-f0-9.:]+?)\s*-\s*([a-f0-9.:]+?)\s*$/ function parseBlocklist (filename) { - var blocklistData = fs.readFileSync(filename, 'utf8') - var blocklist = [] - blocklistData.split('\n').forEach(function (line) { - var match = blocklistRe.exec(line) - if (match) blocklist.push({ start: match[1], end: match[2] }) - }) - return blocklist + if( filename.substring(filename.lastIndexOf('.')+1) == 'gz' ) { + var input = fs.createReadStream(filename); + filename = filename.substring(0, filename.lastIndexOf('.'))+'.txt' + var output = fs.createWriteStream(filename); + + var result = input.pipe(gzip).pipe(output); + result.on('finish', function () { + var blocklistData = fs.readFileSync(filename, 'utf8') + var blocklist = [] + blocklistData.split('\n').forEach(function (line) { + var match = blocklistRe.exec(line) + if (match) blocklist.push({ start: match[1], end: match[2] }) + }) + return blocklist + }) + } + else { + var blocklistData = fs.readFileSync(filename, 'utf8') + var blocklist = [] + blocklistData.split('\n').forEach(function (line) { + var match = blocklistRe.exec(line) + if (match) blocklist.push({ start: match[1], end: match[2] }) + }) + return blocklist + } }