mirror of
https://github.com/fluencelabs/js-libp2p-tcp
synced 2025-07-03 06:41:53 +00:00
Compare commits
3 Commits
feat/async
...
fix/interf
Author | SHA1 | Date | |
---|---|---|---|
99f237bba1 | |||
6f04526083 | |||
d65f3ce228 |
@ -47,7 +47,7 @@
|
|||||||
"debug": "^4.1.1",
|
"debug": "^4.1.1",
|
||||||
"err-code": "^1.1.2",
|
"err-code": "^1.1.2",
|
||||||
"interface-connection": "~0.3.3",
|
"interface-connection": "~0.3.3",
|
||||||
"interface-transport": "~0.5.2",
|
"interface-transport": "~0.6.0",
|
||||||
"ip-address": "^6.1.0",
|
"ip-address": "^6.1.0",
|
||||||
"it-pipe": "^1.0.1",
|
"it-pipe": "^1.0.1",
|
||||||
"lodash.includes": "^4.3.0",
|
"lodash.includes": "^4.3.0",
|
||||||
|
@ -6,8 +6,8 @@ const TCP = require('.')
|
|||||||
|
|
||||||
// Legacy adapter to old transport & connection interface
|
// Legacy adapter to old transport & connection interface
|
||||||
class TcpAdapter extends Adapter {
|
class TcpAdapter extends Adapter {
|
||||||
constructor () {
|
constructor (options) {
|
||||||
super(new TCP())
|
super(new TCP(options))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
src/index.js
10
src/index.js
@ -8,6 +8,7 @@ const isFunction = require('lodash.isfunction')
|
|||||||
const errcode = require('err-code')
|
const errcode = require('err-code')
|
||||||
const debug = require('debug')
|
const debug = require('debug')
|
||||||
const log = debug('libp2p:tcp:dial')
|
const log = debug('libp2p:tcp:dial')
|
||||||
|
const assert = require('assert')
|
||||||
|
|
||||||
const Libp2pSocket = require('./socket')
|
const Libp2pSocket = require('./socket')
|
||||||
const createListener = require('./listener')
|
const createListener = require('./listener')
|
||||||
@ -16,12 +17,17 @@ const { AbortError } = require('interface-transport')
|
|||||||
function noop () {}
|
function noop () {}
|
||||||
|
|
||||||
class TCP {
|
class TCP {
|
||||||
|
constructor (options) {
|
||||||
|
assert(options && options.upgrader, 'An Upgrader must be provided')
|
||||||
|
this.upgrader = options.upgrader
|
||||||
|
}
|
||||||
|
|
||||||
async dial (ma, options) {
|
async dial (ma, options) {
|
||||||
const cOpts = ma.toOptions()
|
const cOpts = ma.toOptions()
|
||||||
log('Dialing %s:%s', cOpts.host, cOpts.port)
|
log('Dialing %s:%s', cOpts.host, cOpts.port)
|
||||||
|
|
||||||
const rawSocket = await this._connect(cOpts, options)
|
const rawSocket = await this._connect(cOpts, options)
|
||||||
return new Libp2pSocket(rawSocket, ma, options)
|
return this.upgrader.upgradeOutbound(new Libp2pSocket(rawSocket, ma, options))
|
||||||
}
|
}
|
||||||
|
|
||||||
_connect (cOpts, options = {}) {
|
_connect (cOpts, options = {}) {
|
||||||
@ -80,7 +86,7 @@ class TCP {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handler = handler || noop
|
handler = handler || noop
|
||||||
return createListener(handler)
|
return createListener(handler, this.upgrader)
|
||||||
}
|
}
|
||||||
|
|
||||||
filter (multiaddrs) {
|
filter (multiaddrs) {
|
||||||
|
@ -13,7 +13,7 @@ const Libp2pSocket = require('./socket')
|
|||||||
const getMultiaddr = require('./get-multiaddr')
|
const getMultiaddr = require('./get-multiaddr')
|
||||||
const c = require('./constants')
|
const c = require('./constants')
|
||||||
|
|
||||||
module.exports = (handler) => {
|
module.exports = (handler, upgrader) => {
|
||||||
const listener = new EventEmitter()
|
const listener = new EventEmitter()
|
||||||
|
|
||||||
const server = net.createServer((socket) => {
|
const server = net.createServer((socket) => {
|
||||||
@ -37,8 +37,9 @@ module.exports = (handler) => {
|
|||||||
const s = new Libp2pSocket(socket, addr)
|
const s = new Libp2pSocket(socket, addr)
|
||||||
trackSocket(server, socket)
|
trackSocket(server, socket)
|
||||||
|
|
||||||
handler && handler(s)
|
const conn = upgrader.upgradeInbound(s)
|
||||||
listener.emit('connection', s)
|
handler && handler(conn)
|
||||||
|
listener.emit('connection', conn)
|
||||||
})
|
})
|
||||||
|
|
||||||
server.on('listening', () => listener.emit('listening'))
|
server.on('listening', () => listener.emit('listening'))
|
||||||
|
@ -10,6 +10,8 @@ class Libp2pSocket {
|
|||||||
constructor (rawSocket, ma, opts = {}) {
|
constructor (rawSocket, ma, opts = {}) {
|
||||||
this._rawSocket = rawSocket
|
this._rawSocket = rawSocket
|
||||||
this._ma = ma
|
this._ma = ma
|
||||||
|
this.remoteAddr = ma
|
||||||
|
this.conn = rawSocket
|
||||||
|
|
||||||
this.sink = this._sink(opts)
|
this.sink = this._sink(opts)
|
||||||
this.source = opts.signal ? abortable(rawSocket, opts.signal) : rawSocket
|
this.source = opts.signal ? abortable(rawSocket, opts.signal) : rawSocket
|
||||||
|
@ -9,6 +9,7 @@ chai.use(dirtyChai)
|
|||||||
const TCP = require('../../src/adapter')
|
const TCP = require('../../src/adapter')
|
||||||
const multiaddr = require('multiaddr')
|
const multiaddr = require('multiaddr')
|
||||||
const Connection = require('interface-connection').Connection
|
const Connection = require('interface-connection').Connection
|
||||||
|
const upgrader = require('../utils/upgrader')
|
||||||
|
|
||||||
describe('Connection Wrap', () => {
|
describe('Connection Wrap', () => {
|
||||||
let tcp
|
let tcp
|
||||||
@ -16,7 +17,7 @@ describe('Connection Wrap', () => {
|
|||||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
||||||
|
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
tcp = new TCP()
|
tcp = new TCP({ upgrader })
|
||||||
listener = tcp.createListener((conn) => {
|
listener = tcp.createListener((conn) => {
|
||||||
pull(conn, conn)
|
pull(conn, conn)
|
||||||
})
|
})
|
||||||
|
@ -8,12 +8,13 @@ const expect = chai.expect
|
|||||||
chai.use(dirtyChai)
|
chai.use(dirtyChai)
|
||||||
const TCP = require('../../src/adapter')
|
const TCP = require('../../src/adapter')
|
||||||
const multiaddr = require('multiaddr')
|
const multiaddr = require('multiaddr')
|
||||||
|
const upgrader = require('../utils/upgrader')
|
||||||
|
|
||||||
describe('valid Connection', () => {
|
describe('valid Connection', () => {
|
||||||
let tcp
|
let tcp
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tcp = new TCP()
|
tcp = new TCP({ upgrader })
|
||||||
})
|
})
|
||||||
|
|
||||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
||||||
|
@ -9,13 +9,14 @@ chai.use(dirtyChai)
|
|||||||
const TCP = require('../../src/adapter')
|
const TCP = require('../../src/adapter')
|
||||||
const net = require('net')
|
const net = require('net')
|
||||||
const multiaddr = require('multiaddr')
|
const multiaddr = require('multiaddr')
|
||||||
|
const upgrader = require('../utils/upgrader')
|
||||||
const isCI = process.env.CI
|
const isCI = process.env.CI
|
||||||
|
|
||||||
describe('listen', () => {
|
describe('listen', () => {
|
||||||
let tcp
|
let tcp
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tcp = new TCP()
|
tcp = new TCP({ upgrader })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('close listener with connections, through timeout', (done) => {
|
it('close listener with connections, through timeout', (done) => {
|
||||||
@ -134,7 +135,7 @@ describe('dial', () => {
|
|||||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
||||||
|
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
tcp = new TCP()
|
tcp = new TCP({ upgrader })
|
||||||
listener = tcp.createListener((conn) => {
|
listener = tcp.createListener((conn) => {
|
||||||
pull(
|
pull(
|
||||||
conn,
|
conn,
|
||||||
|
@ -9,8 +9,8 @@ const TCP = require('../src')
|
|||||||
|
|
||||||
describe('interface-transport compliance', () => {
|
describe('interface-transport compliance', () => {
|
||||||
tests({
|
tests({
|
||||||
setup () {
|
setup (options) {
|
||||||
const tcp = new TCP()
|
const tcp = new TCP(options)
|
||||||
const addrs = [
|
const addrs = [
|
||||||
multiaddr('/ip4/127.0.0.1/tcp/9091'),
|
multiaddr('/ip4/127.0.0.1/tcp/9091'),
|
||||||
multiaddr('/ip4/127.0.0.1/tcp/9092'),
|
multiaddr('/ip4/127.0.0.1/tcp/9092'),
|
||||||
|
@ -7,12 +7,13 @@ const expect = chai.expect
|
|||||||
chai.use(dirtyChai)
|
chai.use(dirtyChai)
|
||||||
const TCP = require('../src')
|
const TCP = require('../src')
|
||||||
const multiaddr = require('multiaddr')
|
const multiaddr = require('multiaddr')
|
||||||
|
const upgrader = require('./utils/upgrader')
|
||||||
|
|
||||||
describe('valid Connection', () => {
|
describe('valid Connection', () => {
|
||||||
let tcp
|
let tcp
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tcp = new TCP()
|
tcp = new TCP({ upgrader })
|
||||||
})
|
})
|
||||||
|
|
||||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
||||||
|
@ -6,10 +6,11 @@ const dirtyChai = require('dirty-chai')
|
|||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
chai.use(dirtyChai)
|
chai.use(dirtyChai)
|
||||||
const TCP = require('../src')
|
const TCP = require('../src')
|
||||||
|
const upgrader = require('./utils/upgrader')
|
||||||
|
|
||||||
describe('Constructor', () => {
|
describe('Constructor', () => {
|
||||||
it('create an instance', () => {
|
it('create an instance', () => {
|
||||||
const tcp = new TCP()
|
const tcp = new TCP({ upgrader })
|
||||||
expect(tcp).to.exist()
|
expect(tcp).to.exist()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -7,6 +7,7 @@ const expect = chai.expect
|
|||||||
chai.use(dirtyChai)
|
chai.use(dirtyChai)
|
||||||
const TCP = require('../src')
|
const TCP = require('../src')
|
||||||
const multiaddr = require('multiaddr')
|
const multiaddr = require('multiaddr')
|
||||||
|
const upgrader = require('./utils/upgrader')
|
||||||
|
|
||||||
describe('filter addrs', () => {
|
describe('filter addrs', () => {
|
||||||
const base = '/ip4/127.0.0.1'
|
const base = '/ip4/127.0.0.1'
|
||||||
@ -15,7 +16,7 @@ describe('filter addrs', () => {
|
|||||||
let tcp
|
let tcp
|
||||||
|
|
||||||
before(() => {
|
before(() => {
|
||||||
tcp = new TCP()
|
tcp = new TCP({ upgrader })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('filter valid addrs for this transport', () => {
|
it('filter valid addrs for this transport', () => {
|
||||||
|
@ -12,12 +12,13 @@ const multiaddr = require('multiaddr')
|
|||||||
const pipe = require('it-pipe')
|
const pipe = require('it-pipe')
|
||||||
const { collect, map } = require('streaming-iterables')
|
const { collect, map } = require('streaming-iterables')
|
||||||
const isCI = process.env.CI
|
const isCI = process.env.CI
|
||||||
|
const upgrader = require('./utils/upgrader')
|
||||||
|
|
||||||
describe('listen', () => {
|
describe('listen', () => {
|
||||||
let tcp
|
let tcp
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
tcp = new TCP()
|
tcp = new TCP({ upgrader })
|
||||||
})
|
})
|
||||||
|
|
||||||
it('close listener with connections, through timeout', async () => {
|
it('close listener with connections, through timeout', async () => {
|
||||||
@ -134,7 +135,7 @@ describe('dial', () => {
|
|||||||
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
const ma = multiaddr('/ip4/127.0.0.1/tcp/9090')
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
tcp = new TCP()
|
tcp = new TCP({ upgrader })
|
||||||
listener = tcp.createListener((conn) => {
|
listener = tcp.createListener((conn) => {
|
||||||
pipe(
|
pipe(
|
||||||
conn,
|
conn,
|
||||||
|
6
test/utils/upgrader.js
Normal file
6
test/utils/upgrader.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
upgradeOutbound: (conn) => conn,
|
||||||
|
upgradeInbound: (conn) => conn
|
||||||
|
}
|
Reference in New Issue
Block a user