From 6fab7d9c53b394f4e71a4f65eeb5959bf38f0288 Mon Sep 17 00:00:00 2001 From: Chubby Puddles Esq Date: Thu, 9 Jan 2020 16:21:07 -0800 Subject: [PATCH 1/5] Upgraded trust-dns-resolver (#92) --- Cargo.lock | 12 ++++++------ Cargo.toml | 2 +- src/main.rs | 0 src/network/dns/client.rs | 8 ++------ src/network/dns/resolver.rs | 13 +++++++------ src/os/shared.rs | 6 ++++-- src/tests/fakes/fake_input.rs | 4 +++- 7 files changed, 23 insertions(+), 22 deletions(-) mode change 100644 => 100755 src/main.rs diff --git a/Cargo.lock b/Cargo.lock index 70386abb0..39d1131ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,7 +99,7 @@ dependencies = [ "structopt 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "termion 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "trust-dns-resolver 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", + "trust-dns-resolver 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", "tui 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1588,7 +1588,7 @@ dependencies = [ [[package]] name = "trust-dns-proto" -version = "0.18.0-alpha.2" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "async-trait 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1607,7 +1607,7 @@ dependencies = [ [[package]] name = "trust-dns-resolver" -version = "0.18.0-alpha.2" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1620,7 +1620,7 @@ dependencies = [ "resolv-conf 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", + "trust-dns-proto 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2005,8 +2005,8 @@ dependencies = [ "checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" "checksum tokio 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2e765bf9f550bd9b8a970633ca3b56b8120c4b6c5dcbe26a93744cb02fee4b17" -"checksum trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2a7f3a2ab8a919f5eca52a468866a67ed7d3efa265d48a652a9a3452272b413f" -"checksum trust-dns-resolver 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f90b1502b226f8b2514c6d5b37bafa8c200d7ca4102d57dc36ee0f3b7a04a2f" +"checksum trust-dns-proto 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)" = "253a722ff22a1217b7af6199cb2ec5824a19c5110e0db21d3fcb28d5f6e1b0ee" +"checksum trust-dns-resolver 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72d7df08b45f4d6d124cdae3c303f9908159a17b39e633e524349e91bc798d32" "checksum tui 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ff64c925f5e20d7a393c598a33b6afc9c9942e7ebc530085588f5b7667ea559" "checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" "checksum ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8f00ed7be0c1ff1e24f46c3d2af4859f7e863672ba3a6e92e7cff702bf9f06c2" diff --git a/Cargo.toml b/Cargo.toml index 6f7837f2f..1164836cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ chrono = "0.4" regex = "1.3.1" lazy_static = "1.4.0" tokio = { version = "0.2", features = ["rt-core", "sync"] } -trust-dns-resolver = "=0.18.0-alpha.2" +trust-dns-resolver = "0.18.1" async-trait = "0.1.21" [target.'cfg(target_os="linux")'.dependencies] diff --git a/src/main.rs b/src/main.rs old mode 100644 new mode 100755 diff --git a/src/network/dns/client.rs b/src/network/dns/client.rs index 1f3fe17bd..b6796b40b 100644 --- a/src/network/dns/client.rs +++ b/src/network/dns/client.rs @@ -1,7 +1,6 @@ use crate::network::dns::{resolver::Lookup, IpTable}; use std::{ collections::HashSet, - future::Future, net::Ipv4Addr, sync::{Arc, Mutex}, thread::{Builder, JoinHandle}, @@ -23,14 +22,12 @@ pub struct Client { } impl Client { - pub fn new(resolver: R, background: B) -> Result + pub fn new(resolver: R, mut runtime: Runtime) -> Result where - R: Lookup + Send + Sync + 'static, - B: Future + Send + 'static, + R: Lookup + Send + Sync + 'static { let cache = Arc::new(Mutex::new(IpTable::new())); let pending = Arc::new(Mutex::new(PendingAddrs::new())); - let mut runtime = Runtime::new()?; let (tx, mut rx) = mpsc::channel::>(CHANNEL_SIZE); let handle = Builder::new().name("resolver".into()).spawn({ @@ -39,7 +36,6 @@ impl Client { move || { runtime.block_on(async { let resolver = Arc::new(resolver); - tokio::spawn(background); while let Some(ips) = rx.recv().await { for ip in ips { diff --git a/src/network/dns/resolver.rs b/src/network/dns/resolver.rs index 69f630809..87e9a2cd2 100644 --- a/src/network/dns/resolver.rs +++ b/src/network/dns/resolver.rs @@ -1,18 +1,19 @@ use async_trait::async_trait; -use std::{future::Future, net::Ipv4Addr}; -use trust_dns_resolver::{error::ResolveErrorKind, AsyncResolver}; +use std::net::Ipv4Addr; +use trust_dns_resolver::{error::ResolveErrorKind, AsyncResolver, TokioAsyncResolver}; +use tokio::runtime::Handle; #[async_trait] pub trait Lookup { async fn lookup(&self, ip: Ipv4Addr) -> Option; } -pub struct Resolver(AsyncResolver); +pub struct Resolver(TokioAsyncResolver); impl Resolver { - pub fn new() -> Result<(Self, impl Future), failure::Error> { - let (resolver, background) = AsyncResolver::from_system_conf()?; - Ok((Self(resolver), background)) + pub async fn new(runtime: Handle) -> Result { + let resolver = AsyncResolver::from_system_conf(runtime).await?; + Ok(Self(resolver)) } } diff --git a/src/os/shared.rs b/src/os/shared.rs index ec6a29460..441e53461 100644 --- a/src/os/shared.rs +++ b/src/os/shared.rs @@ -4,6 +4,7 @@ use ::pnet_bandwhich_fork::datalink::{self, Config, NetworkInterface}; use ::std::io::{self, stdin, Write}; use ::termion::event::Event; use ::termion::input::TermRead; +use ::tokio::runtime::Runtime; use ::std::io::ErrorKind; use ::std::time; @@ -123,8 +124,9 @@ pub fn get_input( let write_to_stdout = create_write_to_stdout(); let (on_winch, cleanup) = sigwinch(); let dns_client = if resolve { - let (resolver, background) = dns::Resolver::new()?; - let dns_client = dns::Client::new(resolver, background)?; + let mut runtime = Runtime::new()?; + let resolver = runtime.block_on(dns::Resolver::new(runtime.handle().clone())).unwrap(); + let dns_client = dns::Client::new(resolver,runtime)?; Some(dns_client) } else { None diff --git a/src/tests/fakes/fake_input.rs b/src/tests/fakes/fake_input.rs index 92042df8e..bd4295ed2 100644 --- a/src/tests/fakes/fake_input.rs +++ b/src/tests/fakes/fake_input.rs @@ -9,6 +9,7 @@ use ::std::pin::Pin; use ::std::task::{Context, Poll}; use ::std::{thread, time}; use ::termion::event::Event; +use ::tokio::runtime::Runtime; use crate::{ network::{ @@ -172,7 +173,8 @@ pub fn create_fake_on_winch(should_send_winch_event: bool) -> Box { } pub fn create_fake_dns_client(ips_to_hosts: HashMap) -> Option { - let dns_client = dns::Client::new(FakeResolver(ips_to_hosts), FakeBackground {}).unwrap(); + let runtime = Runtime::new().unwrap(); + let dns_client = dns::Client::new(FakeResolver(ips_to_hosts), runtime).unwrap(); Some(dns_client) } From 3eecb969d5440b68bbcc808a062661223c60681e Mon Sep 17 00:00:00 2001 From: Chubby Puddles Esq Date: Thu, 9 Jan 2020 16:49:44 -0800 Subject: [PATCH 2/5] formatting issues --- CONTRIBUTING.md | 2 ++ src/network/dns/client.rs | 2 +- src/network/dns/resolver.rs | 2 +- src/os/shared.rs | 6 ++++-- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 287ddf097..ff82cca70 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,6 +6,8 @@ To set up your development environment: To run tests: `cargo test` +After tests, check the formatting: `cargo fmt -- --check` + Note that at the moment the tests do not test the os layer (anything in the `os` folder). If you are stuck, unsure about how to approach an issue or would like some guidance, you are welcome to contact: aram@poor.dev diff --git a/src/network/dns/client.rs b/src/network/dns/client.rs index b6796b40b..f9d12ed0c 100644 --- a/src/network/dns/client.rs +++ b/src/network/dns/client.rs @@ -24,7 +24,7 @@ pub struct Client { impl Client { pub fn new(resolver: R, mut runtime: Runtime) -> Result where - R: Lookup + Send + Sync + 'static + R: Lookup + Send + Sync + 'static, { let cache = Arc::new(Mutex::new(IpTable::new())); let pending = Arc::new(Mutex::new(PendingAddrs::new())); diff --git a/src/network/dns/resolver.rs b/src/network/dns/resolver.rs index 87e9a2cd2..d802a2641 100644 --- a/src/network/dns/resolver.rs +++ b/src/network/dns/resolver.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use std::net::Ipv4Addr; -use trust_dns_resolver::{error::ResolveErrorKind, AsyncResolver, TokioAsyncResolver}; use tokio::runtime::Handle; +use trust_dns_resolver::{error::ResolveErrorKind, AsyncResolver, TokioAsyncResolver}; #[async_trait] pub trait Lookup { diff --git a/src/os/shared.rs b/src/os/shared.rs index 441e53461..d2c2c348f 100644 --- a/src/os/shared.rs +++ b/src/os/shared.rs @@ -125,8 +125,10 @@ pub fn get_input( let (on_winch, cleanup) = sigwinch(); let dns_client = if resolve { let mut runtime = Runtime::new()?; - let resolver = runtime.block_on(dns::Resolver::new(runtime.handle().clone())).unwrap(); - let dns_client = dns::Client::new(resolver,runtime)?; + let resolver = runtime + .block_on(dns::Resolver::new(runtime.handle().clone())) + .unwrap(); + let dns_client = dns::Client::new(resolver, runtime)?; Some(dns_client) } else { None From 524142b64edc488a403651ce0bf6b9afa6dbe189 Mon Sep 17 00:00:00 2001 From: Chubby Puddles Esq Date: Fri, 10 Jan 2020 11:33:38 -0800 Subject: [PATCH 3/5] made requested PR changes --- src/network/dns/resolver.rs | 4 ++-- src/os/shared.rs | 3 +-- src/tests/fakes/fake_input.rs | 13 ------------- 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/network/dns/resolver.rs b/src/network/dns/resolver.rs index d802a2641..007c48561 100644 --- a/src/network/dns/resolver.rs +++ b/src/network/dns/resolver.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use std::net::Ipv4Addr; use tokio::runtime::Handle; -use trust_dns_resolver::{error::ResolveErrorKind, AsyncResolver, TokioAsyncResolver}; +use trust_dns_resolver::{error::ResolveErrorKind, TokioAsyncResolver}; #[async_trait] pub trait Lookup { @@ -12,7 +12,7 @@ pub struct Resolver(TokioAsyncResolver); impl Resolver { pub async fn new(runtime: Handle) -> Result { - let resolver = AsyncResolver::from_system_conf(runtime).await?; + let resolver = TokioAsyncResolver::from_system_conf(runtime).await?; Ok(Self(resolver)) } } diff --git a/src/os/shared.rs b/src/os/shared.rs index d2c2c348f..a55043b23 100644 --- a/src/os/shared.rs +++ b/src/os/shared.rs @@ -126,8 +126,7 @@ pub fn get_input( let dns_client = if resolve { let mut runtime = Runtime::new()?; let resolver = runtime - .block_on(dns::Resolver::new(runtime.handle().clone())) - .unwrap(); + .block_on(dns::Resolver::new(runtime.handle().clone()))?; let dns_client = dns::Client::new(resolver, runtime)?; Some(dns_client) } else { diff --git a/src/tests/fakes/fake_input.rs b/src/tests/fakes/fake_input.rs index bd4295ed2..253082efb 100644 --- a/src/tests/fakes/fake_input.rs +++ b/src/tests/fakes/fake_input.rs @@ -3,10 +3,7 @@ use ::ipnetwork::IpNetwork; use ::pnet_bandwhich_fork::datalink::DataLinkReceiver; use ::pnet_bandwhich_fork::datalink::NetworkInterface; use ::std::collections::HashMap; -use ::std::future::Future; use ::std::net::{IpAddr, Ipv4Addr, SocketAddr}; -use ::std::pin::Pin; -use ::std::task::{Context, Poll}; use ::std::{thread, time}; use ::termion::event::Event; use ::tokio::runtime::Runtime; @@ -187,13 +184,3 @@ impl Lookup for FakeResolver { self.0.get(&ip).cloned() } } - -struct FakeBackground {} - -impl Future for FakeBackground { - type Output = (); - - fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll { - Poll::Ready(()) - } -} From effa116004e4d74124892959e5fcf331424fcadc Mon Sep 17 00:00:00 2001 From: Chubby Puddles Esq Date: Fri, 10 Jan 2020 11:35:27 -0800 Subject: [PATCH 4/5] fmt fix --- src/os/shared.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/os/shared.rs b/src/os/shared.rs index a55043b23..385f25364 100644 --- a/src/os/shared.rs +++ b/src/os/shared.rs @@ -125,8 +125,7 @@ pub fn get_input( let (on_winch, cleanup) = sigwinch(); let dns_client = if resolve { let mut runtime = Runtime::new()?; - let resolver = runtime - .block_on(dns::Resolver::new(runtime.handle().clone()))?; + let resolver = runtime.block_on(dns::Resolver::new(runtime.handle().clone()))?; let dns_client = dns::Client::new(resolver, runtime)?; Some(dns_client) } else { From 457efb6810181d65f465c3b4ea07ef6e701b0f5d Mon Sep 17 00:00:00 2001 From: Chubby Puddles Esq Date: Fri, 10 Jan 2020 11:44:13 -0800 Subject: [PATCH 5/5] changed permission on main.rs --- src/main.rs | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/main.rs diff --git a/src/main.rs b/src/main.rs old mode 100755 new mode 100644