Struct torrust_tracker::tracker::Tracker
source · pub struct Tracker {
pub config: Arc<Configuration>,
pub database: Box<dyn Database>,
/* private fields */
}Fields§
§config: Arc<Configuration>§database: Box<dyn Database>Implementations§
source§impl Tracker
impl Tracker
sourcepub fn new(
config: Arc<Configuration>,
stats_event_sender: Option<Box<dyn EventSender>>,
stats_repository: Repo
) -> Result<Tracker, Error>
pub fn new( config: Arc<Configuration>, stats_event_sender: Option<Box<dyn EventSender>>, stats_repository: Repo ) -> Result<Tracker, Error>
Errors
Will return a databases::error::Error if unable to connect to database.
pub fn is_public(&self) -> bool
pub fn is_private(&self) -> bool
pub fn is_whitelisted(&self) -> bool
pub fn requires_authentication(&self) -> bool
sourcepub async fn announce(
&self,
info_hash: &InfoHash,
peer: &mut Peer,
remote_client_ip: &IpAddr
) -> AnnounceData
pub async fn announce( &self, info_hash: &InfoHash, peer: &mut Peer, remote_client_ip: &IpAddr ) -> AnnounceData
It handles an announce request.
sourcepub async fn scrape(&self, info_hashes: &Vec<InfoHash>) -> ScrapeData
pub async fn scrape(&self, info_hashes: &Vec<InfoHash>) -> ScrapeData
It handles a scrape request.
BEP 48: Tracker Protocol Extension: Scrape.
sourcepub async fn generate_auth_key(
&self,
lifetime: Duration
) -> Result<ExpiringKey, Error>
pub async fn generate_auth_key( &self, lifetime: Duration ) -> Result<ExpiringKey, Error>
Errors
Will return a database::Error if unable to add the auth_key to the database.
sourcepub async fn verify_auth_key(&self, key: &Key) -> Result<(), Error>
pub async fn verify_auth_key(&self, key: &Key) -> Result<(), Error>
Errors
Will return a key::Error if unable to get any auth_key.
sourcepub async fn load_keys_from_database(&self) -> Result<(), Error>
pub async fn load_keys_from_database(&self) -> Result<(), Error>
Errors
Will return a database::Error if unable to load_keys from the database.
sourcepub async fn add_torrent_to_whitelist(
&self,
info_hash: &InfoHash
) -> Result<(), Error>
pub async fn add_torrent_to_whitelist( &self, info_hash: &InfoHash ) -> Result<(), Error>
Adding torrents is not relevant to public trackers.
Errors
Will return a database::Error if unable to add the info_hash into the whitelist database.
pub async fn add_torrent_to_memory_whitelist( &self, info_hash: &InfoHash ) -> bool
sourcepub async fn remove_torrent_from_whitelist(
&self,
info_hash: &InfoHash
) -> Result<(), Error>
pub async fn remove_torrent_from_whitelist( &self, info_hash: &InfoHash ) -> Result<(), Error>
Removing torrents is not relevant to public trackers.
Errors
Will return a database::Error if unable to remove the info_hash from the whitelist database.
sourcepub async fn remove_torrent_from_database_whitelist(
&self,
info_hash: &InfoHash
) -> Result<(), Error>
pub async fn remove_torrent_from_database_whitelist( &self, info_hash: &InfoHash ) -> Result<(), Error>
Errors
Will return a database::Error if unable to remove the info_hash from the whitelist database.
pub async fn remove_torrent_from_memory_whitelist( &self, info_hash: &InfoHash ) -> bool
pub async fn is_info_hash_whitelisted(&self, info_hash: &InfoHash) -> bool
sourcepub async fn load_whitelist_from_database(&self) -> Result<(), Error>
pub async fn load_whitelist_from_database(&self) -> Result<(), Error>
Errors
Will return a database::Error if unable to load the list whitelisted info_hashs from the database.
sourcepub async fn authenticate_request(
&self,
info_hash: &InfoHash,
key: &Option<Key>
) -> Result<(), Error>
pub async fn authenticate_request( &self, info_hash: &InfoHash, key: &Option<Key> ) -> Result<(), Error>
Errors
Will return a torrent::Error::PeerKeyNotValid if the key is not valid.
Will return a torrent::Error::PeerNotAuthenticated if the key is None.
Will return a torrent::Error::TorrentNotWhitelisted if the the Tracker is in listed mode and the info_hash is not whitelisted.
sourcepub async fn authenticate(&self, key: &Key) -> Result<(), Error>
pub async fn authenticate(&self, key: &Key) -> Result<(), Error>
Errors
Will return an error if the the authentication key cannot be verified.
The only authorization process is the whitelist.
Errors
Will return an error if the tracker is running in listed mode
and the infohash is not whitelisted.
sourcepub async fn load_torrents_from_database(&self) -> Result<(), Error>
pub async fn load_torrents_from_database(&self) -> Result<(), Error>
Loading the torrents from database into memory
Errors
Will return a database::Error if unable to load the list of persistent_torrents from the database.
sourcepub async fn get_all_torrent_peers(&self, info_hash: &InfoHash) -> Vec<Peer> ⓘ
pub async fn get_all_torrent_peers(&self, info_hash: &InfoHash) -> Vec<Peer> ⓘ
Get all torrent peers for a given torrent
pub async fn update_torrent_with_peer_and_get_stats( &self, info_hash: &InfoHash, peer: &Peer ) -> SwarmStats
pub async fn get_torrents( &self ) -> RwLockReadGuard<'_, BTreeMap<InfoHash, Entry>>
pub async fn get_torrents_metrics(&self) -> TorrentsMetrics
pub async fn get_stats(&self) -> RwLockReadGuard<'_, Metrics>
pub async fn send_stats_event( &self, event: Event ) -> Option<Result<(), SendError<Event>>>
pub async fn cleanup_torrents(&self)
Auto Trait Implementations§
impl !RefUnwindSafe for Tracker
impl Send for Tracker
impl Sync for Tracker
impl Unpin for Tracker
impl !UnwindSafe for Tracker
Blanket Implementations§
§impl<T> Conv for T
impl<T> Conv for T
§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where &'a Self: for<'a> IntoIterator,
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T, U, I> LiftInto<U, I> for Twhere
U: LiftFrom<T, I>,
impl<T, U, I> LiftInto<U, I> for Twhere U: LiftFrom<T, I>,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,
self, then passes self.as_mut() into the pipe
function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<Source> Sculptor<HNil, HNil> for Source
impl<Source> Sculptor<HNil, HNil> for Source
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
.tap_ref_mut() only in debug builds, and is erased in release
builds.