Skip to content
This repository was archived by the owner on Apr 24, 2023. It is now read-only.

Commit bb7f7fc

Browse files
chore: apply suggestions from code review
Co-Authored-By: Jacob Heun <[email protected]>
1 parent 310730b commit bb7f7fc

File tree

8 files changed

+65
-66
lines changed

8 files changed

+65
-66
lines changed

.aegir.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,19 @@ const mockUpgrader = {
1212
upgradeOutbound: maConn => maConn
1313
}
1414

15-
function boot (done) {
15+
function boot () {
1616
const wd = new WebRTCDirect({ upgrader: mockUpgrader })
17+
1718
listener = wd.createListener((conn) => pipe(conn, conn))
1819
listener.on('listening', () => {
19-
console.log('gulp listener started on:', ma.toString())
20+
console.log('listener started on:', ma.toString())
2021
})
21-
listener.listen(ma).then(() => done()).catch(done)
2222
listener.on('error', console.error)
23+
return listener.listen(ma)
2324
}
2425

25-
function shutdown (done) {
26-
listener.close().then(done).catch(done)
26+
function shutdown () {
27+
return listener.close()
2728
}
2829

2930
module.exports = {

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ stages:
77

88
node_js:
99
- '10'
10+
- '12'
1011

1112
os:
1213
- linux

gulpfile.js

Lines changed: 0 additions & 31 deletions
This file was deleted.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
"aegir": "^20.3.1",
4747
"chai": "^4.2.0",
4848
"dirty-chai": "^2.0.1",
49-
"gulp": "^4.0.2",
5049
"multiaddr": "^7.1.0",
5150
"webrtcsupport": "^2.2.0"
5251
},

src/index.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
const assert = require('debug')
44
const debug = require('debug')
55
const log = debug('libp2p:webrtcdirect')
6+
log.error = debug('libp2p:webrtcdirect:error')
67
const errcode = require('err-code')
78

89
const wrtc = require('wrtc')
@@ -63,10 +64,10 @@ class WebRTCDirect {
6364
}
6465

6566
options = {
66-
...options,
6767
initiator: true,
6868
trickle: false,
69-
wrtc: isNode ? wrtc : undefined
69+
wrtc: isNode ? wrtc : undefined,
70+
...options
7071
}
7172

7273
return new Promise((resolve, reject) => {
@@ -80,7 +81,10 @@ class WebRTCDirect {
8081

8182
const onError = (err) => {
8283
if (!connected) {
83-
err.message = `connection error ${cOpts.host}:${cOpts.port}: ${err.message}`
84+
const msg = `connection error ${cOpts.host}:${cOpts.port}: ${err.message}`
85+
86+
log.error(msg)
87+
err.message = msg
8488
done(err)
8589
}
8690
}
@@ -100,7 +104,7 @@ class WebRTCDirect {
100104
}
101105

102106
const onAbort = () => {
103-
log('connection aborted %s:%s', cOpts.host, cOpts.port)
107+
log.error('connection aborted %s:%s', cOpts.host, cOpts.port)
104108
channel.destroy()
105109
done(new AbortError())
106110
}

src/listener.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
const http = require('http')
44
const EventEmitter = require('events')
5-
const log = require('debug')('libp2p:libp2p:webrtcdirect:listener')
5+
const log = require('debug')('libp2p:webrtcdirect:listener')
66

77
const isNode = require('detect-node')
88
const wrtc = require('wrtc')
@@ -19,7 +19,7 @@ module.exports = ({ handler, upgrader }, options = {}) => {
1919
let maSelf
2020

2121
// Keep track of open connections to destroy in case of timeout
22-
server.__connections = []
22+
listener.__connections = []
2323

2424
server.on('request', async (req, res) => {
2525
res.setHeader('Content-Type', 'text/plain')
@@ -31,22 +31,19 @@ module.exports = ({ handler, upgrader }, options = {}) => {
3131
const incSignal = JSON.parse(incSignalBuf.toString())
3232

3333
options = {
34-
...options,
35-
trickle: false
36-
}
37-
38-
if (isNode) {
39-
options.wrtc = wrtc
34+
trickle: false,
35+
wrtc: isNode ? wrtc : undefined,
36+
...options
4037
}
4138

4239
const channel = new SimplePeer(options)
43-
const maConn = toConnection(channel)
40+
const maConn = toConnection(channel, listener.__connections)
4441
log('new inbound connection %s', maConn.remoteAddr)
4542

4643
const conn = await upgrader.upgradeInbound(maConn)
4744
log('inbound connection %s upgraded', maConn.remoteAddr)
4845

49-
trackConn(server, maConn)
46+
trackConn(listener, maConn)
5047

5148
channel.on('connect', () => {
5249
listener.emit('connection', conn)
@@ -67,7 +64,7 @@ module.exports = ({ handler, upgrader }, options = {}) => {
6764

6865
listener.listen = (ma) => {
6966
maSelf = ma
70-
const lOpts = ma.decapsulate('/p2p-webrtc-direct').toOptions()
67+
const lOpts = ma.toOptions()
7168

7269
return new Promise((resolve, reject) => {
7370
server.on('listening', (err) => {
@@ -90,7 +87,7 @@ module.exports = ({ handler, upgrader }, options = {}) => {
9087
}
9188

9289
return new Promise((resolve, reject) => {
93-
server.__connections.forEach(maConn => maConn.close())
90+
listener.__connections.forEach(maConn => maConn.close())
9491
server.close((err) => err ? reject(err) : resolve())
9592
})
9693
}
@@ -102,6 +99,12 @@ module.exports = ({ handler, upgrader }, options = {}) => {
10299
return listener
103100
}
104101

105-
function trackConn (server, maConn) {
106-
server.__connections.push(maConn)
102+
function trackConn (listener, maConn) {
103+
listener.__connections.push(maConn)
104+
105+
const untrackConn = () => {
106+
listener.__connections = listener.__connections.filter(c => c !== maConn)
107+
}
108+
109+
maConn.conn.once('close', untrackConn)
107110
}

src/socket-to-conn.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ const { CLOSE_TIMEOUT } = require('./constants')
77
const toMultiaddr = require('libp2p-utils/src/ip-port-to-multiaddr')
88

99
const debug = require('debug')
10-
const log = debug('libp2p:libp2p:webrtcdirect:socket')
11-
log.error = debug('libp2p:libp2p:webrtcdirect:socket:error')
10+
const log = debug('libp2p:webrtcdirect:socket')
11+
log.error = debug('libp2p:webrtcdirect:socket:error')
1212

1313
// Convert a socket into a MultiaddrConnection
1414
// https://github.com/libp2p/interface-transport#multiaddrconnection
@@ -74,15 +74,14 @@ module.exports = (socket, options = {}) => {
7474
}, CLOSE_TIMEOUT)
7575

7676
socket.once('close', () => {
77-
clearTimeout(timeout)
78-
maConn.timeline.close = Date.now()
7977
resolve()
8078
})
8179

82-
socket.end(err => {
83-
if (err) return reject(err)
80+
socket.end((err) => {
81+
clearTimeout(timeout)
82+
8483
maConn.timeline.close = Date.now()
85-
resolve()
84+
if (err) return reject(err)
8685
})
8786
})
8887
}

test/listen.js

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ const chai = require('chai')
66
const dirtyChai = require('dirty-chai')
77
const expect = chai.expect
88
chai.use(dirtyChai)
9+
910
const multiaddr = require('multiaddr')
11+
const pipe = require('it-pipe')
12+
1013
const WebRTCDirect = require('../src')
1114

1215
const mockUpgrader = {
@@ -57,10 +60,6 @@ describe('listen', () => {
5760
// TODO
5861
})
5962

60-
it.skip('close listener with connections, through timeout', (done) => {
61-
// TODO
62-
})
63-
6463
it.skip('listen on IPv6 addr', (done) => {
6564
// TODO IPv6 not supported yet
6665
})
@@ -75,4 +74,28 @@ describe('listen', () => {
7574

7675
await listener.close()
7776
})
77+
78+
it('should untrack conn after being closed', async function () {
79+
this.timeout(20e3)
80+
81+
const ma1 = multiaddr('/ip4/127.0.0.1/tcp/12346/http/p2p-webrtc-direct')
82+
83+
const wd1 = new WebRTCDirect({ upgrader: mockUpgrader })
84+
const listener1 = wd1.createListener((conn) => pipe(conn, conn))
85+
86+
await listener1.listen(ma1)
87+
expect(listener1.__connections).to.have.lengthOf(0)
88+
89+
const conn = await wd.dial(ma1)
90+
expect(listener1.__connections).to.have.lengthOf(1)
91+
92+
await conn.close()
93+
94+
// wait for listener to know of the disconnect
95+
await new Promise((resolve) => {
96+
setTimeout(resolve, 1000)
97+
})
98+
99+
expect(listener1.__connections).to.have.lengthOf(0)
100+
})
78101
})

0 commit comments

Comments
 (0)