From 41a0d494ed75726f401eac3f5b7ee11f767e09c9 Mon Sep 17 00:00:00 2001 From: Michael Garvin Date: Thu, 10 May 2018 13:25:12 -0700 Subject: [PATCH] feat(bitswap.wantlist) add peer parameter --- src/cli/commands/bitswap/wantlist.js | 3 +- src/core/components/bitswap.js | 16 +++++++- src/http/api/resources/bitswap.js | 57 ++++++++++++++++------------ src/http/api/routes/bitswap.js | 4 +- src/http/api/routes/stats.js | 2 +- 5 files changed, 50 insertions(+), 32 deletions(-) diff --git a/src/cli/commands/bitswap/wantlist.js b/src/cli/commands/bitswap/wantlist.js index 63692a993a..8bd850710e 100644 --- a/src/cli/commands/bitswap/wantlist.js +++ b/src/cli/commands/bitswap/wantlist.js @@ -16,8 +16,7 @@ module.exports = { }, handler (argv) { - // TODO: handle argv.peer - argv.ipfs.bitswap.wantlist((err, res) => { + argv.ipfs.bitswap.wantlist(argv.peer, (err, res) => { if (err) { throw err } diff --git a/src/core/components/bitswap.js b/src/core/components/bitswap.js index c0bd43a202..b32b3eaf56 100644 --- a/src/core/components/bitswap.js +++ b/src/core/components/bitswap.js @@ -4,6 +4,7 @@ const OFFLINE_ERROR = require('../utils').OFFLINE_ERROR const promisify = require('promisify-es6') const setImmediate = require('async/setImmediate') const Big = require('big.js') +const PeerId = require('peer-id') function formatWantlist (list) { return Array.from(list).map((e) => e[1]) @@ -11,12 +12,23 @@ function formatWantlist (list) { module.exports = function bitswap (self) { return { - wantlist: promisify((callback) => { + wantlist: promisify((peerId, callback) => { + if (!callback) { + callback = peerId + peerId = undefined + } + if (!self.isOnline()) { return setImmediate(() => callback(new Error(OFFLINE_ERROR))) } - let list = self._bitswap.getWantlist() + let list + if (peerId) { + peerId = PeerId.createFromB58String(peerId) + list = self._bitswap.wantlistForPeer(peerId) + } else { + list = self._bitswap.getWantlist() + } list = formatWantlist(list) callback(null, list) }), diff --git a/src/http/api/resources/bitswap.js b/src/http/api/resources/bitswap.js index 3da9b1bf6e..648a354616 100644 --- a/src/http/api/resources/bitswap.js +++ b/src/http/api/resources/bitswap.js @@ -6,41 +6,48 @@ const parseKey = require('./block').parseKey exports = module.exports -exports.wantlist = (request, reply) => { - request.server.app.ipfs.bitswap.wantlist((err, list) => { - if (err) { +exports.wantlist = { + handler: (request, reply) => { + const peerId = request.query.arg + let list + try { + list = request.server.app.ipfs.bitswap.wantlist(peerId) + list = list.map((entry) => entry.cid.toBaseEncodedString()) + } catch (err) { return reply(boom.badRequest(err)) } - list = list.map((entry) => entry.cid.toBaseEncodedString()) + reply({ Keys: list }) - }) + } } -exports.stat = (request, reply) => { - const ipfs = request.server.app.ipfs +exports.stat = { + handler: (request, reply) => { + const ipfs = request.server.app.ipfs - ipfs.bitswap.stat((err, stats) => { - if (err) { - return reply({ - Message: err.toString(), - Code: 0 - }).code(500) - } + ipfs.bitswap.stat((err, stats) => { + if (err) { + return reply({ + Message: err.toString(), + Code: 0 + }).code(500) + } - reply({ - ProvideBufLen: stats.provideBufLen, - BlocksReceived: stats.blocksReceived, - Wantlist: stats.wantlist, - Peers: stats.peers, - DupBlksReceived: stats.dupBlksReceived, - DupDataReceived: stats.dupDataReceived, - DataReceived: stats.dataReceived, - BlocksSent: stats.blocksSent, - DataSent: stats.dataSent + reply({ + ProvideBufLen: stats.provideBufLen, + BlocksReceived: stats.blocksReceived, + Wantlist: stats.wantlist, + Peers: stats.peers, + DupBlksReceived: stats.dupBlksReceived, + DupDataReceived: stats.dupDataReceived, + DataReceived: stats.dataReceived, + BlocksSent: stats.blocksSent, + DataSent: stats.dataSent + }) }) - }) + } } exports.unwant = { diff --git a/src/http/api/routes/bitswap.js b/src/http/api/routes/bitswap.js index 23c75b9a86..04def2fb91 100644 --- a/src/http/api/routes/bitswap.js +++ b/src/http/api/routes/bitswap.js @@ -9,7 +9,7 @@ module.exports = (server) => { method: '*', path: '/api/v0/bitswap/wantlist', config: { - handler: resources.bitswap.wantlist + handler: resources.bitswap.wantlist.handler } }) @@ -17,7 +17,7 @@ module.exports = (server) => { method: '*', path: '/api/v0/bitswap/stat', config: { - handler: resources.bitswap.stat + handler: resources.bitswap.stat.handler } }) diff --git a/src/http/api/routes/stats.js b/src/http/api/routes/stats.js index 35ec768083..1fe0707c1b 100644 --- a/src/http/api/routes/stats.js +++ b/src/http/api/routes/stats.js @@ -9,7 +9,7 @@ module.exports = (server) => { method: '*', path: '/api/v0/stats/bitswap', config: { - handler: resources.stats.bitswap + handler: resources.stats.bitswap.handler } })