//! Tracker parsing, scrape models, and tracker transport implementations. #![forbid(unsafe_code)] pub(super) use std::{ collections::BTreeMap, fmt::{Display, Formatter}, sync::atomic::{AtomicU32, Ordering}, }; pub(super) use reqwest::blocking::Client; pub(super) use crate::{ torrent::{DhtMessageModel, TorrentPeerModel}, transport::{TransportError, TransportErrorKind}, }; /// Tracker parsing and validation error model. mod error; /// Bencode parsing plus tracker wire-format normalization helpers. mod parsing; /// Shared tracker and DHT request-response protocol models. mod request_response; /// Live reqwest-backed HTTP tracker transport. mod reqwest_transport; /// UDP tracker message types and transport helpers. mod udp; pub use self::error::TrackerParseError; pub use self::request_response::{ DhtNodeModel, DhtTransport, TrackerPeerListModel, TrackerRequestModel, TrackerResponseModel, TrackerScrapeFileModel, TrackerScrapeModel, TrackerTransport, }; pub use self::reqwest_transport::ReqwestTrackerTransport; pub use self::udp::{ UDP_TRACKER_PROTOCOL_ID, UdpTrackerAction, UdpTrackerAnnounceEvent, UdpTrackerAnnounceRequest, UdpTrackerAnnounceResponse, UdpTrackerConnectRequest, UdpTrackerConnectResponse, UdpTrackerResponseHeader, UdpTrackerScrapeRequest, UdpTrackerScrapeResponse, UdpTrackerScrapeStats, UdpTrackerTransactionId, }; #[cfg(test)] fn hex_encode(bytes: &[u8]) -> String { parsing::hex_encode(bytes) } #[cfg(test)] mod tracker_tests;