2.8 KiB
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
peersand IPv6peers6. - 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
nodes6parsing/writing andwantflags. - In-memory swarm storage for announces, peer expiry, seed/leecher accounting,
completed counts, scrape data, no-self filtering, and randomized peer
selection with
numwantclamping. - 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=OFFfor portable builds without-march=native.-DTRACKER_ASAN=ONfor AddressSanitizer/UBSan.-DTRACKER_TESTS=OFFto 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 URLprobes an explicit tracker instead of the torrent's tracker list. Repeat it to test several URLs.--scrapealso tries HTTP scrape URLs derived from announce URLs.--timeout SECONDS,--numwant N, and--port PORTcontrol 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 |