torrust_tracker/servers/udp/
peer_builder.rs

1//! Logic to extract the peer info from the announce request.
2use std::net::{IpAddr, SocketAddr};
3
4use torrust_tracker_clock::clock::Time;
5use torrust_tracker_primitives::peer;
6
7use crate::CurrentClock;
8
9/// Extracts the [`peer::Peer`] info from the
10/// announce request.
11///
12/// # Arguments
13///
14/// * `peer_ip` - The real IP address of the peer, not the one in the announce request.
15#[must_use]
16pub fn from_request(announce_request: &aquatic_udp_protocol::AnnounceRequest, peer_ip: &IpAddr) -> peer::Peer {
17    peer::Peer {
18        peer_id: announce_request.peer_id,
19        peer_addr: SocketAddr::new(*peer_ip, announce_request.port.0.into()),
20        updated: CurrentClock::now(),
21        uploaded: announce_request.bytes_uploaded,
22        downloaded: announce_request.bytes_downloaded,
23        left: announce_request.bytes_left,
24        event: announce_request.event.into(),
25    }
26}