You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.9 KiB
70 lines
1.9 KiB
import { Server } from 'bittorrent-tracker';
|
|
import assert from "assert";
|
|
import logging from '../lib/logging.js';
|
|
|
|
const log = logging.create("/services/tracker.js");
|
|
|
|
export const description = "Runs the webtorrent tracker.";
|
|
|
|
export const options = [
|
|
["--port <int>", "Port to listen on.", 9001],
|
|
["--host <ip_addr>", "IP address to listen on.", "0.0.0.0"],
|
|
];
|
|
|
|
export const main = (opts) => {
|
|
const server = new Server({
|
|
udp: false, // enable udp server? [default=true]
|
|
http: true, // enable http server? [default=true]
|
|
ws: true, // enable websocket server? [default=true]
|
|
stats: true, // enable web-based statistics? [default=true]
|
|
filter: (infoHash, params, cb) => {
|
|
log.debug(infoHash, "----------------------------------------------");
|
|
cb(null)
|
|
}
|
|
})
|
|
|
|
server.on('error', (err) => {
|
|
// fatal server error!
|
|
log.debug(err.message)
|
|
})
|
|
|
|
server.on('warning', (err) => {
|
|
// client sent bad data. probably not a problem, just a buggy client.
|
|
log.debug(err.message)
|
|
})
|
|
|
|
server.on('listening', () => {
|
|
// fired when all requested servers are listening
|
|
log.debug('listening on port:', server.http.address().port)
|
|
})
|
|
|
|
// start tracker server listening! Use 0 to listen on a random free port.
|
|
server.listen(opts.port, opts.host, (what) => {
|
|
log.debug(`Listening.... ${opts.host}:${opts.port} ${what}`);
|
|
})
|
|
|
|
// listen for individual tracker messages from peers:
|
|
|
|
server.on('start', (addr) => {
|
|
log.debug('got start message from', addr)
|
|
})
|
|
|
|
server.on('complete', (addr) => {
|
|
log.debug('complete', addr);
|
|
});
|
|
|
|
server.on('update', (addr) => {
|
|
log.debug('update', addr);
|
|
});
|
|
|
|
server.on('stop', (addr) => {
|
|
log.debug('stop', addr);
|
|
});
|
|
|
|
const onHttpReq = server.onHttpRequest.bind(server);
|
|
assert(onHttpReq !== undefined, "Bad call to bind.");
|
|
}
|
|
|
|
|
|
// see: https://github.com/nodejs/node/issues/35212
|
|
process.on('SIGINT', () => process.exit());
|
|
|