From 92ab67a715065716710aad59e3a9525589d1a426 Mon Sep 17 00:00:00 2001 From: Cas <6506529+ThaUnknown@users.noreply.github.com> Date: Sun, 18 Dec 2022 19:07:21 +0100 Subject: [PATCH] perf: drop rusha, buffer (#79) [skip ci] --- index.js | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/index.js b/index.js index c38731c..c00c7d9 100644 --- a/index.js +++ b/index.js @@ -3,7 +3,7 @@ import { EventEmitter } from 'events' import bencode from 'bencode' import BitField from 'bitfield' import Debug from 'debug' -import sha1 from 'simple-sha1' +import { hash, arr2text, concat } from 'uint8-util' const debug = Debug('ut_metadata') @@ -29,7 +29,7 @@ export default metadata => { // malicious peer can't make it grow to fill all memory. this._bitfield = new BitField(0, { grow: BITFIELD_GROW }) - if (Buffer.isBuffer(metadata)) { + if (ArrayBuffer.isView(metadata)) { this.setMetadata(metadata) } } @@ -62,7 +62,7 @@ export default metadata => { let dict let trailer try { - const str = buf.toString() + const str = arr2text(buf) const trailerIndex = str.indexOf('ee') + 2 dict = bencode.decode(str.substring(0, trailerIndex)) trailer = buf.slice(trailerIndex) @@ -112,7 +112,7 @@ export default metadata => { this._fetching = false } - setMetadata (metadata) { + async setMetadata (metadata) { if (this._metadataComplete) return true debug('set metadata') @@ -125,7 +125,7 @@ export default metadata => { } catch (err) {} // check hash - if (this._infoHash && this._infoHash !== sha1.sync(metadata)) { + if (this._infoHash && this._infoHash !== await hash(metadata, 'hex')) { return false } @@ -145,8 +145,8 @@ export default metadata => { _send (dict, trailer) { let buf = bencode.encode(dict) - if (Buffer.isBuffer(trailer)) { - buf = Buffer.concat([buf, trailer]) + if (ArrayBuffer.isView(trailer)) { + buf = concat([buf, trailer]) } this._wire.extended('ut_metadata', buf) } @@ -185,7 +185,7 @@ export default metadata => { if (buf.length > PIECE_LENGTH || !this._fetching) { return } - buf.copy(this.metadata, piece * PIECE_LENGTH) + this.metadata.set(buf, piece * PIECE_LENGTH) this._bitfield.set(piece) this._checkDone() } @@ -203,13 +203,13 @@ export default metadata => { _requestPieces () { if (!this._fetching) return - this.metadata = Buffer.alloc(this._metadataSize) + this.metadata = new Uint8Array(this._metadataSize) for (let piece = 0; piece < this._numPieces; piece++) { this._request(piece) } } - _checkDone () { + async _checkDone () { let done = true for (let piece = 0; piece < this._numPieces; piece++) { if (!this._bitfield.get(piece)) { @@ -220,7 +220,7 @@ export default metadata => { if (!done) return // attempt to set metadata -- may fail sha1 check - const success = this.setMetadata(this.metadata) + const success = await this.setMetadata(this.metadata) if (!success) { this._failedMetadata() diff --git a/package.json b/package.json index 924ca80..20905f9 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "bencode": "^3.0.0", "bitfield": "^4.0.0", "debug": "^4.2.0", - "simple-sha1": "^3.0.1" + "uint8-util": "^2.1.3" }, "devDependencies": { "@webtorrent/semantic-release-config": "1.0.8",