Skip to content

Commit 61f887f

Browse files
committed
udp: use connection cookie implementation
1 parent 613518d commit 61f887f

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

src/udp/handlers.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
22
use std::sync::Arc;
33

44
use aquatic_udp_protocol::{
5-
AnnounceInterval, AnnounceRequest, AnnounceResponse, ConnectRequest, ConnectResponse, ErrorResponse, NumberOfDownloads,
6-
NumberOfPeers, Port, Request, Response, ResponsePeer, ScrapeRequest, ScrapeResponse, TorrentScrapeStatistics, TransactionId,
5+
AnnounceInterval, AnnounceRequest, AnnounceResponse, ConnectRequest, ConnectResponse, ConnectionId, ErrorResponse,
6+
NumberOfDownloads, NumberOfPeers, Port, Request, Response, ResponsePeer, ScrapeRequest, ScrapeResponse,
7+
TorrentScrapeStatistics, TransactionId,
78
};
89

10+
use super::connection_cookie::{check_connection_cookie, make_connection_cookie};
911
use crate::peer::TorrentPeer;
10-
use crate::protocol::utils::get_connection_id;
1112
use crate::tracker::statistics::TrackerStatisticsEvent;
1213
use crate::tracker::torrent::TorrentError;
1314
use crate::tracker::tracker::TorrentTracker;
@@ -69,7 +70,8 @@ pub async fn handle_connect(
6970
request: &ConnectRequest,
7071
tracker: Arc<TorrentTracker>,
7172
) -> Result<Response, ServerError> {
72-
let connection_id = get_connection_id(&remote_addr);
73+
let connection_cookie = make_connection_cookie(&remote_addr);
74+
let connection_id = ConnectionId(i64::from_le_bytes(connection_cookie));
7375

7476
let response = Response::from(ConnectResponse {
7577
transaction_id: request.transaction_id,
@@ -94,6 +96,13 @@ pub async fn handle_announce(
9496
announce_request: &AnnounceRequest,
9597
tracker: Arc<TorrentTracker>,
9698
) -> Result<Response, ServerError> {
99+
match check_connection_cookie(&remote_addr, &announce_request.connection_id.0.to_be_bytes()) {
100+
Ok(_) => {}
101+
Err(e) => {
102+
return Err(e);
103+
}
104+
}
105+
97106
let wrapped_announce_request = AnnounceRequestWrapper::new(announce_request.clone());
98107

99108
authenticate(&wrapped_announce_request.info_hash, tracker.clone()).await?;

src/udp/server.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ impl UdpServer {
2525
}
2626

2727
pub async fn start(&self) {
28+
// generate the crypto seed before we do anything
29+
crate::protocol::crypto::keys::seeds::initialize_default_seed();
30+
2831
loop {
2932
let mut data = [0; MAX_PACKET_SIZE];
3033
let socket = self.socket.clone();

0 commit comments

Comments
 (0)