Skip to content

Commit 06fe102

Browse files
committed
REFACTOR: Async announce, disabled filter tests
(we haven't implmented a filter yet, but we will likely need one)
1 parent d463ba0 commit 06fe102

File tree

2 files changed

+215
-215
lines changed

2 files changed

+215
-215
lines changed

server.js

Lines changed: 45 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -191,64 +191,59 @@ class Server extends EventEmitter {
191191
}
192192
}
193193

194-
_onAnnounce (params, cb) {
194+
async _onAnnounce (params, cb) {
195195
const self = this
196196

197197
if (this._filter) {
198-
const onFiltered = err => {
199-
// Presence of `err` means that this announce request is disallowed
200-
if (err) return cb(err)
198+
const { allowed, info } = await this._filter(params.info_hash, params)
199+
if (!allowed) return info
200+
}
201201

202-
this.getOrCreateSwarm(params)
203-
.then(announce)
204-
}
202+
const swarm = await this.getOrCreateSwarm(params)
205203

206-
this._filter(params.info_hash, params, onFiltered)
207-
} else {
208-
this.getOrCreateSwarm(params)
209-
.then(announce)
210-
}
204+
if (!params.event || params.event === 'empty') params.event = 'update'
205+
206+
const _onAnnounce = async (err, response) => {
207+
if (err) return cb(err)
211208

212-
function announce (swarm) {
213-
if (!params.event || params.event === 'empty') params.event = 'update'
214-
215-
const _onAnnounce = (err, response) => {
216-
if (err) return cb(err)
217-
218-
if (!response.action) response.action = common.ACTIONS.ANNOUNCE
219-
if (!response.interval) response.interval = Math.ceil(self.intervalMs / 1000)
220-
221-
if (params.compact === 1) {
222-
const peers = response.peers
223-
224-
// Find IPv4 peers
225-
response.peers = string2compact(peers.filter(peer => {
226-
return common.IPV4_RE.test(peer.ip)
227-
}).map(peer => {
228-
return `${peer.ip}:${peer.port}`
229-
}))
230-
// Find IPv6 peers
231-
response.peers6 = string2compact(peers.filter(peer => {
232-
return common.IPV6_RE.test(peer.ip)
233-
}).map(peer => {
234-
return `[${peer.ip}]:${peer.port}`
235-
}))
236-
} else if (params.compact === 0) {
237-
// IPv6 peers are not separate for non-compact responses
238-
response.peers = response.peers.map(peer => {
239-
return {
240-
'peer id': common.hexToBinary(peer.peerId),
241-
ip: peer.ip,
242-
port: peer.port
243-
}
244-
})
245-
} // else, return full peer objects (used for websocket responses)
246-
247-
cb(null, response)
248-
}
209+
if (!response.action) response.action = common.ACTIONS.ANNOUNCE
210+
if (!response.interval) response.interval = Math.ceil(self.intervalMs / 1000)
211+
212+
if (params.compact === 1) {
213+
const peers = response.peers
214+
215+
// Find IPv4 peers
216+
const peers4 = peers
217+
.filter(peer => common.IPV4_RE.test(peer.ip))
218+
.map(peer => `${peer.ip}:${peer.port}`)
249219

250-
swarm.announce(params, _onAnnounce )
220+
response.peers = string2compact(peers4)
221+
222+
// Find IPv6 peers
223+
const peers6 = peers
224+
.filter(peer => common.IPV6_RE.test(peer.ip))
225+
.map(peer => `[${peer.ip}]:${peer.port}`)
226+
227+
response.peer6 = string2compact(peers6)
228+
}
229+
else if (params.compact === 0) {
230+
// IPv6 peers are not separate for non-compact responses
231+
const formatIPv6Peer =
232+
peer => ({
233+
'peer id': common.hexToBinary(peer.peerId),
234+
ip: peer.ip,
235+
port: peer.port
236+
})
237+
238+
response.peers =
239+
response.peers.map(formatIPv6Peer)
240+
241+
} // else, return full peer objects (used for websocket responses)
242+
243+
cb(null, response)
251244
}
245+
246+
swarm.announce(params, _onAnnounce )
252247
}
253248

254249
_onScrape (params, cb) {

0 commit comments

Comments
 (0)