mirror of
https://github.com/fluencelabs/js-libp2p-tcp
synced 2025-06-13 21:21:40 +00:00
support for tcp addrs with ipfs in the end as well
This commit is contained in:
26
src/index.js
26
src/index.js
@ -7,9 +7,12 @@ const multiaddr = require('multiaddr')
|
||||
const Address6 = require('ip-address').Address6
|
||||
const mafmt = require('mafmt')
|
||||
const parallel = require('run-parallel')
|
||||
const contains = require('lodash.contains')
|
||||
|
||||
exports = module.exports = TCP
|
||||
|
||||
const IPFS_CODE = 421
|
||||
|
||||
function TCP () {
|
||||
if (!(this instanceof TCP)) {
|
||||
return new TCP()
|
||||
@ -37,6 +40,16 @@ function TCP () {
|
||||
const freshMultiaddrs = []
|
||||
|
||||
parallel(multiaddrs.map((m) => (cb) => {
|
||||
let ipfsHashId
|
||||
if (contains(m.protoNames(), 'ipfs')) {
|
||||
ipfsHashId = m.stringTuples().filter((tuple) => {
|
||||
if (tuple[0] === IPFS_CODE) {
|
||||
return true
|
||||
}
|
||||
})[0][1]
|
||||
m = m.decapsulate('ipfs')
|
||||
}
|
||||
|
||||
const listener = tcp.createServer((conn) => {
|
||||
conn.getObservedAddrs = () => {
|
||||
return [getMultiaddr(conn)]
|
||||
@ -49,11 +62,19 @@ function TCP () {
|
||||
if (m.toString().indexOf('ip4')) {
|
||||
m = m.decapsulate('tcp')
|
||||
m = m.encapsulate('/tcp/' + address.port)
|
||||
if (ipfsHashId) {
|
||||
m = m.encapsulate('/ipfs/' + ipfsHashId)
|
||||
}
|
||||
freshMultiaddrs.push(m)
|
||||
}
|
||||
|
||||
if (address.family === 'IPv6') {
|
||||
freshMultiaddrs.push(multiaddr('/ip6/' + address.address + '/tcp/' + address.port))
|
||||
let mh = multiaddr('/ip6/' + address.address + '/tcp/' + address.port)
|
||||
if (ipfsHashId) {
|
||||
mh = mh.encapsulate('/ipfs/' + ipfsHashId)
|
||||
}
|
||||
|
||||
freshMultiaddrs.push(mh)
|
||||
}
|
||||
|
||||
cb()
|
||||
@ -80,6 +101,9 @@ function TCP () {
|
||||
multiaddrs = [multiaddrs]
|
||||
}
|
||||
return multiaddrs.filter((ma) => {
|
||||
if (contains(ma.protoNames(), 'ipfs')) {
|
||||
ma = ma.decapsulate('ipfs')
|
||||
}
|
||||
return mafmt.TCP.matches(ma)
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user