Naut-Tracker/README.md

2.8 KiB

torrent-tracker

A C tracker-side BitTorrent protocol library, shaped to match the neighboring torrent-peer project but focused on announce/scrape handling instead of peer wire transfer.

Current scope:

  • HTTP(S) announce query parsing for BEP-3 tracker parameters.
  • HTTP scrape query parsing and bencoded scrape responses.
  • Compact HTTP tracker responses for IPv4 peers and IPv6 peers6.
  • UDP tracker request parsing and response writing for BEP-15.
  • UDP announce URLData extension parsing for BEP-41.
  • Client-side HTTP query builders and bencoded response parsers for announce and scrape.
  • Client-side UDP connect/announce/scrape request builders and response parsers.
  • BEP-5 DHT/KRPC message builders and parser for ping, find_node, get_peers, announce_peer, responses, and errors.
  • BEP-32 IPv6 DHT compact nodes6 parsing/writing and want flags.
  • In-memory swarm storage for announces, peer expiry, seed/leecher accounting, completed counts, scrape data, no-self filtering, and randomized peer selection with numwant clamping.
  • A protocol-neutral announce/scrape model that a tracker storage engine can use regardless of wire protocol.

This is now the protocol core plus an embeddable in-memory tracker store, not a complete daemon yet. The next layer should add connection listeners, request routing, rate limiting, and auth hooks around this ABI.

Build

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Options:

  • -DTRACKER_NATIVE=OFF for portable builds without -march=native.
  • -DTRACKER_ASAN=ON for AddressSanitizer/UBSan.
  • -DTRACKER_TESTS=OFF to skip the test executable.

Test

cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build
ctest --test-dir build --output-on-failure

Real Tracker Probe

Point the harness at a .torrent file to announce to its HTTP(S)/UDP trackers and print returned swarm stats and peers:

python harness/tracker_probe.py file.torrent --max-trackers 8

Useful options:

  • --tracker URL probes an explicit tracker instead of the torrent's tracker list. Repeat it to test several URLs.
  • --scrape also tries HTTP scrape URLs derived from announce URLs.
  • --timeout SECONDS, --numwant N, and --port PORT control announce behavior.

Layout

Path Role
include/tracker.h public C ABI
src/tracker_http.c HTTP(S) tracker client/server helpers and bencode handling
src/tracker_udp.c UDP tracker client/server packet parser/writers
src/tracker_store.c in-memory swarm table and response selection
src/dht.c DHT/KRPC message parser and writers
harness/tracker_probe.py real-world HTTP/UDP tracker probe for .torrent files
tests/test_tracker.c focused protocol tests
PLAN.md protocol/extension roadmap