diff options
author | Chubby Puddles Esq <andrew@2b9x.com> | 2020-01-09 16:21:07 -0800 |
---|---|---|
committer | Chubby Puddles Esq <andrew@2b9x.com> | 2020-01-09 16:32:03 -0800 |
commit | 6fab7d9c53b394f4e71a4f65eeb5959bf38f0288 (patch) | |
tree | 0625aabfcf5581ef6e48c748878df4d33be747c7 /src | |
parent | 81a751a91b7ccae92b93626b8d59bd2021e5b842 (diff) |
Upgraded trust-dns-resolver (#92)
Diffstat (limited to 'src')
-rwxr-xr-x[-rw-r--r--] | src/main.rs | 0 | ||||
-rw-r--r-- | src/network/dns/client.rs | 8 | ||||
-rw-r--r-- | src/network/dns/resolver.rs | 13 | ||||
-rw-r--r-- | src/os/shared.rs | 6 | ||||
-rw-r--r-- | src/tests/fakes/fake_input.rs | 4 |
5 files changed, 16 insertions, 15 deletions
diff --git a/src/main.rs b/src/main.rs index ea40de0..ea40de0 100644..100755 --- a/src/main.rs +++ b/src/main.rs diff --git a/src/network/dns/client.rs b/src/network/dns/client.rs index 1f3fe17..b6796b4 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<R, B>(resolver: R, background: B) -> Result<Self, failure::Error> + pub fn new<R>(resolver: R, mut runtime: Runtime) -> Result<Self, failure::Error> where - R: Lookup + Send + Sync + 'static, - B: Future<Output = ()> + 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::<Vec<Ipv4Addr>>(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 69f6308..87e9a2c 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<String>; } -pub struct Resolver(AsyncResolver); +pub struct Resolver(TokioAsyncResolver); impl Resolver { - pub fn new() -> Result<(Self, impl Future<Output = ()>), failure::Error> { - let (resolver, background) = AsyncResolver::from_system_conf()?; - Ok((Self(resolver), background)) + pub async fn new(runtime: Handle) -> Result<Self, failure::Error> { + let resolver = AsyncResolver::from_system_conf(runtime).await?; + Ok(Self(resolver)) } } diff --git a/src/os/shared.rs b/src/os/shared.rs index ec6a294..441e534 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 92042df..bd4295e 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<OnSigWinch> { } pub fn create_fake_dns_client(ips_to_hosts: HashMap<IpAddr, String>) -> Option<dns::Client> { - 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) } |