aquatic: handlers: pass rng's as function arguments

This commit is contained in:
Joakim Frostegård 2020-04-09 09:53:18 +02:00
parent bd16cdd709
commit 2fd732efc6
5 changed files with 25 additions and 11 deletions

View file

@ -3,7 +3,7 @@ use std::sync::atomic::Ordering;
use std::time::Instant;
use std::vec::Drain;
use rand::{Rng, SeedableRng, rngs::SmallRng, thread_rng};
use rand::{Rng, rngs::{SmallRng, StdRng}};
use bittorrent_udp::types::*;
@ -13,11 +13,11 @@ use crate::config::Config;
pub fn handle_connect_requests(
state: &State,
rng: &mut StdRng,
responses: &mut Vec<(Response, SocketAddr)>,
requests: Drain<(ConnectRequest, SocketAddr)>,
){
let now = Time(Instant::now());
let mut rng = thread_rng();
responses.extend(requests.map(|(request, src)| {
let connection_id = ConnectionId(rng.gen());
@ -44,11 +44,10 @@ pub fn handle_connect_requests(
pub fn handle_announce_requests(
state: &State,
config: &Config,
rng: &mut SmallRng,
responses: &mut Vec<(Response, SocketAddr)>,
requests: Drain<(AnnounceRequest, SocketAddr)>,
){
let mut rng = SmallRng::from_rng(thread_rng()).unwrap();
responses.extend(requests.filter_map(|(request, src)| {
let connection_key = ConnectionKey {
connection_id: request.connection_id,
@ -108,7 +107,7 @@ pub fn handle_announce_requests(
}
let response_peers = extract_response_peers(
&mut rng,
rng,
&torrent_data.peers,
max_num_peers_to_take,
);

View file

@ -6,6 +6,7 @@ use mio::{Events, Poll, Interest, Token};
use mio::net::UdpSocket;
use net2::{UdpSocketExt, UdpBuilder};
use net2::unix::UnixUdpBuilderExt;
use rand::{SeedableRng, rngs::{SmallRng, StdRng}};
use bittorrent_udp::types::IpVersion;
use bittorrent_udp::converters::{response_to_bytes, request_from_bytes};
@ -38,6 +39,9 @@ pub fn run_event_loop(
let mut scrape_requests: Vec<(ScrapeRequest, SocketAddr)> = Vec::new();
let mut responses: Vec<(Response, SocketAddr)> = Vec::new();
let mut std_rng = StdRng::from_entropy();
let mut small_rng = SmallRng::from_rng(&mut std_rng).unwrap();
loop {
poll.poll(&mut events, None)
.expect("failed polling");
@ -51,6 +55,8 @@ pub fn run_event_loop(
&state,
&config,
&mut socket,
&mut std_rng,
&mut small_rng,
&mut buffer,
&mut responses,
&mut connect_requests,
@ -107,6 +113,8 @@ fn handle_readable_socket(
state: &State,
config: &Config,
socket: &mut UdpSocket,
std_rng: &mut StdRng,
small_rng: &mut SmallRng,
buffer: &mut [u8],
responses: &mut Vec<(Response, SocketAddr)>,
connect_requests: &mut Vec<(ConnectRequest, SocketAddr)>,
@ -167,12 +175,14 @@ fn handle_readable_socket(
handle_connect_requests(
state,
std_rng,
responses,
connect_requests.drain(..)
);
handle_announce_requests(
state,
config,
small_rng,
responses,
announce_requests.drain(..),
);