Skip to content

Commit 74ed592

Browse files
committed
feat(http): [torrust#184] added optional params to announce req in Axum implementation
1 parent b1612f6 commit 74ed592

File tree

3 files changed

+401
-99
lines changed

3 files changed

+401
-99
lines changed

src/http/axum_implementation/handlers/announce.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes};
55
use axum::extract::State;
66
use axum::response::{IntoResponse, Response};
77
use axum_client_ip::SecureClientIp;
8+
use log::debug;
89

9-
use crate::http::axum_implementation::requests::announce::{Announce, ExtractAnnounceRequest};
10+
use crate::http::axum_implementation::requests::announce::{Announce, Event, ExtractAnnounceRequest};
1011
use crate::http::axum_implementation::responses;
1112
use crate::protocol::clock::{Current, Time};
1213
use crate::tracker::peer::Peer;
@@ -19,7 +20,7 @@ pub async fn handle(
1920
ExtractAnnounceRequest(announce_request): ExtractAnnounceRequest,
2021
secure_ip: SecureClientIp,
2122
) -> Response {
22-
// todo: compact response and optional params
23+
debug!("http announce request: {:#?}", announce_request);
2324

2425
let info_hash = announce_request.info_hash;
2526
let remote_client_ip = secure_ip.0;
@@ -42,15 +43,24 @@ pub async fn handle(
4243

4344
#[must_use]
4445
fn peer_from_request(announce_request: &Announce, peer_ip: &IpAddr) -> Peer {
45-
#[allow(clippy::cast_possible_truncation)]
4646
Peer {
4747
peer_id: announce_request.peer_id,
4848
peer_addr: SocketAddr::new(*peer_ip, announce_request.port),
4949
updated: Current::now(),
50-
// todo: optional parameters not included in the announce request yet
51-
uploaded: NumberOfBytes(i128::from(0) as i64),
52-
downloaded: NumberOfBytes(i128::from(0) as i64),
53-
left: NumberOfBytes(i128::from(0) as i64),
54-
event: AnnounceEvent::None,
50+
uploaded: NumberOfBytes(announce_request.uploaded.unwrap_or(0)),
51+
downloaded: NumberOfBytes(announce_request.downloaded.unwrap_or(0)),
52+
left: NumberOfBytes(announce_request.left.unwrap_or(0)),
53+
event: map_to_aquatic_event(&announce_request.event),
54+
}
55+
}
56+
57+
fn map_to_aquatic_event(event: &Option<Event>) -> AnnounceEvent {
58+
match event {
59+
Some(event) => match &event {
60+
Event::Started => aquatic_udp_protocol::AnnounceEvent::Started,
61+
Event::Stopped => aquatic_udp_protocol::AnnounceEvent::Stopped,
62+
Event::Completed => aquatic_udp_protocol::AnnounceEvent::Completed,
63+
},
64+
None => aquatic_udp_protocol::AnnounceEvent::None,
5565
}
5666
}

0 commit comments

Comments
 (0)