diff --git a/jakelib/fetch.jake b/jakelib/fetch.jake index 7cb607f..37ca43f 100644 --- a/jakelib/fetch.jake +++ b/jakelib/fetch.jake @@ -1,5 +1,6 @@ 'use strict'; +var crypto = require('crypto'); var download = require('download'); var fs = require('fs'); var getPackageName = require('./common').getPackageName; @@ -10,28 +11,50 @@ var WebRTCUrl = pkg.config.webrtc.url; var WebRTCRev = pkg.config.webrtc.revision; var ChromiumUrl = pkg.config.chromium.url; +function checksum(bytes) { + return crypto + .createHash('md5') + .update(bytes, 'utf8') + .digest('hex') +} + namespace('fetch', function () { - task('precompiled', {async: true}, function () { - var packageName = getPackageName(); - var url = pkg.config.url + '/' + pkg.version + '/' + packageName; + task('precompiled', ['check-file'], function () { + }); + + task('check-file', function () { + try { + var data = fs.readFileSync(getPackageName()); + + if (checksum(data) !== pkg.config.webrtc.checksum) { + throw new Error('Invalid checksum'); + } + + jake.Task['fetch:extract'].invoke(); + } catch (e) { + jake.Task['fetch:download'].invoke(); + } + }); + + task('download', {async: true}, function () { + var url = pkg.config.url + '/' + pkg.version + '/' + getPackageName(); console.log('Downloading', url); download(url, '.') .then(function () { - console.log('Extracting', packageName); - jake.exec('tar xf ' + packageName, function () { - console.log('Deleting', packageName); - fs.unlinkSync(packageName); - console.log('Done'); + var task = jake.Task['fetch:extract']; + + task.addListener('complete', function () { complete(); }); + + task.invoke(); }) .catch(function (err) { var task = jake.Task['fetch:source']; console.log('Failed, building libwebrtc from source.'); task.addListener('complete', function () { - console.log('Build done.'); complete(); }); @@ -39,6 +62,17 @@ namespace('fetch', function () { }); }); + task('extract', {async: true}, function () { + var packageName = getPackageName(); + + console.log('Extracting', packageName); + jake.exec('tar xf ' + packageName, function () { + console.log('Deleting', packageName); + fs.unlinkSync(packageName); + complete(); + }); + }); + task('gclient', {async: true}, function () { console.log('Updating submodules...'); jake.exec(['git submodule init', 'git submodule update'], {printStdout: true}, function () { diff --git a/package.json b/package.json index 890d9f8..fa39afa 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "url": "https://github.com/aisouard/libwebrtc/releases/download", "webrtc": { "url": "https://chromium.googlesource.com/external/webrtc.git", - "revision": "7502401788fcba5c9f81a9e4701e2f0831e78698" + "revision": "7502401788fcba5c9f81a9e4701e2f0831e78698", + "checksum": "9fc7a9b4c576278a328c276cfb233459" }, "chromium": { "url": "https://github.com/aisouard/libwebrtc-chromium-deps.git"