diff --git a/src/cli/commands/bitswap/wantlist.js b/src/cli/commands/bitswap/wantlist.js index 8ad26a439a..01170782d7 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 9f3c7bfbab..bd59eb3b16 100644 --- a/src/core/components/bitswap.js +++ b/src/core/components/bitswap.js @@ -5,6 +5,7 @@ const promisify = require('promisify-es6') const setImmediate = require('async/setImmediate') const Big = require('big.js') const CID = require('cids') +const PeerId = require('peer-id') function formatWantlist (list) { return Array.from(list).map((e) => ({ '/': e[1].cid.toBaseEncodedString() })) @@ -12,14 +13,32 @@ 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) { + try { + peerId = PeerId.createFromB58String(peerId) + } catch (e) { + peerId = null + } + if (!peerId) { + return setImmediate(() => callback(new Error('Invalid peerId'))) + } + list = self._bitswap.wantlistForPeer(peerId) + } else { + list = self._bitswap.getWantlist() + } list = formatWantlist(list) - callback(null, { Keys: list }) + return setImmediate(() => callback(null, { Keys: list })) }), stat: promisify((callback) => { @@ -56,7 +75,7 @@ module.exports = function bitswap (self) { } return new CID(key) }) - callback(null, self._bitswap.unwant(keys)) + return setImmediate(() => callback(null, self._bitswap.unwant(keys))) }) } } diff --git a/src/http/api/resources/bitswap.js b/src/http/api/resources/bitswap.js index 3da9b1bf6e..1130aeb832 100644 --- a/src/http/api/resources/bitswap.js +++ b/src/http/api/resources/bitswap.js @@ -6,41 +6,44 @@ const parseKey = require('./block').parseKey exports = module.exports -exports.wantlist = (request, reply) => { - request.server.app.ipfs.bitswap.wantlist((err, list) => { - if (err) { - return reply(boom.badRequest(err)) - } - list = list.map((entry) => entry.cid.toBaseEncodedString()) - reply({ - Keys: list +exports.wantlist = { + handler: (request, reply) => { + const peerId = request.query.arg + let list + request.server.app.ipfs.bitswap.wantlist(peerId, (err, list) => { + if (err) { + return reply(boom.badRequest(err)) + } + reply(list) }) - }) + } } -exports.stat = (request, reply) => { - const ipfs = request.server.app.ipfs - - 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 +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) + } + + 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 } })