summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChubby Puddles Esq <andrew@2b9x.com>2020-01-09 16:21:07 -0800
committerChubby Puddles Esq <andrew@2b9x.com>2020-01-09 16:32:03 -0800
commit6fab7d9c53b394f4e71a4f65eeb5959bf38f0288 (patch)
tree0625aabfcf5581ef6e48c748878df4d33be747c7 /src
parent81a751a91b7ccae92b93626b8d59bd2021e5b842 (diff)
Upgraded trust-dns-resolver (#92)
Diffstat (limited to 'src')
-rwxr-xr-x[-rw-r--r--]src/main.rs0
-rw-r--r--src/network/dns/client.rs8
-rw-r--r--src/network/dns/resolver.rs13
-rw-r--r--src/os/shared.rs6
-rw-r--r--src/tests/fakes/fake_input.rs4
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)
}