From a9855a0b4223f8df2a98be07436f8095b014fa26 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 20 Jul 2015 14:42:47 -0700 Subject: [PATCH] fix multiaddr explosion --- src/identify/index.js | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/identify/index.js b/src/identify/index.js index fcb25e83..5653f11e 100644 --- a/src/identify/index.js +++ b/src/identify/index.js @@ -25,7 +25,6 @@ function Identify (swarm, peerSelf) { var ps = self.createProtoStream() ps.on('identify', function (msg) { - // console.log('RECEIVED PROTOBUF - ', msg) updateSelf(peerSelf, msg.observedAddr) var peerId = Id.createFromPubKey(msg.publicKey) @@ -113,14 +112,31 @@ function getMultiaddr (socket) { function updateSelf (peerSelf, observedAddr) { var omh = multiaddr(observedAddr) - var isIn = false - peerSelf.multiaddrs.forEach(function (mh) { - if (mh.toString() === omh.toString()) { - isIn = true - } - }) - if (!isIn) { - peerSelf.multiaddrs.push(omh) + if (!peerSelf.previousObservedAddrs) { + peerSelf.previousObservedAddrs = [] + } + + for (var i = 0; i < peerSelf.previousObservedAddrs.length; i++) { + if (peerSelf.previousObservedAddrs[i].toString() === omh.toString()) { + peerSelf.previousObserveredAddrs.splice(i, 1) + addToSelf() + return + } + } + + peerSelf.previousObservedAddrs.push(observedAddr) + + function addToSelf () { + var isIn = false + peerSelf.multiaddrs.forEach(function (mh) { + if (mh.toString() === omh.toString()) { + isIn = true + } + }) + + if (!isIn) { + peerSelf.multiaddrs.push(omh) + } } }