@@ -2,12 +2,13 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
22use  std:: sync:: Arc ; 
33
44use  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} ; 
911use  crate :: peer:: TorrentPeer ; 
10- use  crate :: protocol:: utils:: get_connection_id; 
1112use  crate :: tracker:: statistics:: TrackerStatisticsEvent ; 
1213use  crate :: tracker:: torrent:: TorrentError ; 
1314use  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 ?; 
0 commit comments