diff --git a/package.json b/package.json index bcdbebe..655289b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "debug": "^4.1.1", "err-code": "^1.1.2", "interface-connection": "~0.3.3", - "interface-transport": "~0.5.2", + "interface-transport": "~0.6.0", "ip-address": "^6.1.0", "it-pipe": "^1.0.1", "lodash.includes": "^4.3.0", diff --git a/src/index.js b/src/index.js index 000ac4d..d51e0dd 100644 --- a/src/index.js +++ b/src/index.js @@ -8,6 +8,7 @@ const isFunction = require('lodash.isfunction') const errcode = require('err-code') const debug = require('debug') const log = debug('libp2p:tcp:dial') +const assert = require('assert') const Libp2pSocket = require('./socket') const createListener = require('./listener') @@ -16,12 +17,17 @@ const { AbortError } = require('interface-transport') function noop () {} class TCP { + constructor(options) { + assert(options.upgrader, 'An Upgrader must be provided') + this.upgrader = options.upgrader + } + async dial (ma, options) { const cOpts = ma.toOptions() log('Dialing %s:%s', cOpts.host, cOpts.port) 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 = {}) { @@ -80,7 +86,7 @@ class TCP { } handler = handler || noop - return createListener(handler) + return createListener(handler, this.upgrader) } filter (multiaddrs) { diff --git a/src/listener.js b/src/listener.js index 604b55d..5a6d122 100644 --- a/src/listener.js +++ b/src/listener.js @@ -13,7 +13,7 @@ const Libp2pSocket = require('./socket') const getMultiaddr = require('./get-multiaddr') const c = require('./constants') -module.exports = (handler) => { +module.exports = (handler, upgrader) => { const listener = new EventEmitter() const server = net.createServer((socket) => { @@ -37,8 +37,9 @@ module.exports = (handler) => { const s = new Libp2pSocket(socket, addr) trackSocket(server, socket) - handler && handler(s) - listener.emit('connection', s) + const conn = upgrader.upgradeInbound(s) + handler && handler(conn) + listener.emit('connection', conn) }) server.on('listening', () => listener.emit('listening')) diff --git a/src/socket.js b/src/socket.js index 19a4128..3c9fd34 100644 --- a/src/socket.js +++ b/src/socket.js @@ -10,6 +10,8 @@ class Libp2pSocket { constructor (rawSocket, ma, opts = {}) { this._rawSocket = rawSocket this._ma = ma + this.remoteAddr = ma + this.conn = rawSocket this.sink = this._sink(opts) this.source = opts.signal ? abortable(rawSocket, opts.signal) : rawSocket diff --git a/test/compliance.spec.js b/test/compliance.spec.js index 11fd244..0fffb4a 100644 --- a/test/compliance.spec.js +++ b/test/compliance.spec.js @@ -9,8 +9,8 @@ const TCP = require('../src') describe('interface-transport compliance', () => { tests({ - setup () { - const tcp = new TCP() + setup (options) { + const tcp = new TCP(options) const addrs = [ multiaddr('/ip4/127.0.0.1/tcp/9091'), multiaddr('/ip4/127.0.0.1/tcp/9092'),