import * as bitTorrentTracker from 'bittorrent-tracker'
import * as proxyAddr from 'proxy-addr'
import { Server as WebSocketServer } from 'ws'
-import { CONFIG, TRACKER_RATE_LIMITS } from '../initializers/constants'
+import { TRACKER_RATE_LIMITS } from '../initializers/constants'
import { VideoFileModel } from '../models/video/video-file'
import { parse } from 'url'
import { VideoStreamingPlaylistModel } from '../models/video/video-streaming-playlist'
+import { CONFIG } from '../initializers/config'
const TrackerServer = bitTorrentTracker.Server
ws: false,
dht: false,
filter: async function (infoHash, params, cb) {
+ if (CONFIG.TRACKER.ENABLED === false) {
+ return cb(new Error('Tracker is disabled on this instance.'))
+ }
+
let ip: string
if (params.type === 'ws') {
peersIps[ ip ] = peersIps[ ip ] ? peersIps[ ip ] + 1 : 1
peersIpInfoHash[ key ] = peersIpInfoHash[ key ] ? peersIpInfoHash[ key ] + 1 : 1
- if (peersIpInfoHash[ key ] > TRACKER_RATE_LIMITS.ANNOUNCES_PER_IP_PER_INFOHASH) {
+ if (CONFIG.TRACKER.REJECT_TOO_MANY_ANNOUNCES && peersIpInfoHash[ key ] > TRACKER_RATE_LIMITS.ANNOUNCES_PER_IP_PER_INFOHASH) {
return cb(new Error(`Too many requests (${peersIpInfoHash[ key ]} of ip ${ip} for torrent ${infoHash}`))
}
try {
+ if (CONFIG.TRACKER.PRIVATE === false) return cb()
+
const videoFileExists = await VideoFileModel.doesInfohashExist(infoHash)
if (videoFileExists === true) return cb()
}
})
-trackerServer.on('error', function (err) {
- logger.error('Error in tracker.', { err })
-})
+if (CONFIG.TRACKER.ENABLED !== false) {
-trackerServer.on('warning', function (err) {
- logger.warn('Warning in tracker.', { err })
-})
+ trackerServer.on('error', function (err) {
+ logger.error('Error in tracker.', { err })
+ })
+
+ trackerServer.on('warning', function (err) {
+ logger.warn('Warning in tracker.', { err })
+ })
+}
const onHttpRequest = trackerServer.onHttpRequest.bind(trackerServer)
trackerRouter.get('/tracker/announce', (req, res) => onHttpRequest(req, res, { action: 'announce' }))