mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-04-02 02:35:31 +00:00
aquatic_udp: add and use ConnectedResponse enum
This commit is contained in:
parent
7616df9686
commit
de85feec9a
7 changed files with 47 additions and 21 deletions
|
|
@ -35,6 +35,20 @@ pub enum ConnectedRequest {
|
||||||
Scrape(ScrapeRequest),
|
Scrape(ScrapeRequest),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub enum ConnectedResponse {
|
||||||
|
Announce(AnnounceResponse),
|
||||||
|
Scrape(ScrapeResponse),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Into<Response> for ConnectedResponse {
|
||||||
|
fn into(self) -> Response {
|
||||||
|
match self {
|
||||||
|
Self::Announce(response) => Response::Announce(response),
|
||||||
|
Self::Scrape(response) => Response::Scrape(response),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct ConnectionKey {
|
pub struct ConnectionKey {
|
||||||
pub connection_id: ConnectionId,
|
pub connection_id: ConnectionId,
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ pub fn handle_announce_requests(
|
||||||
torrents: &mut MutexGuard<TorrentMaps>,
|
torrents: &mut MutexGuard<TorrentMaps>,
|
||||||
rng: &mut SmallRng,
|
rng: &mut SmallRng,
|
||||||
requests: Drain<(AnnounceRequest, SocketAddr)>,
|
requests: Drain<(AnnounceRequest, SocketAddr)>,
|
||||||
responses: &mut Vec<(Response, SocketAddr)>,
|
responses: &mut Vec<(ConnectedResponse, SocketAddr)>,
|
||||||
) {
|
) {
|
||||||
let peer_valid_until = ValidUntil::new(config.cleaning.max_peer_age);
|
let peer_valid_until = ValidUntil::new(config.cleaning.max_peer_age);
|
||||||
|
|
||||||
|
|
@ -42,7 +42,7 @@ pub fn handle_announce_requests(
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
(Response::Announce(response), src)
|
(ConnectedResponse::Announce(response), src)
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,12 @@ pub fn run_request_worker(
|
||||||
state: State,
|
state: State,
|
||||||
config: Config,
|
config: Config,
|
||||||
request_receiver: Receiver<(ConnectedRequest, SocketAddr)>,
|
request_receiver: Receiver<(ConnectedRequest, SocketAddr)>,
|
||||||
response_sender: Sender<(Response, SocketAddr)>,
|
response_sender: Sender<(ConnectedResponse, SocketAddr)>,
|
||||||
) {
|
) {
|
||||||
let mut announce_requests: Vec<(AnnounceRequest, SocketAddr)> = Vec::new();
|
let mut announce_requests: Vec<(AnnounceRequest, SocketAddr)> = Vec::new();
|
||||||
let mut scrape_requests: Vec<(ScrapeRequest, SocketAddr)> = Vec::new();
|
let mut scrape_requests: Vec<(ScrapeRequest, SocketAddr)> = Vec::new();
|
||||||
|
|
||||||
let mut responses: Vec<(Response, SocketAddr)> = Vec::new();
|
let mut responses: Vec<(ConnectedResponse, SocketAddr)> = Vec::new();
|
||||||
|
|
||||||
let mut std_rng = StdRng::from_entropy();
|
let mut std_rng = StdRng::from_entropy();
|
||||||
let mut small_rng = SmallRng::from_rng(&mut std_rng).unwrap();
|
let mut small_rng = SmallRng::from_rng(&mut std_rng).unwrap();
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ use crate::common::*;
|
||||||
pub fn handle_scrape_requests(
|
pub fn handle_scrape_requests(
|
||||||
torrents: &mut MutexGuard<TorrentMaps>,
|
torrents: &mut MutexGuard<TorrentMaps>,
|
||||||
requests: Drain<(ScrapeRequest, SocketAddr)>,
|
requests: Drain<(ScrapeRequest, SocketAddr)>,
|
||||||
responses: &mut Vec<(Response, SocketAddr)>,
|
responses: &mut Vec<(ConnectedResponse, SocketAddr)>,
|
||||||
) {
|
) {
|
||||||
let empty_stats = create_torrent_scrape_statistics(0, 0);
|
let empty_stats = create_torrent_scrape_statistics(0, 0);
|
||||||
|
|
||||||
|
|
@ -45,7 +45,7 @@ pub fn handle_scrape_requests(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let response = Response::Scrape(ScrapeResponse {
|
let response = ConnectedResponse::Scrape(ScrapeResponse {
|
||||||
transaction_id: request.transaction_id,
|
transaction_id: request.transaction_id,
|
||||||
torrent_stats: stats,
|
torrent_stats: stats,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ pub fn run_socket_worker(
|
||||||
config: Config,
|
config: Config,
|
||||||
token_num: usize,
|
token_num: usize,
|
||||||
request_sender: Sender<(ConnectedRequest, SocketAddr)>,
|
request_sender: Sender<(ConnectedRequest, SocketAddr)>,
|
||||||
response_receiver: Receiver<(Response, SocketAddr)>,
|
response_receiver: Receiver<(ConnectedResponse, SocketAddr)>,
|
||||||
num_bound_sockets: Arc<AtomicUsize>,
|
num_bound_sockets: Arc<AtomicUsize>,
|
||||||
) {
|
) {
|
||||||
let mut rng = StdRng::from_entropy();
|
let mut rng = StdRng::from_entropy();
|
||||||
|
|
@ -249,7 +249,7 @@ fn send_responses(
|
||||||
config: &Config,
|
config: &Config,
|
||||||
socket: &mut UdpSocket,
|
socket: &mut UdpSocket,
|
||||||
buffer: &mut [u8],
|
buffer: &mut [u8],
|
||||||
response_receiver: &Receiver<(Response, SocketAddr)>,
|
response_receiver: &Receiver<(ConnectedResponse, SocketAddr)>,
|
||||||
local_responses: Drain<(Response, SocketAddr)>,
|
local_responses: Drain<(Response, SocketAddr)>,
|
||||||
) {
|
) {
|
||||||
let mut responses_sent: usize = 0;
|
let mut responses_sent: usize = 0;
|
||||||
|
|
@ -257,9 +257,11 @@ fn send_responses(
|
||||||
|
|
||||||
let mut cursor = Cursor::new(buffer);
|
let mut cursor = Cursor::new(buffer);
|
||||||
|
|
||||||
let response_iterator = local_responses
|
let response_iterator = local_responses.into_iter().chain(
|
||||||
.into_iter()
|
response_receiver
|
||||||
.chain(response_receiver.try_iter());
|
.try_iter()
|
||||||
|
.map(|(response, addr)| (response.into(), addr)),
|
||||||
|
);
|
||||||
|
|
||||||
for (response, src) in response_iterator {
|
for (response, src) in response_iterator {
|
||||||
cursor.set_position(0);
|
cursor.set_position(0);
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ pub fn bench_announce_handler(
|
||||||
bench_config: &BenchConfig,
|
bench_config: &BenchConfig,
|
||||||
aquatic_config: &Config,
|
aquatic_config: &Config,
|
||||||
request_sender: &Sender<(ConnectedRequest, SocketAddr)>,
|
request_sender: &Sender<(ConnectedRequest, SocketAddr)>,
|
||||||
response_receiver: &Receiver<(Response, SocketAddr)>,
|
response_receiver: &Receiver<(ConnectedResponse, SocketAddr)>,
|
||||||
rng: &mut impl Rng,
|
rng: &mut impl Rng,
|
||||||
info_hashes: &[InfoHash],
|
info_hashes: &[InfoHash],
|
||||||
) -> (usize, Duration) {
|
) -> (usize, Duration) {
|
||||||
|
|
@ -36,10 +36,12 @@ pub fn bench_announce_handler(
|
||||||
for round in (0..bench_config.num_rounds).progress_with(pb) {
|
for round in (0..bench_config.num_rounds).progress_with(pb) {
|
||||||
for request_chunk in requests.chunks(p) {
|
for request_chunk in requests.chunks(p) {
|
||||||
for (request, src) in request_chunk {
|
for (request, src) in request_chunk {
|
||||||
request_sender.send((ConnectedRequest::Announce(request.clone()), *src)).unwrap();
|
request_sender
|
||||||
|
.send((ConnectedRequest::Announce(request.clone()), *src))
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
while let Ok((Response::Announce(r), _)) = response_receiver.try_recv() {
|
while let Ok((ConnectedResponse::Announce(r), _)) = response_receiver.try_recv() {
|
||||||
num_responses += 1;
|
num_responses += 1;
|
||||||
|
|
||||||
if let Some(last_peer) = r.peers.last() {
|
if let Some(last_peer) = r.peers.last() {
|
||||||
|
|
@ -51,7 +53,7 @@ pub fn bench_announce_handler(
|
||||||
let total = bench_config.num_announce_requests * (round + 1);
|
let total = bench_config.num_announce_requests * (round + 1);
|
||||||
|
|
||||||
while num_responses < total {
|
while num_responses < total {
|
||||||
if let Ok((Response::Announce(r), _)) = response_receiver.recv() {
|
if let Ok((ConnectedResponse::Announce(r), _)) = response_receiver.recv() {
|
||||||
num_responses += 1;
|
num_responses += 1;
|
||||||
|
|
||||||
if let Some(last_peer) = r.peers.last() {
|
if let Some(last_peer) = r.peers.last() {
|
||||||
|
|
@ -99,7 +101,10 @@ pub fn create_requests(
|
||||||
port: Port(rng.gen()),
|
port: Port(rng.gen()),
|
||||||
};
|
};
|
||||||
|
|
||||||
requests.push((request, SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 1))));
|
requests.push((
|
||||||
|
request,
|
||||||
|
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 1)),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
requests
|
requests
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ pub fn bench_scrape_handler(
|
||||||
bench_config: &BenchConfig,
|
bench_config: &BenchConfig,
|
||||||
aquatic_config: &Config,
|
aquatic_config: &Config,
|
||||||
request_sender: &Sender<(ConnectedRequest, SocketAddr)>,
|
request_sender: &Sender<(ConnectedRequest, SocketAddr)>,
|
||||||
response_receiver: &Receiver<(Response, SocketAddr)>,
|
response_receiver: &Receiver<(ConnectedResponse, SocketAddr)>,
|
||||||
rng: &mut impl Rng,
|
rng: &mut impl Rng,
|
||||||
info_hashes: &[InfoHash],
|
info_hashes: &[InfoHash],
|
||||||
) -> (usize, Duration) {
|
) -> (usize, Duration) {
|
||||||
|
|
@ -41,10 +41,12 @@ pub fn bench_scrape_handler(
|
||||||
for round in (0..bench_config.num_rounds).progress_with(pb) {
|
for round in (0..bench_config.num_rounds).progress_with(pb) {
|
||||||
for request_chunk in requests.chunks(p) {
|
for request_chunk in requests.chunks(p) {
|
||||||
for (request, src) in request_chunk {
|
for (request, src) in request_chunk {
|
||||||
request_sender.send((ConnectedRequest::Scrape(request.clone()), *src)).unwrap();
|
request_sender
|
||||||
|
.send((ConnectedRequest::Scrape(request.clone()), *src))
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
while let Ok((Response::Scrape(r), _)) = response_receiver.try_recv() {
|
while let Ok((ConnectedResponse::Scrape(r), _)) = response_receiver.try_recv() {
|
||||||
num_responses += 1;
|
num_responses += 1;
|
||||||
|
|
||||||
if let Some(stat) = r.torrent_stats.last() {
|
if let Some(stat) = r.torrent_stats.last() {
|
||||||
|
|
@ -56,7 +58,7 @@ pub fn bench_scrape_handler(
|
||||||
let total = bench_config.num_scrape_requests * (round + 1);
|
let total = bench_config.num_scrape_requests * (round + 1);
|
||||||
|
|
||||||
while num_responses < total {
|
while num_responses < total {
|
||||||
if let Ok((Response::Scrape(r), _)) = response_receiver.recv() {
|
if let Ok((ConnectedResponse::Scrape(r), _)) = response_receiver.recv() {
|
||||||
num_responses += 1;
|
num_responses += 1;
|
||||||
|
|
||||||
if let Some(stat) = r.torrent_stats.last() {
|
if let Some(stat) = r.torrent_stats.last() {
|
||||||
|
|
@ -101,7 +103,10 @@ pub fn create_requests(
|
||||||
info_hashes: request_info_hashes,
|
info_hashes: request_info_hashes,
|
||||||
};
|
};
|
||||||
|
|
||||||
requests.push((request, SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 1))));
|
requests.push((
|
||||||
|
request,
|
||||||
|
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 1)),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
requests
|
requests
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue