From cb71de23139b89bfbaad3613a200e43d3019aec7 Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Tue, 26 Jul 2016 20:20:01 -0700 Subject: [PATCH] Set peer ID to start with "-WD-" To distinguish WebTorrent Desktop (WD) from WebTorrent in the browser (WW). See the spec: http://www.bittorrent.org/beps/bep_0020.html https://wiki.theory.org/BitTorrentSpecification --- package.json | 1 + src/renderer/webtorrent.js | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 2382f8c4..5b655ea5 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "drag-drop": "^2.11.0", "electron-prebuilt": "1.3.0", "fs-extra": "^0.30.0", + "hat": "0.0.3", "iso-639-1": "^1.2.1", "languagedetect": "^1.1.1", "musicmetadata": "^2.0.2", diff --git a/src/renderer/webtorrent.js b/src/renderer/webtorrent.js index 228081f8..ff472fcf 100644 --- a/src/renderer/webtorrent.js +++ b/src/renderer/webtorrent.js @@ -2,14 +2,16 @@ // process from the main window. console.time('init') -var WebTorrent = require('webtorrent') -var defaultAnnounceList = require('create-torrent').announceList var deepEqual = require('deep-equal') +var defaultAnnounceList = require('create-torrent').announceList var electron = require('electron') var fs = require('fs-extra') +var hat = require('hat') var musicmetadata = require('musicmetadata') var networkAddress = require('network-address') var path = require('path') +var WebTorrent = require('webtorrent') +var zeroFill = require('zero-fill') var crashReporter = require('../crash-reporter') var config = require('../config') @@ -26,9 +28,36 @@ global.WEBTORRENT_ANNOUNCE = defaultAnnounceList .map((arr) => arr[0]) .filter((url) => url.indexOf('wss://') === 0 || url.indexOf('ws://') === 0) +/** + * WebTorrent version. + */ +var VERSION = require('../../package.json').version + +/** + * Version number in Azureus-style. Generated from major and minor semver version. + * For example: + * '0.16.1' -> '0016' + * '1.2.5' -> '0102' + */ +var VERSION_STR = VERSION.match(/([0-9]+)/g) + .slice(0, 2) + .map(function (v) { return zeroFill(2, v) }) + .join('') + +/** + * Version prefix string (used in peer ID). WebTorrent uses the Azureus-style + * encoding: '-', two characters for client id ('WW'), four ascii digits for version + * number, '-', followed by random numbers. + * For example: + * '-WW0102-'... + */ +var VERSION_PREFIX = '-WD' + VERSION_STR + '-' + // Connect to the WebTorrent and BitTorrent networks. WebTorrent Desktop is a hybrid // client, as explained here: https://webtorrent.io/faq -var client = window.client = new WebTorrent() +var client = window.client = new WebTorrent({ + peerId: Buffer.from(VERSION_PREFIX + hat(48)) +}) // WebTorrent-to-HTTP streaming sever var server = null