@@ -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