this.dialByMultiaddr = (maddr, protocol, callback) => { if (typeof protocol === 'function') { callback = protocol protocol = undefined } if (!isOnline) { return callback(new Error(OFFLINE_ERROR_MESSAGE)) } if (typeof maddr === 'string') { maddr = multiaddr(maddr) } if (!mafmt.IPFS.matches(maddr.toString())) { return callback(new Error('multiaddr not valid')) } const ipfsIdB58String = maddr.stringTuples().filter((tuple) => { if (tuple[0] === IPFS_CODE) { return true } })[0][1] let peer try { peer = this.peerBook.getByB58String(ipfsIdB58String) } catch (err) { peer = new PeerInfo(PeerId.createFromB58String(ipfsIdB58String)) } peer.multiaddr.add(maddr) this.dialByPeerInfo(peer, protocol, callback) }
this.hangUpByMultiaddr = (maddr, callback) => { if (!isOnline) { return callback(new Error(OFFLINE_ERROR_MESSAGE)) } if (typeof maddr === 'string') { maddr = multiaddr(maddr) } if (!mafmt.IPFS.matches(maddr.toString())) { return callback(new Error('multiaddr not valid')) } const ipfsIdB58String = maddr.stringTuples().filter((tuple) => { if (tuple[0] === IPFS_CODE) { return true } })[0][1] try { const pi = this.peerBook.getByB58String(ipfsIdB58String) this.hangUpByPeerInfo(pi, callback) } catch (err) { // already disconnected callback() } }