Skip to content

Commit c6bdd86

Browse files
authored
Merge pull request #76 from libp2p/feat/advanced-peer-book
fix: avoid deleting nodes from peerBook
2 parents 9f4ec2a + dee0340 commit c6bdd86

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@
4141
},
4242
"dependencies": {
4343
"libp2p-ping": "~0.3.2",
44-
"libp2p-swarm": "~0.28.0",
44+
"libp2p-swarm": "~0.29.0",
45+
"mafmt": "^2.1.8",
4546
"multiaddr": "^2.3.0",
46-
"peer-book": "~0.3.2",
47-
"peer-id": "~0.8.5",
48-
"peer-info": "~0.8.5"
47+
"peer-book": "~0.4.0",
48+
"peer-id": "~0.8.6",
49+
"peer-info": "~0.9.2"
4950
},
5051
"contributors": [
5152
"David Dias <[email protected]>",
@@ -54,4 +55,4 @@
5455
"greenkeeperio-bot <[email protected]>",
5556
"mayerwin <[email protected]>"
5657
]
57-
}
58+
}

src/index.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
const Swarm = require('libp2p-swarm')
44
const PeerId = require('peer-id')
55
const PeerInfo = require('peer-info')
6+
const mafmt = require('mafmt')
67
const PeerBook = require('peer-book')
78
const multiaddr = require('multiaddr')
89
const EventEmitter = require('events').EventEmitter
@@ -25,7 +26,7 @@ class Node extends EventEmitter {
2526
this.peerBook = _peerBook || new PeerBook()
2627
this.isOnline = false
2728

28-
this.swarm = new Swarm(this.peerInfo)
29+
this.swarm = new Swarm(this.peerInfo, this.peerBook)
2930

3031
// Attach stream multiplexers
3132
if (this.modules.connection.muxer) {
@@ -38,16 +39,15 @@ class Node extends EventEmitter {
3839
// If muxer exists, we can use Identify
3940
this.swarm.connection.reuse()
4041

41-
// Received incommind dial and muxer upgrade happened, reuse this
42-
// muxed connection
42+
// Received incommind dial and muxer upgrade happened,
43+
// reuse this muxed connection
4344
this.swarm.on('peer-mux-established', (peerInfo) => {
4445
this.emit('peer:connect', peerInfo)
4546
this.peerBook.put(peerInfo)
4647
})
4748

4849
this.swarm.on('peer-mux-closed', (peerInfo) => {
4950
this.emit('peer:disconnect', peerInfo)
50-
this.peerBook.removeByB58String(peerInfo.id.toB58String())
5151
})
5252
}
5353

@@ -91,7 +91,19 @@ class Node extends EventEmitter {
9191
let transports = this.modules.transport
9292

9393
transports = Array.isArray(transports) ? transports : [transports]
94-
const multiaddrs = this.peerInfo.multiaddrs
94+
95+
// so that we can have webrtc-star addrs without adding manually the id
96+
const maOld = []
97+
const maNew = []
98+
this.peerInfo.multiaddrs.forEach((ma) => {
99+
if (!mafmt.IPFS.matches(ma)) {
100+
maOld.push(ma)
101+
maNew.push(ma.encapsulate('/ipfs/' + this.peerInfo.id.toB58String()))
102+
}
103+
})
104+
this.peerInfo.multiaddrs.replace(maOld, maNew)
105+
106+
const multiaddrs = this.peerInfo.multiaddrs.toArray()
95107

96108
transports.forEach((transport) => {
97109
if (transport.filter(multiaddrs).length > 0) {
@@ -152,13 +164,19 @@ class Node extends EventEmitter {
152164

153165
dial (peer, protocol, callback) {
154166
assert(this.isOn(), OFFLINE_ERROR_MESSAGE)
155-
const peerInfo = this._getPeerInfo(peer)
156167

157168
if (typeof protocol === 'function') {
158169
callback = protocol
159170
protocol = undefined
160171
}
161172

173+
let peerInfo
174+
try {
175+
peerInfo = this._getPeerInfo(peer)
176+
} catch (err) {
177+
return callback(err)
178+
}
179+
162180
this.swarm.dial(peerInfo, protocol, (err, conn) => {
163181
if (err) {
164182
return callback(err)
@@ -172,7 +190,6 @@ class Node extends EventEmitter {
172190
assert(this.isOn(), OFFLINE_ERROR_MESSAGE)
173191
const peerInfo = this._getPeerInfo(peer)
174192

175-
this.peerBook.removeByB58String(peerInfo.id.toB58String())
176193
this.swarm.hangUp(peerInfo, callback)
177194
}
178195

@@ -198,7 +215,7 @@ class Node extends EventEmitter {
198215
} catch (err) {
199216
p = new PeerInfo(PeerId.createFromB58String(peerIdB58Str))
200217
}
201-
p.multiaddr.add(peer)
218+
p.multiaddrs.add(peer)
202219
} else if (PeerId.isPeerId(peer)) {
203220
const peerIdB58Str = peer.toB58String()
204221
try {

0 commit comments

Comments
 (0)