js-libp2p-tcp/src/index.js

69 lines
1.4 KiB
JavaScript
Raw Normal View History

2016-05-09 11:14:40 +02:00
'use strict'
2016-08-05 14:22:18 +02:00
const net = require('net')
const toPull = require('stream-to-pull-stream')
2016-03-14 16:57:54 +00:00
const mafmt = require('mafmt')
const contains = require('lodash.contains')
2016-08-05 14:22:18 +02:00
const isFunction = require('lodash.isfunction')
const Connection = require('interface-connection').Connection
2016-08-05 14:22:18 +02:00
const debug = require('debug')
const log = debug('libp2p:tcp:dial')
2015-09-15 19:08:19 +01:00
2016-08-05 14:22:18 +02:00
const createListener = require('./listener')
2016-08-05 14:22:18 +02:00
module.exports = class TCP {
dial (ma, options, cb) {
if (isFunction(options)) {
cb = options
options = {}
}
2016-08-05 14:22:18 +02:00
if (!cb) {
cb = () => {}
}
2016-08-05 14:22:18 +02:00
const cOpts = ma.toOptions()
log('Connecting to %s %s', cOpts.port, cOpts.host)
const rawSocket = net.connect(cOpts, cb)
rawSocket.once('timeout', () => {
log('timeout')
rawSocket.emit('error', new Error('Timeout'))
})
const socket = toPull.duplex(rawSocket)
const conn = new Connection(socket)
conn.getObservedAddrs = (cb) => {
return cb(null, [ma])
}
return conn
}
2016-08-05 14:22:18 +02:00
createListener (options, handler) {
if (isFunction(options)) {
handler = options
options = {}
}
handler = handler || (() => {})
2016-08-05 14:22:18 +02:00
return createListener(handler)
}
2016-03-14 16:57:54 +00:00
2016-08-05 14:22:18 +02:00
filter (multiaddrs) {
2016-03-14 16:57:54 +00:00
if (!Array.isArray(multiaddrs)) {
multiaddrs = [multiaddrs]
}
return multiaddrs.filter((ma) => {
if (contains(ma.protoNames(), 'ipfs')) {
ma = ma.decapsulate('ipfs')
}
2016-03-14 16:57:54 +00:00
return mafmt.TCP.matches(ma)
})
}
2015-09-15 19:08:19 +01:00
}