@@ -3,15 +3,15 @@ module.exports = HTTPTracker
33var bencode = require ( 'bencode' )
44var compact2string = require ( 'compact2string' )
55var debug = require ( 'debug' ) ( 'bittorrent-tracker:http-tracker' )
6- var EventEmitter = require ( 'events' ) . EventEmitter
76var get = require ( 'simple-get' )
87var inherits = require ( 'inherits' )
98
109var common = require ( '../common' )
10+ var Tracker = require ( './tracker' )
1111
1212var HTTP_SCRAPE_SUPPORT = / \/ ( a n n o u n c e ) [ ^ \/ ] * $ /
1313
14- inherits ( HTTPTracker , EventEmitter )
14+ inherits ( HTTPTracker , Tracker )
1515
1616/**
1717 * HTTP torrent tracker client (for an individual tracker)
@@ -22,23 +22,15 @@ inherits(HTTPTracker, EventEmitter)
2222 */
2323function HTTPTracker ( client , announceUrl , opts ) {
2424 var self = this
25- EventEmitter . call ( self )
25+ Tracker . call ( self , client , announceUrl )
2626 debug ( 'new http tracker %s' , announceUrl )
2727
28- self . client = client
29- self . destroyed = false
30-
31- self . _opts = opts
32- self . _announceUrl = announceUrl
33- self . _intervalMs = self . client . _intervalMs // use client interval initially
34- self . _interval = null
35-
3628 // Determine scrape url (if http tracker supports it)
37- self . _scrapeUrl = null
29+ self . scrapeUrl = null
3830 var m
39- if ( ( m = self . _announceUrl . match ( HTTP_SCRAPE_SUPPORT ) ) ) {
40- self . _scrapeUrl = self . _announceUrl . slice ( 0 , m . index ) + '/scrape' +
41- self . _announceUrl . slice ( m . index + 9 )
31+ if ( ( m = self . announceUrl . match ( HTTP_SCRAPE_SUPPORT ) ) ) {
32+ self . scrapeUrl = self . announceUrl . slice ( 0 , m . index ) + '/scrape' +
33+ self . announceUrl . slice ( m . index + 9 )
4234 }
4335}
4436
@@ -58,15 +50,15 @@ HTTPTracker.prototype.announce = function (opts) {
5850 }
5951 if ( self . _trackerId ) params . trackerid = self . _trackerId
6052
61- self . _request ( self . _announceUrl , params , self . _onAnnounceResponse . bind ( self ) )
53+ self . _request ( self . announceUrl , params , self . _onAnnounceResponse . bind ( self ) )
6254}
6355
6456HTTPTracker . prototype . scrape = function ( opts ) {
6557 var self = this
6658 if ( self . destroyed ) return
6759
68- if ( ! self . _scrapeUrl ) {
69- self . client . emit ( 'error' , new Error ( 'scrape not supported ' + self . _announceUrl ) )
60+ if ( ! self . scrapeUrl ) {
61+ self . client . emit ( 'error' , new Error ( 'scrape not supported ' + self . announceUrl ) )
7062 return
7163 }
7264
@@ -78,44 +70,33 @@ HTTPTracker.prototype.scrape = function (opts) {
7870 var params = {
7971 info_hash : infoHashes
8072 }
81- self . _request ( self . _scrapeUrl , params , self . _onScrapeResponse . bind ( self ) )
82- }
83-
84- // TODO: Improve this interface
85- HTTPTracker . prototype . setInterval = function ( intervalMs ) {
86- var self = this
87- self . _intervalMs = intervalMs
88- clearInterval ( self . _interval )
89-
90- if ( intervalMs ) {
91- // HACK
92- var update = self . announce . bind ( self , self . client . _defaultAnnounceOpts ( ) )
93- self . _interval = setInterval ( update , self . _intervalMs )
94- }
73+ self . _request ( self . scrapeUrl , params , self . _onScrapeResponse . bind ( self ) )
9574}
9675
9776HTTPTracker . prototype . destroy = function ( cb ) {
9877 var self = this
9978 if ( self . destroyed ) return
10079 self . destroyed = true
80+ clearInterval ( self . interval )
81+
10182 cb ( null )
10283}
10384
10485HTTPTracker . prototype . _request = function ( requestUrl , params , cb ) {
10586 var self = this
106-
10787 var u = requestUrl + ( requestUrl . indexOf ( '?' ) === - 1 ? '?' : '&' ) +
10888 common . querystringStringify ( params )
89+
10990 get . concat ( u , function ( err , data , res ) {
11091 if ( self . destroyed ) return
11192 if ( err ) return self . client . emit ( 'warning' , err )
11293 if ( res . statusCode !== 200 ) {
11394 return self . client . emit ( 'warning' , new Error ( 'Non-200 response code ' +
114- res . statusCode + ' from ' + self . _announceUrl ) )
95+ res . statusCode + ' from ' + self . announceUrl ) )
11596 }
11697 if ( ! data || data . length === 0 ) {
11798 return self . client . emit ( 'warning' , new Error ( 'Invalid tracker response from' +
118- self . _announceUrl ) )
99+ self . announceUrl ) )
119100 }
120101
121102 try {
@@ -145,11 +126,7 @@ HTTPTracker.prototype._onAnnounceResponse = function (data) {
145126 var self = this
146127
147128 var interval = data . interval || data [ 'min interval' ]
148- if ( interval && ! self . _opts . interval && self . _intervalMs !== 0 ) {
149- // use the interval the tracker recommends, UNLESS the user manually specifies an
150- // interval they want to use
151- self . setInterval ( interval * 1000 )
152- }
129+ if ( interval ) self . setInterval ( interval * 1000 )
153130
154131 var trackerId = data [ 'tracker id' ]
155132 if ( trackerId ) {
@@ -158,7 +135,7 @@ HTTPTracker.prototype._onAnnounceResponse = function (data) {
158135 }
159136
160137 self . client . emit ( 'update' , {
161- announce : self . _announceUrl ,
138+ announce : self . announceUrl ,
162139 complete : data . complete ,
163140 incomplete : data . incomplete
164141 } )
@@ -219,7 +196,7 @@ HTTPTracker.prototype._onScrapeResponse = function (data) {
219196 // TODO: optionally handle data.flags.min_request_interval
220197 // (separate from announce interval)
221198 self . client . emit ( 'scrape' , {
222- announce : self . _announceUrl ,
199+ announce : self . announceUrl ,
223200 infoHash : common . binaryToHex ( infoHash ) ,
224201 complete : response . complete ,
225202 incomplete : response . incomplete ,
0 commit comments