diff --git a/index.js b/index.js index 708571d7..fea933dd 100644 --- a/index.js +++ b/index.js @@ -120,27 +120,23 @@ function WebTorrent (opts) { self._downloadSpeed = speedometer() self._uploadSpeed = speedometer() - if (opts.dht !== false && typeof DHT === 'function' /* browser exclude */) { - // use a single DHT instance for all torrents, so the routing table can be reused - self.dht = new DHT(extend({ nodeId: self.nodeId }, opts.dht)) - - self.dht.once('error', function (err) { - self._destroy(err) - }) - - self.dht.once('listening', function () { - var address = self.dht.address() - if (address) self.dhtPort = address.port - }) - - // Ignore warning when there are > 10 torrents in the client - self.dht.setMaxListeners(0) + // We need one DHT for IPv4, and one DHT for IPv6, as per BEP-0032: + // "A node wishing to participate in both DHTs must maintain two distinct routing tables, one for IPv4 and one for IPv6." - self.dht.listen(self.dhtPort) + if (opts.dht !== false && typeof DHT === 'function' /* browser exclude */) { + self.dht = new DHT(extend({ nodeId: self.nodeId, ipv6: false }, opts.dht)) + this._initDHT(self.dht) } else { self.dht = false } + if (opts.dht6 !== false && typeof DHT === 'function' /* browser exclude */) { + self.dht6 = new DHT(extend({ nodeId: self.nodeId, ipv6: true }, opts.dht6)) + this._initDHT(self.dht6) + } else { + self.dht6 = false + } + // Enable or disable BEP19 (Web Seeds). Enabled by default: self.enableWebSeeds = opts.webSeeds !== false @@ -429,6 +425,12 @@ WebTorrent.prototype._destroy = function (err, cb) { }) } + if (self.dht6) { + tasks.push(function (cb) { + self.dht6.destroy(cb) + }) + } + parallel(tasks, cb) if (err) self.emit('error', err) @@ -451,6 +453,25 @@ WebTorrent.prototype._onListening = function () { this.emit('listening') } +WebTorrent.prototype._initDHT = function (dht) { + var portField = dht.ipv6 ? 'dhtPort6' : 'dhtPort' + var self = this + + dht.once('error', function (err) { + self._destroy(err) + }) + + dht.once('listening', function () { + var address = dht.address() + if (address) self[portField] = address.port + }) + + // Ignore warning when there are > 10 torrents in the client + dht.setMaxListeners(0) + + dht.listen(this[portField]) +} + /** * Check if `obj` is a node Readable stream * @param {*} obj diff --git a/lib/peer.js b/lib/peer.js index 01a3935f..bdf3a3cb 100644 --- a/lib/peer.js +++ b/lib/peer.js @@ -187,6 +187,7 @@ Peer.prototype.onHandshake = function (infoHash, peerId) { Peer.prototype.handshake = function () { var self = this + var opts = { dht: self.swarm.private ? false : !!self.swarm.client.dht } diff --git a/lib/torrent.js b/lib/torrent.js index 579f3daa..ca44ca6c 100644 --- a/lib/torrent.js +++ b/lib/torrent.js @@ -331,6 +331,7 @@ Torrent.prototype._onListening = function () { announce: self.announce, peerId: self.client.peerId, dht: !self.private && self.client.dht, + dht6: !self.private && self.client.dht6, tracker: trackerOpts, port: self.client.torrentPort }) @@ -937,7 +938,7 @@ Torrent.prototype._onWire = function (wire, addr) { } // When peer sends PORT message, add that DHT node to routing table - if (self.client.dht && self.client.dht.listening) { + if ((self.client.dht && self.client.dht.listening) || (self.client.dht6 && self.client.dht6.listening)) { wire.on('port', function (port) { if (self.destroyed || self.client.dht.destroyed) { return @@ -950,7 +951,12 @@ Torrent.prototype._onWire = function (wire, addr) { } self._debug('port: %s (from %s)', port, addr) - self.client.dht.addNode({ host: wire.remoteAddress, port: port }) + + if (net.isIPv6(wire.remoteAddress) && self.client.dht6 && self.client.dht6.listening) { + self.client.dht6.addNode({ host: wire.remoteAddress, port: port }) + } else if (net.isIPv4(wire.remoteAddress) && self.client.dht && self.client.dht.listening) { + self.client.dht.addNode({ host: wire.remoteAddress, port: port }) + } }) } diff --git a/test/browser/basic.js b/test/browser/basic.js index 7bc488e3..6944e618 100644 --- a/test/browser/basic.js +++ b/test/browser/basic.js @@ -21,7 +21,7 @@ if (!(global && global.process && global.process.versions && global.process.vers test('image append w/ query selector', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -39,7 +39,7 @@ if (!(global && global.process && global.process.versions && global.process.vers test('image append w/ element', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -57,7 +57,7 @@ if (!(global && global.process && global.process.versions && global.process.vers test('image render w/ query selector', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -79,7 +79,7 @@ if (!(global && global.process && global.process.versions && global.process.vers test('image render w/ element', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -101,7 +101,7 @@ if (!(global && global.process && global.process.versions && global.process.vers test('WebTorrent.WEBRTC_SUPPORT', function (t) { t.plan(2) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/client-add-duplicate-trackers.js b/test/client-add-duplicate-trackers.js index 6c58db7e..a825cbe9 100644 --- a/test/client-add-duplicate-trackers.js +++ b/test/client-add-duplicate-trackers.js @@ -6,7 +6,7 @@ var WebTorrent = require('../') test('client.add: duplicate trackers', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -30,7 +30,7 @@ test('client.add: duplicate trackers, with multiple torrents', function (t) { announce: [ 'wss://example.com', 'wss://example.com', 'wss://example.com' ] } - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -67,7 +67,7 @@ test('client.add: duplicate trackers (including in .torrent file), multiple torr var parsedTorrentAlice = extend(fixtures.alice.parsedTorrent) parsedTorrentAlice.announce = [ 'wss://example.com', 'wss://example.com', 'wss://example.com' ] - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/client-add.js b/test/client-add.js index a3a18cda..d5e9fcbf 100644 --- a/test/client-add.js +++ b/test/client-add.js @@ -7,7 +7,7 @@ var WebTorrent = require('../') test('client.add: magnet uri, utf-8 string', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -29,7 +29,7 @@ test('client.add: magnet uri, utf-8 string', function (t) { test('client.add: torrent file, buffer', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -51,7 +51,7 @@ test('client.add: torrent file, buffer', function (t) { test('client.add: info hash, hex string', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -73,7 +73,7 @@ test('client.add: info hash, hex string', function (t) { test('client.add: info hash, buffer', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -95,7 +95,7 @@ test('client.add: info hash, buffer', function (t) { test('client.add: parsed torrent, from `parse-torrent`', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -117,7 +117,7 @@ test('client.add: parsed torrent, from `parse-torrent`', function (t) { test('client.add: parsed torrent, with string type announce property', function (t) { t.plan(7) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -148,7 +148,7 @@ test('client.add: parsed torrent, with string type announce property', function test('client.add: parsed torrent, with array type announce property', function (t) { t.plan(7) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -179,7 +179,7 @@ test('client.add: parsed torrent, with array type announce property', function ( test('client.add: invalid torrent id: empty string', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.ok(err instanceof Error) @@ -195,7 +195,7 @@ test('client.add: invalid torrent id: empty string', function (t) { test('client.add: invalid torrent id: short buffer', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.ok(err instanceof Error) diff --git a/test/client-destroy.js b/test/client-destroy.js index 956c966f..0a290c10 100644 --- a/test/client-destroy.js +++ b/test/client-destroy.js @@ -6,7 +6,7 @@ var WebTorrent = require('../') test('after client.destroy(), throw on client.add() or client.seed()', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -24,7 +24,7 @@ test('after client.destroy(), throw on client.add() or client.seed()', function test('after client.destroy(), no "torrent" or "ready" events emitted', function (t) { t.plan(1) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/client-remove.js b/test/client-remove.js index a62f0cb9..c9dbbf1f 100644 --- a/test/client-remove.js +++ b/test/client-remove.js @@ -5,7 +5,7 @@ var WebTorrent = require('../') test('client.remove: remove by Torrent object', function (t) { t.plan(5) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/client-seed.js b/test/client-seed.js index 7a41ba9c..99857cbe 100644 --- a/test/client-seed.js +++ b/test/client-seed.js @@ -8,7 +8,7 @@ var WebTorrent = require('../') test('client.seed: torrent file (Buffer)', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -31,7 +31,7 @@ test('client.seed: torrent file (Buffer)', function (t) { test('client.seed: torrent file (Buffer), set name on buffer', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -56,7 +56,7 @@ test('client.seed: torrent file (Blob)', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/duplicate.js b/test/duplicate.js index a1896605..17a0d6d8 100644 --- a/test/duplicate.js +++ b/test/duplicate.js @@ -5,7 +5,7 @@ var WebTorrent = require('../') test('client.seed followed by duplicate client.add (sync)', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -36,7 +36,7 @@ test('client.seed followed by duplicate client.add (sync)', function (t) { test('client.seed followed by duplicate client.add (async)', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -67,7 +67,7 @@ test('client.seed followed by duplicate client.add (async)', function (t) { test('client.seed followed by two duplicate client.add calls (sync)', function (t) { t.plan(9) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -110,7 +110,7 @@ test('client.seed followed by two duplicate client.add calls (sync)', function ( test('client.seed followed by two duplicate client.add calls (async)', function (t) { t.plan(9) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -153,7 +153,7 @@ test('client.seed followed by two duplicate client.add calls (async)', function test('successive sync client.add, client.remove, client.add, client.remove (sync)', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/basic.js b/test/node/basic.js index 75593098..b1804e98 100644 --- a/test/node/basic.js +++ b/test/node/basic.js @@ -6,7 +6,7 @@ var WebTorrent = require('../../') test('WebTorrent.WEBRTC_SUPPORT', function (t) { t.plan(2) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -29,7 +29,7 @@ test('client.add: http url to a torrent file, string', function (t) { server.listen(0, function () { var port = server.address().port var url = 'http://127.0.0.1:' + port - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -51,7 +51,7 @@ test('client.add: http url to a torrent file, string', function (t) { test('client.add: filesystem path to a torrent file, string', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -71,7 +71,7 @@ test('client.add: filesystem path to a torrent file, string', function (t) { test('client.seed: filesystem path to file, string', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -94,7 +94,7 @@ test('client.seed: filesystem path to file, string', function (t) { test('client.seed: filesystem path to folder with one file, string', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -114,7 +114,7 @@ test('client.seed: filesystem path to folder with one file, string', function (t test('client.seed: filesystem path to folder with multiple files, string', function (t) { t.plan(6) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -134,7 +134,7 @@ test('client.seed: filesystem path to folder with multiple files, string', funct test('client.add: invalid torrent id: invalid filesystem path', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.ok(err instanceof Error) diff --git a/test/node/blocklist-tracker.js b/test/node/blocklist-tracker.js index 88fbf417..99cb49fe 100644 --- a/test/node/blocklist-tracker.js +++ b/test/node/blocklist-tracker.js @@ -35,7 +35,7 @@ test('blocklist blocks peers discovered via tracker', function (t) { }, function (cb) { - client1 = new WebTorrent({ dht: false }) + client1 = new WebTorrent({ dht: false, dht6: false }) client1.on('error', function (err) { t.fail(err) }) client1.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/common.js b/test/node/common.js new file mode 100644 index 00000000..d242cff9 --- /dev/null +++ b/test/node/common.js @@ -0,0 +1,34 @@ +var WebTorrent = require('../../') + +exports.wrapTest = function (test, str, func) { + test('ipv4 ' + str, function (t) { + func(t, false) + if (t._plan) { + t.plan(t._plan + 1) + } + + t.test('ipv6 ' + str, function (newT) { + func(newT, true) + }) + }) +} + +exports.localHost = function (ipv6, plainIpv6) { + if (ipv6) { + if (!plainIpv6) { + return '[::1]' + } + return '::1' + } + return '127.0.0.1' +} + +exports.newClient = function (ipv6, port) { + var dhtOpts = { bootstrap: this.localHost(ipv6) + ':' + port } + + return new WebTorrent({ + tracker: false, + dht: ipv6 ? false : dhtOpts, + dht6: ipv6 ? dhtOpts : false + }) +} diff --git a/test/node/download-dht-magnet.js b/test/node/download-dht-magnet.js index f96a6669..b09dc596 100644 --- a/test/node/download-dht-magnet.js +++ b/test/node/download-dht-magnet.js @@ -6,11 +6,12 @@ var networkAddress = require('network-address') var series = require('run-series') var test = require('tape') var WebTorrent = require('../../') +var common = require('./common') -test('Download using DHT (via magnet uri)', function (t) { +common.wrapTest(test, 'Download using DHT (via magnet uri)', function (t, ipv6) { t.plan(12) - var dhtServer = new DHT({ bootstrap: false }) + var dhtServer = new DHT({ bootstrap: false, ipv6: ipv6 }) dhtServer.on('error', function (err) { t.fail(err) }) dhtServer.on('warning', function (err) { t.fail(err) }) @@ -23,13 +24,18 @@ test('Download using DHT (via magnet uri)', function (t) { }, function (cb) { + var dhtOpts = { bootstrap: (ipv6 ? '[::1]:' : '127.0.0.1:') + dhtServer.address().port, host: ipv6 ? networkAddress.ipv6() : networkAddress.ipv4() } + client1 = new WebTorrent({ tracker: false, - dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port, host: networkAddress.ipv4() } + dht: ipv6 ? false : dhtOpts, + dht6: ipv6 ? dhtOpts : false }) - client1.dht.on('listening', function () { - t.equal(client1.dhtPort, client1.dht.address().port) + var dht = ipv6 ? client1.dht6 : client1.dht + + dht.on('listening', function () { + t.equal(ipv6 ? client1.dhtPort6 : client1.dhtPort, dht.address().port) }) client1.on('error', function (err) { t.fail(err) }) @@ -65,9 +71,12 @@ test('Download using DHT (via magnet uri)', function (t) { }, function (cb) { + var dhtOpts = { bootstrap: (ipv6 ? '[::1]:' : '127.0.0.1:') + dhtServer.address().port, host: ipv6 ? networkAddress.ipv6() : networkAddress.ipv4() } + client2 = new WebTorrent({ tracker: false, - dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port, host: networkAddress.ipv4() } + dht: ipv6 ? false : dhtOpts, + dht6: ipv6 ? dhtOpts : false }) client2.on('error', function (err) { t.fail(err) }) diff --git a/test/node/download-dht-torrent.js b/test/node/download-dht-torrent.js index 5182dd36..808f1997 100644 --- a/test/node/download-dht-torrent.js +++ b/test/node/download-dht-torrent.js @@ -5,11 +5,12 @@ var MemoryChunkStore = require('memory-chunk-store') var series = require('run-series') var test = require('tape') var WebTorrent = require('../../') +var common = require('./common') -test('Download using DHT (via .torrent file)', function (t) { +common.wrapTest(test, 'Download using DHT (via .torrent file)', function (t, ipv6) { t.plan(10) - var dhtServer = new DHT({ bootstrap: false }) + var dhtServer = new DHT({ bootstrap: false, ipv6: ipv6 }) dhtServer.on('error', function (err) { t.fail(err) }) dhtServer.on('warning', function (err) { t.fail(err) }) @@ -22,13 +23,11 @@ test('Download using DHT (via .torrent file)', function (t) { }, function (cb) { - client1 = new WebTorrent({ - tracker: false, - dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port } - }) + client1 = common.newClient(ipv6, dhtServer.address().port) - client1.dht.on('listening', function () { - t.equal(client1.dhtPort, client1.dht.address().port) + var dht = ipv6 ? client1.dht6 : client1.dht + dht.on('listening', function () { + t.equal(ipv6 ? client1.dhtPort6 : client1.dhtPort, dht.address().port) }) client1.on('error', function (err) { t.fail(err) }) @@ -69,9 +68,12 @@ test('Download using DHT (via .torrent file)', function (t) { }, function (cb) { + var dhtOpts = { bootstrap: common.localHost(ipv6) + ':' + dhtServer.address().port } + client2 = new WebTorrent({ tracker: false, - dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port } + dht: ipv6 ? false : dhtOpts, + dht6: ipv6 ? dhtOpts : false }) client2.on('error', function (err) { t.fail(err) }) diff --git a/test/node/download-metadata.js b/test/node/download-metadata.js index 1972f2ee..09ae9053 100644 --- a/test/node/download-metadata.js +++ b/test/node/download-metadata.js @@ -26,7 +26,7 @@ function createServer (data, cb) { test('Download metadata for magnet URI with xs parameter', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -44,7 +44,7 @@ test('Download metadata for magnet URI with xs parameter', function (t) { test('Download metadata for magnet URI with 2 xs parameters', function (t) { t.plan(4) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -70,7 +70,7 @@ test('Download metadata for magnet URI with 2 xs parameters', function (t) { test('Download metadata for magnet URI with 2 xs parameters, with 1 invalid protocol', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -91,7 +91,7 @@ test('Download metadata for magnet URI with 2 xs parameters, with 1 invalid prot test('Download metadata for magnet URI with 2 xs parameters, with 1 404 URL', function (t) { t.plan(3) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -112,7 +112,7 @@ test('Download metadata for magnet URI with 2 xs parameters, with 1 404 URL', fu test('Download metadata magnet URI with unsupported protocol in xs parameter', function (t) { t.plan(1) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/download-private-dht.js b/test/node/download-private-dht.js index 8a497981..d34627d3 100644 --- a/test/node/download-private-dht.js +++ b/test/node/download-private-dht.js @@ -3,12 +3,12 @@ var fixtures = require('webtorrent-fixtures') var MemoryChunkStore = require('memory-chunk-store') var series = require('run-series') var test = require('tape') -var WebTorrent = require('../../') +var common = require('./common') -test('private torrent should not use DHT', function (t) { +common.wrapTest(test, 'private torrent should not use DHT', function (t, ipv6) { t.plan(4) - var dhtServer = new DHT({ bootstrap: false }) + var dhtServer = new DHT({ bootstrap: false, ipv6: ipv6 }) dhtServer.on('error', function (err) { t.fail(err) }) dhtServer.on('warning', function (err) { t.fail(err) }) @@ -21,10 +21,7 @@ test('private torrent should not use DHT', function (t) { }, function (cb) { - client = new WebTorrent({ - tracker: false, - dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port } - }) + client = common.newClient(ipv6, dhtServer.address().port) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -36,7 +33,7 @@ test('private torrent should not use DHT', function (t) { }) client.on('torrent', function () { - if (!torrent.discovery.dht) { + if ((ipv6 && !torrent.discovery.dht6) || (!ipv6 && !torrent.discovery.dht)) { t.pass('dht is disabled for this torrent') cb(null) } @@ -54,10 +51,10 @@ test('private torrent should not use DHT', function (t) { }) }) -test('public torrent should use DHT', function (t) { +common.wrapTest(test, 'public torrent should use DHT', function (t, ipv6) { t.plan(4) - var dhtServer = new DHT({ bootstrap: false }) + var dhtServer = new DHT({ bootstrap: false, ipv6: ipv6 }) dhtServer.on('error', function (err) { t.fail(err) }) dhtServer.on('warning', function (err) { t.fail(err) }) @@ -70,10 +67,7 @@ test('public torrent should use DHT', function (t) { }, function (cb) { - client = new WebTorrent({ - tracker: false, - dht: { bootstrap: '127.0.0.1:' + dhtServer.address().port } - }) + client = common.newClient(ipv6, dhtServer.address().port) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -85,7 +79,7 @@ test('public torrent should use DHT', function (t) { }) client.on('torrent', function () { - if (!torrent.client.dht) { + if (!(ipv6 ? torrent.client.dht6 : torrent.client.dht)) { t.fail('dht server is null') } }) diff --git a/test/node/download-tracker-magnet.js b/test/node/download-tracker-magnet.js index 9ffa233c..9fdbaa90 100644 --- a/test/node/download-tracker-magnet.js +++ b/test/node/download-tracker-magnet.js @@ -47,7 +47,7 @@ function magnetDownloadTest (t, serverType) { parsedTorrent.announce = [ announceUrl ] magnetURI = 'magnet:?xt=urn:btih:' + parsedTorrent.infoHash + '&tr=' + encodeURIComponent(announceUrl) - client1 = new WebTorrent({ dht: false }) + client1 = new WebTorrent({ dht: false, dht6: false }) client1.on('error', function (err) { t.fail(err) }) client1.on('warning', function (err) { t.fail(err) }) @@ -75,7 +75,7 @@ function magnetDownloadTest (t, serverType) { }, function (cb) { - client2 = new WebTorrent({ dht: false }) + client2 = new WebTorrent({ dht: false, dht6: false }) client2.on('error', function (err) { t.fail(err) }) client2.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/download-tracker-torrent.js b/test/node/download-tracker-torrent.js index a2ba8e0a..63480b76 100644 --- a/test/node/download-tracker-torrent.js +++ b/test/node/download-tracker-torrent.js @@ -40,7 +40,7 @@ function torrentDownloadTest (t, serverType) { }, function (cb) { - client1 = new WebTorrent({ dht: false }) + client1 = new WebTorrent({ dht: false, dht6: false }) client1.on('error', function (err) { t.fail(err) }) client1.on('warning', function (err) { t.fail(err) }) @@ -70,7 +70,7 @@ function torrentDownloadTest (t, serverType) { }, function (cb) { - client2 = new WebTorrent({ dht: false }) + client2 = new WebTorrent({ dht: false, dht6: false }) client2.on('error', function (err) { t.fail(err) }) client2.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/download-webseed-magnet.js b/test/node/download-webseed-magnet.js index 2f172a04..f9d7616e 100644 --- a/test/node/download-webseed-magnet.js +++ b/test/node/download-webseed-magnet.js @@ -26,7 +26,7 @@ test('Download using webseed (via magnet uri)', function (t) { }, function (cb) { - client1 = new WebTorrent({ dht: false, tracker: false }) + client1 = new WebTorrent({ dht: false, dht6: false, tracker: false }) client1.on('error', function (err) { t.fail(err) }) client1.on('warning', function (err) { t.fail(err) }) @@ -61,7 +61,7 @@ test('Download using webseed (via magnet uri)', function (t) { }, function (cb) { - client2 = new WebTorrent({ dht: false, tracker: false }) + client2 = new WebTorrent({ dht: false, dht6: false, tracker: false }) client2.on('error', function (err) { t.fail(err) }) client2.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/download-webseed-torrent.js b/test/node/download-webseed-torrent.js index 39bec56c..c8a9bc40 100644 --- a/test/node/download-webseed-torrent.js +++ b/test/node/download-webseed-torrent.js @@ -36,7 +36,7 @@ test('Download using webseed (via .torrent file)', function (t) { 'http://localhost:' + httpServer.address().port + '/' + fixtures.leaves.parsedTorrent.name ] - client = new WebTorrent({ dht: false, tracker: false }) + client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) @@ -97,7 +97,7 @@ test('Disable webseeds', function (t) { 'http://localhost:' + httpServer.address().port + '/' + fixtures.leaves.parsedTorrent.name ] - client = new WebTorrent({ dht: false, tracker: false, webSeeds: false }) + client = new WebTorrent({ dht: false, dht6: false, tracker: false, webSeeds: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/extensions.js b/test/node/extensions.js index 9dccd1d3..561b6461 100644 --- a/test/node/extensions.js +++ b/test/node/extensions.js @@ -29,12 +29,12 @@ test('extension support', function (t) { } } - var client1 = new WebTorrent({ dht: false, tracker: false }) + var client1 = new WebTorrent({ dht: false, dht6: false, tracker: false }) client1.on('error', function (err) { t.fail(err) }) client1.on('warning', function (err) { t.fail(err) }) - var client2 = new WebTorrent({ dht: false, tracker: false }) + var client2 = new WebTorrent({ dht: false, dht6: false, tracker: false }) client2.on('error', function (err) { t.fail(err) }) client2.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/metadata.js b/test/node/metadata.js index 2b3fe567..5f35da19 100644 --- a/test/node/metadata.js +++ b/test/node/metadata.js @@ -5,8 +5,8 @@ var WebTorrent = require('../../') test('ut_metadata transfer', function (t) { t.plan(6) - var client1 = new WebTorrent({ dht: false, tracker: false }) - var client2 = new WebTorrent({ dht: false, tracker: false }) + var client1 = new WebTorrent({ dht: false, dht6: false, tracker: false }) + var client2 = new WebTorrent({ dht: false, dht6: false, tracker: false }) client1.on('error', function (err) { t.fail(err) }) client1.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/seed-stream.js b/test/node/seed-stream.js index eafc9e71..07d5124b 100644 --- a/test/node/seed-stream.js +++ b/test/node/seed-stream.js @@ -23,7 +23,7 @@ test('client.seed: stream', function (t) { var port = tracker.http.address().port announceUrl = 'http://localhost:' + port + '/announce' - seeder = new WebTorrent({ dht: false }) + seeder = new WebTorrent({ dht: false, dht6: false }) seeder.on('error', function (err) { t.fail(err) }) seeder.on('warning', function (err) { t.fail(err) }) @@ -45,7 +45,7 @@ test('client.seed: stream', function (t) { }, function (cb) { - client = new WebTorrent({ dht: false }) + client = new WebTorrent({ dht: false, dht6: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/node/server.js b/test/node/server.js index 564d7b1d..85b80420 100644 --- a/test/node/server.js +++ b/test/node/server.js @@ -7,7 +7,7 @@ var WebTorrent = require('../../') test('torrent.createServer: programmatic http server', function (t) { t.plan(9) - var client = new WebTorrent({ tracker: false, dht: false }) + var client = new WebTorrent({ tracker: false, dht: false, dht6: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) }) diff --git a/test/torrent-destroy.js b/test/torrent-destroy.js index ceae2050..c12ed9d2 100644 --- a/test/torrent-destroy.js +++ b/test/torrent-destroy.js @@ -5,7 +5,7 @@ var WebTorrent = require('../') test('torrent.destroy: destroy and remove torrent', function (t) { t.plan(5) - var client = new WebTorrent({ dht: false, tracker: false }) + var client = new WebTorrent({ dht: false, dht6: false, tracker: false }) client.on('error', function (err) { t.fail(err) }) client.on('warning', function (err) { t.fail(err) })