mirror of
https://github.com/fluencelabs/js-libp2p-tcp
synced 2025-04-25 11:32:22 +00:00
support for tcp addrs with ipfs in the end as well
This commit is contained in:
parent
5c150db80b
commit
abd71d76e4
@ -41,6 +41,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ip-address": "^5.8.0",
|
"ip-address": "^5.8.0",
|
||||||
|
"lodash.contains": "^2.4.3",
|
||||||
"mafmt": "^2.1.0",
|
"mafmt": "^2.1.0",
|
||||||
"multiaddr": "^2.0.2",
|
"multiaddr": "^2.0.2",
|
||||||
"run-parallel": "^1.1.6"
|
"run-parallel": "^1.1.6"
|
||||||
@ -52,4 +53,4 @@
|
|||||||
"Richard Littauer <richard.littauer@gmail.com>",
|
"Richard Littauer <richard.littauer@gmail.com>",
|
||||||
"Stephen Whitmore <stephen.whitmore@gmail.com>"
|
"Stephen Whitmore <stephen.whitmore@gmail.com>"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
26
src/index.js
26
src/index.js
@ -7,9 +7,12 @@ const multiaddr = require('multiaddr')
|
|||||||
const Address6 = require('ip-address').Address6
|
const Address6 = require('ip-address').Address6
|
||||||
const mafmt = require('mafmt')
|
const mafmt = require('mafmt')
|
||||||
const parallel = require('run-parallel')
|
const parallel = require('run-parallel')
|
||||||
|
const contains = require('lodash.contains')
|
||||||
|
|
||||||
exports = module.exports = TCP
|
exports = module.exports = TCP
|
||||||
|
|
||||||
|
const IPFS_CODE = 421
|
||||||
|
|
||||||
function TCP () {
|
function TCP () {
|
||||||
if (!(this instanceof TCP)) {
|
if (!(this instanceof TCP)) {
|
||||||
return new TCP()
|
return new TCP()
|
||||||
@ -37,6 +40,16 @@ function TCP () {
|
|||||||
const freshMultiaddrs = []
|
const freshMultiaddrs = []
|
||||||
|
|
||||||
parallel(multiaddrs.map((m) => (cb) => {
|
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) => {
|
const listener = tcp.createServer((conn) => {
|
||||||
conn.getObservedAddrs = () => {
|
conn.getObservedAddrs = () => {
|
||||||
return [getMultiaddr(conn)]
|
return [getMultiaddr(conn)]
|
||||||
@ -49,11 +62,19 @@ function TCP () {
|
|||||||
if (m.toString().indexOf('ip4')) {
|
if (m.toString().indexOf('ip4')) {
|
||||||
m = m.decapsulate('tcp')
|
m = m.decapsulate('tcp')
|
||||||
m = m.encapsulate('/tcp/' + address.port)
|
m = m.encapsulate('/tcp/' + address.port)
|
||||||
|
if (ipfsHashId) {
|
||||||
|
m = m.encapsulate('/ipfs/' + ipfsHashId)
|
||||||
|
}
|
||||||
freshMultiaddrs.push(m)
|
freshMultiaddrs.push(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (address.family === 'IPv6') {
|
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()
|
cb()
|
||||||
@ -80,6 +101,9 @@ function TCP () {
|
|||||||
multiaddrs = [multiaddrs]
|
multiaddrs = [multiaddrs]
|
||||||
}
|
}
|
||||||
return multiaddrs.filter((ma) => {
|
return multiaddrs.filter((ma) => {
|
||||||
|
if (contains(ma.protoNames(), 'ipfs')) {
|
||||||
|
ma = ma.decapsulate('ipfs')
|
||||||
|
}
|
||||||
return mafmt.TCP.matches(ma)
|
return mafmt.TCP.matches(ma)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -37,12 +37,30 @@ describe('libp2p-tcp', function () {
|
|||||||
tcp.close(() => {
|
tcp.close(() => {
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
}, () => {
|
}, (err, freshMultiaddrs) => {
|
||||||
|
expect(err).to.not.exist
|
||||||
|
expect(mh).to.deep.equal(freshMultiaddrs[0])
|
||||||
const socket = net.connect({ host: '127.0.0.1', port: 9090 })
|
const socket = net.connect({ host: '127.0.0.1', port: 9090 })
|
||||||
socket.end()
|
socket.end()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('listen on addr with /ipfs/QmHASH', (done) => {
|
||||||
|
const mh = multiaddr('/ip4/127.0.0.1/tcp/14090/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw')
|
||||||
|
tcp.createListener(mh, (socket) => {
|
||||||
|
expect(socket).to.exist
|
||||||
|
socket.end()
|
||||||
|
tcp.close(() => {
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
}, (err, freshMultiaddrs) => {
|
||||||
|
expect(err).to.not.exist
|
||||||
|
expect(mh).to.deep.equal(freshMultiaddrs[0])
|
||||||
|
const socket = net.connect({ host: '127.0.0.1', port: 14090 })
|
||||||
|
socket.end()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it('dial', (done) => {
|
it('dial', (done) => {
|
||||||
const server = net.createServer((socket) => {
|
const server = net.createServer((socket) => {
|
||||||
expect(socket).to.exist
|
expect(socket).to.exist
|
||||||
@ -114,9 +132,10 @@ describe('libp2p-tcp', function () {
|
|||||||
const mh1 = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
const mh1 = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
||||||
const mh2 = multiaddr('/ip4/127.0.0.1/udp/9090')
|
const mh2 = multiaddr('/ip4/127.0.0.1/udp/9090')
|
||||||
const mh3 = multiaddr('/ip4/127.0.0.1/tcp/9090/http')
|
const mh3 = multiaddr('/ip4/127.0.0.1/tcp/9090/http')
|
||||||
|
const mh4 = multiaddr('/ip4/127.0.0.1/tcp/9090/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw')
|
||||||
|
|
||||||
const valid = tcp.filter([mh1, mh2, mh3])
|
const valid = tcp.filter([mh1, mh2, mh3, mh4])
|
||||||
expect(valid.length).to.equal(1)
|
expect(valid.length).to.equal(2)
|
||||||
expect(valid[0]).to.deep.equal(mh1)
|
expect(valid[0]).to.deep.equal(mh1)
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user